[ { "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": "uint256", "name": "maxLoan", "type": "uint256" } ], "name": "ERC3156ExceededMaxLoan", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC3156InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "ERC3156UnsupportedToken", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "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": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "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": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "flashFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC3156FlashBorrower", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "maxFlashLoan", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "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" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610160604052348015610010575f80fd5b5060405161377e38038061377e83398181016040528101906100329190610824565b6040518060400160405280601381526020017f576f726c644865616c7468436172655465616d00000000000000000000000000815250806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250836040518060400160405280601381526020017f576f726c644865616c7468436172655465616d000000000000000000000000008152506040518060400160405280600481526020017f5743485400000000000000000000000000000000000000000000000000000000815250816003908161011b9190610a89565b50806004908161012b9190610a89565b5050505f60055f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101b7575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101ae9190610b67565b60405180910390fd5b6101c6816102b060201b60201c565b506101db60068361037560201b90919060201c565b61012081815250506101f760078261037560201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506102346103c260201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050506102aa3361028461041c60201b60201c565b600a6102909190610ce8565b63389fd98061029f9190610d32565b61042460201b60201c565b50610f85565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156103965761038f836104a960201b60201c565b90506103bc565b826103a68361050e60201b60201c565b5f0190816103b49190610a89565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610401959493929190610d9a565b60405160208183030381529060405280519060200120905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610494575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161048b9190610b67565b60405180910390fd5b6104a55f838361051760201b60201c565b5050565b5f80829050601f815111156104f557826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016104ec9190610e51565b60405180910390fd5b80518161050190610e9e565b5f1c175f1b915050919050565b5f819050919050565b61052883838361052d60201b60201c565b505050565b61053b61055160201b60201c565b61054c83838361059860201b60201c565b505050565b61055f6107b160201b60201c565b15610596576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105e8578060025f8282546105dc9190610f04565b925050819055506106b6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610671578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161066893929190610f37565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106fd578060025f8282540392505081905550610747565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107a49190610f6c565b60405180910390a3505050565b5f60055f9054906101000a900460ff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107f3826107ca565b9050919050565b610803816107e9565b811461080d575f80fd5b50565b5f8151905061081e816107fa565b92915050565b5f60208284031215610839576108386107c6565b5b5f61084684828501610810565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806108ca57607f821691505b6020821081036108dd576108dc610886565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261093f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610904565b6109498683610904565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61098d61098861098384610961565b61096a565b610961565b9050919050565b5f819050919050565b6109a683610973565b6109ba6109b282610994565b848454610910565b825550505050565b5f90565b6109ce6109c2565b6109d981848461099d565b505050565b5b818110156109fc576109f15f826109c6565b6001810190506109df565b5050565b601f821115610a4157610a12816108e3565b610a1b846108f5565b81016020851015610a2a578190505b610a3e610a36856108f5565b8301826109de565b50505b505050565b5f82821c905092915050565b5f610a615f1984600802610a46565b1980831691505092915050565b5f610a798383610a52565b9150826002028217905092915050565b610a928261084f565b67ffffffffffffffff811115610aab57610aaa610859565b5b610ab582546108b3565b610ac0828285610a00565b5f60209050601f831160018114610af1575f8415610adf578287015190505b610ae98582610a6e565b865550610b50565b601f198416610aff866108e3565b5f5b82811015610b2657848901518255600182019150602085019450602081019050610b01565b86831015610b435784890151610b3f601f891682610a52565b8355505b6001600288020188555050505b505050505050565b610b61816107e9565b82525050565b5f602082019050610b7a5f830184610b58565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610c0257808604811115610bde57610bdd610b80565b5b6001851615610bed5780820291505b8081029050610bfb85610bad565b9450610bc2565b94509492505050565b5f82610c1a5760019050610cd5565b81610c27575f9050610cd5565b8160018114610c3d5760028114610c4757610c76565b6001915050610cd5565b60ff841115610c5957610c58610b80565b5b8360020a915084821115610c7057610c6f610b80565b5b50610cd5565b5060208310610133831016604e8410600b8410161715610cab5782820a905083811115610ca657610ca5610b80565b5b610cd5565b610cb88484846001610bb9565b92509050818404811115610ccf57610cce610b80565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610cf282610961565b9150610cfd83610cdc565b9250610d2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610c0b565b905092915050565b5f610d3c82610961565b9150610d4783610961565b9250828202610d5581610961565b91508282048414831517610d6c57610d6b610b80565b5b5092915050565b5f819050919050565b610d8581610d73565b82525050565b610d9481610961565b82525050565b5f60a082019050610dad5f830188610d7c565b610dba6020830187610d7c565b610dc76040830186610d7c565b610dd46060830185610d8b565b610de16080830184610b58565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610e238261084f565b610e2d8185610deb565b9350610e3d818560208601610dfb565b610e4681610e09565b840191505092915050565b5f6020820190508181035f830152610e698184610e19565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610e958251610d73565b80915050919050565b5f610ea882610e71565b82610eb284610e7b565b9050610ebd81610e8a565b92506020821015610efd57610ef87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610904565b831692505b5050919050565b5f610f0e82610961565b9150610f1983610961565b9250828201905080821115610f3157610f30610b80565b5b92915050565b5f606082019050610f4a5f830186610b58565b610f576020830185610d8b565b610f646040830184610d8b565b949350505050565b5f602082019050610f7f5f830184610d8b565b92915050565b60805160a05160c05160e0516101005161012051610140516127a8610fd65f395f61135401525f61131901525f61164b01525f61162a01525f610f0601525f610f5c01525f610f8501526127a85ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c806370a08231116100dc5780638da5cb5b11610095578063d505accf1161006f578063d505accf1461042d578063d9d98ce414610449578063dd62ed3e14610479578063f2fde38b146104a957610171565b80638da5cb5b146103c157806395d89b41146103df578063a9059cbb146103fd57610171565b806370a082311461030d578063715018a61461033d57806379cc6790146103475780637ecebe00146103635780638456cb591461039357806384b0196e1461039d57610171565b80633f4ba83a1161012e5780633f4ba83a1461024d57806340c10f191461025757806342966c68146102735780635c975abb1461028f5780635cffe9de146102ad578063613255ab146102dd57610171565b806306fdde0314610175578063095ea7b31461019357806318160ddd146101c357806323b872dd146101e1578063313ce567146102115780633644e5151461022f575b5f80fd5b61017d6104c5565b60405161018a9190611db3565b60405180910390f35b6101ad60048036038101906101a89190611e68565b610555565b6040516101ba9190611ec0565b60405180910390f35b6101cb610577565b6040516101d89190611ee8565b60405180910390f35b6101fb60048036038101906101f69190611f01565b610580565b6040516102089190611ec0565b60405180910390f35b6102196105ae565b6040516102269190611f6c565b60405180910390f35b6102376105b6565b6040516102449190611f9d565b60405180910390f35b6102556105c4565b005b610271600480360381019061026c9190611e68565b6105d6565b005b61028d60048036038101906102889190611fb6565b6105ec565b005b610297610600565b6040516102a49190611ec0565b60405180910390f35b6102c760048036038101906102c2919061207d565b610615565b6040516102d49190611ec0565b60405180910390f35b6102f760048036038101906102f29190612101565b61080a565b6040516103049190611ee8565b60405180910390f35b61032760048036038101906103229190612101565b61087f565b6040516103349190611ee8565b60405180910390f35b6103456108c4565b005b610361600480360381019061035c9190611e68565b6108d7565b005b61037d60048036038101906103789190612101565b6108f7565b60405161038a9190611ee8565b60405180910390f35b61039b610908565b005b6103a561091a565b6040516103b8979695949392919061222c565b60405180910390f35b6103c96109bf565b6040516103d691906122ae565b60405180910390f35b6103e76109e8565b6040516103f49190611db3565b60405180910390f35b61041760048036038101906104129190611e68565b610a78565b6040516104249190611ec0565b60405180910390f35b6104476004803603810190610442919061231b565b610a9a565b005b610463600480360381019061045e9190611e68565b610bdf565b6040516104709190611ee8565b60405180910390f35b610493600480360381019061048e91906123b8565b610c62565b6040516104a09190611ee8565b60405180910390f35b6104c360048036038101906104be9190612101565b610ce4565b005b6060600380546104d490612423565b80601f016020809104026020016040519081016040528092919081815260200182805461050090612423565b801561054b5780601f106105225761010080835404028352916020019161054b565b820191905f5260205f20905b81548152906001019060200180831161052e57829003601f168201915b5050505050905090565b5f8061055f610d68565b905061056c818585610d6f565b600191505092915050565b5f600254905090565b5f8061058a610d68565b9050610597858285610d81565b6105a2858585610e13565b60019150509392505050565b5f6012905090565b5f6105bf610f03565b905090565b6105cc610fb9565b6105d4611040565b565b6105de610fb9565b6105e882826110a1565b5050565b6105fd6105f7610d68565b82611120565b50565b5f60055f9054906101000a900460ff16905090565b5f806106208661080a565b90508085111561066757806040517ffd9a760900000000000000000000000000000000000000000000000000000000815260040161065e9190611ee8565b60405180910390fd5b5f6106728787610bdf565b905061067e88876110a1565b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98873ffffffffffffffffffffffffffffffffffffffff166323e30c8b6106c3610d68565b8a8a868b8b6040518763ffffffff1660e01b81526004016106e99695949392919061249d565b6020604051808303815f875af1158015610705573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610729919061250b565b1461076b57876040517f678c5b0000000000000000000000000000000000000000000000000000000000815260040161076291906122ae565b60405180910390fd5b5f61077461119f565b905061078c8930848a6107879190612563565b610d81565b5f8214806107c557505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156107e4576107df8983896107da9190612563565b611120565b6107fa565b6107ee8988611120565b6107f9898284610e13565b5b6001935050505095945050505050565b5f3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610844575f610878565b61084c610577565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6108779190612596565b5b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108cc610fb9565b6108d55f6111a3565b565b6108e9826108e3610d68565b83610d81565b6108f38282611120565b5050565b5f61090182611268565b9050919050565b610910610fb9565b6109186112ae565b565b5f6060805f805f606061092b611310565b61093361134b565b46305f801b5f67ffffffffffffffff811115610952576109516125c9565b5b6040519080825280602002602001820160405280156109805781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109f790612423565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2390612423565b8015610a6e5780601f10610a4557610100808354040283529160200191610a6e565b820191905f5260205f20905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b5f80610a82610d68565b9050610a8f818585610e13565b600191505092915050565b83421115610adf57836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610ad69190611ee8565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b0d8c611386565b89604051602001610b23969594939291906125f6565b6040516020818303038152906040528051906020012090505f610b45826113d9565b90505f610b54828787876113f2565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bc857808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610bbf929190612655565b60405180910390fd5b610bd38a8a8a610d6f565b50505050505050505050565b5f3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c5057826040517fb5a7db92000000000000000000000000000000000000000000000000000000008152600401610c4791906122ae565b60405180910390fd5b610c5a8383611420565b905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610cec610fb9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d5c575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610d5391906122ae565b60405180910390fd5b610d65816111a3565b50565b5f33905090565b610d7c8383836001611427565b505050565b5f610d8c8484610c62565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e0d5781811015610dfe578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610df59392919061267c565b60405180910390fd5b610e0c84848484035f611427565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e83575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e7a91906122ae565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef3575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610eea91906122ae565b60405180910390fd5b610efe8383836115f6565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610f7e57507f000000000000000000000000000000000000000000000000000000000000000046145b15610fab577f00000000000000000000000000000000000000000000000000000000000000009050610fb6565b610fb3611606565b90505b90565b610fc1610d68565b73ffffffffffffffffffffffffffffffffffffffff16610fdf6109bf565b73ffffffffffffffffffffffffffffffffffffffff161461103e57611002610d68565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161103591906122ae565b60405180910390fd5b565b61104861169b565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61108a610d68565b60405161109791906122ae565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611111575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161110891906122ae565b60405180910390fd5b61111c5f83836115f6565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161118791906122ae565b60405180910390fd5b61119b825f836115f6565b5050565b5f90565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112b66116db565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112f9610d68565b60405161130691906122ae565b60405180910390a1565b606061134660067f000000000000000000000000000000000000000000000000000000000000000061171c90919063ffffffff16565b905090565b606061138160077f000000000000000000000000000000000000000000000000000000000000000061171c90919063ffffffff16565b905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f6113eb6113e5610f03565b836117c9565b9050919050565b5f805f8061140288888888611809565b92509250925061141282826118f0565b829350505050949350505050565b5f92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611497575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161148e91906122ae565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611507575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016114fe91906122ae565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156115f0578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516115e79190611ee8565b60405180910390a35b50505050565b611601838383611a52565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016116809594939291906126b1565b60405160208183030381529060405280519060200120905090565b6116a3610600565b6116d9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6116e3610600565b1561171a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b606060ff5f1b83146117385761173183611a6a565b90506117c3565b81805461174490612423565b80601f016020809104026020016040519081016040528092919081815260200182805461177090612423565b80156117bb5780601f10611792576101008083540402835291602001916117bb565b820191905f5260205f20905b81548152906001019060200180831161179e57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611845575f6003859250925092506118e6565b5f6001888888886040515f81526020016040526040516118689493929190612702565b6020604051602081039080840390855afa158015611888573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118d9575f60015f801b935093509350506118e6565b805f805f1b935093509350505b9450945094915050565b5f600381111561190357611902612745565b5b82600381111561191657611915612745565b5b0315611a4e57600160038111156119305761192f612745565b5b82600381111561194357611942612745565b5b0361197a576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561198e5761198d612745565b5b8260038111156119a1576119a0612745565b5b036119e557805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016119dc9190611ee8565b60405180910390fd5b6003808111156119f8576119f7612745565b5b826003811115611a0b57611a0a612745565b5b03611a4d57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611a449190611f9d565b60405180910390fd5b5b5050565b611a5a6116db565b611a65838383611adc565b505050565b60605f611a7683611cf5565b90505f602067ffffffffffffffff811115611a9457611a936125c9565b5b6040519080825280601f01601f191660200182016040528015611ac65781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b2c578060025f828254611b209190612563565b92505081905550611bfa565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611bb5578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611bac9392919061267c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c41578060025f8282540392505081905550611c8b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ce89190611ee8565b60405180910390a3505050565b5f8060ff835f1c169050601f811115611d3a576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611d8582611d43565b611d8f8185611d4d565b9350611d9f818560208601611d5d565b611da881611d6b565b840191505092915050565b5f6020820190508181035f830152611dcb8184611d7b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611e0482611ddb565b9050919050565b611e1481611dfa565b8114611e1e575f80fd5b50565b5f81359050611e2f81611e0b565b92915050565b5f819050919050565b611e4781611e35565b8114611e51575f80fd5b50565b5f81359050611e6281611e3e565b92915050565b5f8060408385031215611e7e57611e7d611dd3565b5b5f611e8b85828601611e21565b9250506020611e9c85828601611e54565b9150509250929050565b5f8115159050919050565b611eba81611ea6565b82525050565b5f602082019050611ed35f830184611eb1565b92915050565b611ee281611e35565b82525050565b5f602082019050611efb5f830184611ed9565b92915050565b5f805f60608486031215611f1857611f17611dd3565b5b5f611f2586828701611e21565b9350506020611f3686828701611e21565b9250506040611f4786828701611e54565b9150509250925092565b5f60ff82169050919050565b611f6681611f51565b82525050565b5f602082019050611f7f5f830184611f5d565b92915050565b5f819050919050565b611f9781611f85565b82525050565b5f602082019050611fb05f830184611f8e565b92915050565b5f60208284031215611fcb57611fca611dd3565b5b5f611fd884828501611e54565b91505092915050565b5f611feb82611dfa565b9050919050565b611ffb81611fe1565b8114612005575f80fd5b50565b5f8135905061201681611ff2565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261203d5761203c61201c565b5b8235905067ffffffffffffffff81111561205a57612059612020565b5b60208301915083600182028301111561207657612075612024565b5b9250929050565b5f805f805f6080868803121561209657612095611dd3565b5b5f6120a388828901612008565b95505060206120b488828901611e21565b94505060406120c588828901611e54565b935050606086013567ffffffffffffffff8111156120e6576120e5611dd7565b5b6120f288828901612028565b92509250509295509295909350565b5f6020828403121561211657612115611dd3565b5b5f61212384828501611e21565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6121608161212c565b82525050565b61216f81611dfa565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6121a781611e35565b82525050565b5f6121b8838361219e565b60208301905092915050565b5f602082019050919050565b5f6121da82612175565b6121e4818561217f565b93506121ef8361218f565b805f5b8381101561221f57815161220688826121ad565b9750612211836121c4565b9250506001810190506121f2565b5085935050505092915050565b5f60e08201905061223f5f83018a612157565b81810360208301526122518189611d7b565b905081810360408301526122658188611d7b565b90506122746060830187611ed9565b6122816080830186612166565b61228e60a0830185611f8e565b81810360c08301526122a081846121d0565b905098975050505050505050565b5f6020820190506122c15f830184612166565b92915050565b6122d081611f51565b81146122da575f80fd5b50565b5f813590506122eb816122c7565b92915050565b6122fa81611f85565b8114612304575f80fd5b50565b5f81359050612315816122f1565b92915050565b5f805f805f805f60e0888a03121561233657612335611dd3565b5b5f6123438a828b01611e21565b97505060206123548a828b01611e21565b96505060406123658a828b01611e54565b95505060606123768a828b01611e54565b94505060806123878a828b016122dd565b93505060a06123988a828b01612307565b92505060c06123a98a828b01612307565b91505092959891949750929550565b5f80604083850312156123ce576123cd611dd3565b5b5f6123db85828601611e21565b92505060206123ec85828601611e21565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061243a57607f821691505b60208210810361244d5761244c6123f6565b5b50919050565b5f82825260208201905092915050565b828183375f83830152505050565b5f61247c8385612453565b9350612489838584612463565b61249283611d6b565b840190509392505050565b5f60a0820190506124b05f830189612166565b6124bd6020830188612166565b6124ca6040830187611ed9565b6124d76060830186611ed9565b81810360808301526124ea818486612471565b9050979650505050505050565b5f81519050612505816122f1565b92915050565b5f602082840312156125205761251f611dd3565b5b5f61252d848285016124f7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61256d82611e35565b915061257883611e35565b92508282019050808211156125905761258f612536565b5b92915050565b5f6125a082611e35565b91506125ab83611e35565b92508282039050818111156125c3576125c2612536565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c0820190506126095f830189611f8e565b6126166020830188612166565b6126236040830187612166565b6126306060830186611ed9565b61263d6080830185611ed9565b61264a60a0830184611ed9565b979650505050505050565b5f6040820190506126685f830185612166565b6126756020830184612166565b9392505050565b5f60608201905061268f5f830186612166565b61269c6020830185611ed9565b6126a96040830184611ed9565b949350505050565b5f60a0820190506126c45f830188611f8e565b6126d16020830187611f8e565b6126de6040830186611f8e565b6126eb6060830185611ed9565b6126f86080830184612166565b9695505050505050565b5f6080820190506127155f830187611f8e565b6127226020830186611f5d565b61272f6040830185611f8e565b61273c6060830184611f8e565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220e3c8b633a846b4091a7ad6259718ae41c6b9a3b29aff9f128b16f475e7fc117b64736f6c634300081a00330000000000000000000000004789e2bcea9ee96260ac4c69cd8efdd6624223d4