{
  "_format": "hh-sol-artifact-1",
  "contractName": "LegacyTokenPaymaster",
  "sourceName": "contracts/samples/LegacyTokenPaymaster.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accountFactory",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "contract IEntryPoint",
          "name": "_entryPoint",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "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": [
        {
          "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": "COST_OF_POST",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "unstakeDelaySec",
          "type": "uint32"
        }
      ],
      "name": "addStake",
      "outputs": [],
      "stateMutability": "payable",
      "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": "deposit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "entryPoint",
      "outputs": [
        {
          "internalType": "contract IEntryPoint",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mintTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum IPaymaster.PostOpMode",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "context",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "actualGasCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "actualUserOpFeePerGas",
          "type": "uint256"
        }
      ],
      "name": "postOp",
      "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": "theFactory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "unlockStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "initCode",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "accountGasLimits",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "preVerificationGas",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "gasFees",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "paymasterAndData",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "signature",
              "type": "bytes"
            }
          ],
          "internalType": "struct PackedUserOperation",
          "name": "userOp",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "userOpHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "maxCost",
          "type": "uint256"
        }
      ],
      "name": "validatePaymasterUserOp",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "context",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "validationData",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "withdrawAddress",
          "type": "address"
        }
      ],
      "name": "withdrawStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "withdrawAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b506040516200216538038062002165833981016040819052620000349162000486565b81808233806200005f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200006a81620000d4565b50620000768162000124565b6001600160a01b0316608052600462000090838262000613565b5060056200009f828262000613565b5050506001600160a01b03831660a052620000bc306001620001e7565b620000cb303360001962000225565b50505062000732565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516301ffc9a760e01b815263122a0e9b60e31b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620006df565b620001e45760405162461bcd60e51b815260206004820152601e60248201527f49456e747279506f696e7420696e74657266616365206d69736d617463680000604482015260640162000056565b50565b6001600160a01b038216620002135760405163ec442f0560e01b81526000600482015260240162000056565b620002216000838362000239565b5050565b6200023483838360016200036c565b505050565b6001600160a01b038316620002685780600360008282546200025c91906200070a565b90915550620002dc9050565b6001600160a01b03831660009081526001602052604090205481811015620002bd5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000056565b6001600160a01b03841660009081526001602052604090209082900390555b6001600160a01b038216620002fa5760038054829003905562000319565b6001600160a01b03821660009081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035f91815260200190565b60405180910390a3505050565b6001600160a01b038416620003985760405163e602df0560e01b81526000600482015260240162000056565b6001600160a01b038316620003c457604051634a1406b160e11b81526000600482015260240162000056565b6001600160a01b03808516600090815260026020908152604080832093871683529290522082905580156200044257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516200043991815260200190565b60405180910390a35b50505050565b6001600160a01b0381168114620001e457600080fd5b634e487b7160e01b600052604160045260246000fd5b8051620004818162000448565b919050565b6000806000606084860312156200049c57600080fd5b8351620004a98162000448565b602085810151919450906001600160401b0380821115620004c957600080fd5b818701915087601f830112620004de57600080fd5b815181811115620004f357620004f36200045e565b604051601f8201601f19908116603f011681019083821181831017156200051e576200051e6200045e565b816040528281528a868487010111156200053757600080fd5b600093505b828410156200055b57848401860151818501870152928501926200053c565b60008684830101528097505050505050506200057a6040850162000474565b90509250925092565b600181811c908216806200059857607f821691505b602082108103620005b957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000234576000816000526020600020601f850160051c81016020861015620005ea5750805b601f850160051c820191505b818110156200060b57828155600101620005f6565b505050505050565b81516001600160401b038111156200062f576200062f6200045e565b620006478162000640845462000583565b84620005bf565b602080601f8311600181146200067f5760008415620006665750858301515b600019600386901b1c1916600185901b1785556200060b565b600085815260208120601f198616915b82811015620006b0578886015182559484019460019091019084016200068f565b5085821015620006cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006f257600080fd5b815180151581146200070357600080fd5b9392505050565b808201808211156200072c57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a0516119d562000790600039600081816103aa01526114360152600081816103fe01528181610541015281816106b70152818161079901528181610866015281816108ef015281816109a20152610c7101526119d56000f3fe60806040526004361061018b5760003560e01c80638da5cb5b116100d6578063c23a5cea1161007f578063dd62ed3e11610059578063dd62ed3e14610472578063f0dda65c146104c5578063f2fde38b146104e557600080fd5b8063c23a5cea14610435578063c399ec8814610455578063d0e30db01461046a57600080fd5b8063a9059cbb116100b0578063a9059cbb146103cc578063b0d691fe146103ec578063bb9fe6bf1461042057600080fd5b80638da5cb5b1461033757806395d89b41146103835780639f5ca2211461039857600080fd5b8063313ce56711610138578063715018a611610112578063715018a6146102ec578063796d4371146103015780637c627b211461031757600080fd5b8063313ce5671461025f57806352b7512c1461027b57806370a08231146102a957600080fd5b806318160ddd1161016957806318160ddd14610200578063205c28781461021f57806323b872dd1461023f57600080fd5b80630396cb601461019057806306fdde03146101a5578063095ea7b3146101d0575b600080fd5b6101a361019e3660046114e4565b610505565b005b3480156101b157600080fd5b506101ba6105b7565b6040516101c79190611575565b60405180910390f35b3480156101dc57600080fd5b506101f06101eb3660046115aa565b610649565b60405190151581526020016101c7565b34801561020c57600080fd5b506003545b6040519081526020016101c7565b34801561022b57600080fd5b506101a361023a3660046115aa565b610663565b34801561024b57600080fd5b506101f061025a3660046115d6565b6106fb565b34801561026b57600080fd5b50604051601281526020016101c7565b34801561028757600080fd5b5061029b610296366004611617565b61071f565b6040516101c792919061166b565b3480156102b557600080fd5b506102116102c436600461168d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b3480156102f857600080fd5b506101a3610742565b34801561030d57600080fd5b50610211613a9881565b34801561032357600080fd5b506101a36103323660046116aa565b610756565b34801561034357600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c7565b34801561038f57600080fd5b506101ba610772565b3480156103a457600080fd5b5061035e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506101f06103e73660046115aa565b610781565b3480156103f857600080fd5b5061035e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561042c57600080fd5b506101a361078f565b34801561044157600080fd5b506101a361045036600461168d565b610819565b34801561046157600080fd5b506102116108be565b6101a3610974565b34801561047e57600080fd5b5061021161048d366004611742565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b3480156104d157600080fd5b506101a36104e03660046115aa565b6109fc565b3480156104f157600080fd5b506101a361050036600461168d565b610a12565b61050d610a7b565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b505050505050565b6060600480546105c69061177b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f29061177b565b801561063f5780601f106106145761010080835404028352916020019161063f565b820191906000526020600020905b81548152906001019060200180831161062257829003601f168201915b5050505050905090565b600033610657818585610ad3565b60019150505b92915050565b61066b610a7b565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561059b57600080fd5b600033610709858285610ae5565b610714858585610bae565b506001949350505050565b6060600061072b610c59565b610736858585610cf8565b91509150935093915050565b61074a610a7b565b6107546000610f4b565b565b61075e610c59565b61076b8585858585610fc0565b5050505050565b6060600580546105c69061177b565b600033610657818585610bae565b610797610a7b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107ff57600080fd5b505af1158015610813573d6000803e3d6000fd5b50505050565b610821610a7b565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156108aa57600080fd5b505af115801561076b573d6000803e3d6000fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f91906117ce565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b1580156108aa57600080fd5b610a04610a7b565b610a0e8282611006565b5050565b610a1a610a7b565b610a4430610a3d60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000610ad3565b610a4d81611062565b610a7830827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610754576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b610ae083838360016110c3565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108135781811015610b9f576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610aca565b610813848484840360006110c3565b73ffffffffffffffffffffffffffffffffffffffff8316610bfe576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b73ffffffffffffffffffffffffffffffffffffffff8216610c4e576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b610ae083838361120b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610aca565b6060600080610d06846113b6565b90506000610d13876113c3565b9050613a988111610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f546f6b656e5061796d61737465723a2067617320746f6f206c6f7720666f722060448201527f706f73744f7000000000000000000000000000000000000000000000000000006064820152608401610aca565b610db360408801886117e7565b159050610e6757610dc3876113f3565b81610dd46102c460208a018a61168d565b1015610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e5061796d61737465723a206e6f2062616c616e636520287072652d60448201527f63726561746529000000000000000000000000000000000000000000000000006064820152608401610aca565b610ee0565b81610e786102c460208a018a61168d565b1015610ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f546f6b656e5061796d61737465723a206e6f2062616c616e63650000000000006044820152606401610aca565b610eed602088018861168d565b6040805173ffffffffffffffffffffffffffffffffffffffff909216602083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052976000975095505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610fce8486018661168d565b90506000610ff0610fe184613a98611882565b610feb9086611899565b6113b6565b9050610ffd823083610bae565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611056576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b610a0e6000838361120b565b61106a610a7b565b73ffffffffffffffffffffffffffffffffffffffff81166110ba576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b610a7881610f4b565b73ffffffffffffffffffffffffffffffffffffffff8416611113576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b73ffffffffffffffffffffffffffffffffffffffff8316611163576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526002602090815260408083209387168352929052208290558015610813578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111fd91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166112435780600360008282546112389190611899565b909155506112f59050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054818110156112c9576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610aca565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661131e5760038054829003905561134a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113a991815260200190565b60405180910390a3505050565b600061065d6064836118ac565b60006113d260e08301836117e7565b6113e1916034916024916118e7565b6113ea91611911565b60801c92915050565b600061140260408301836117e7565b611411916014916000916118e7565b61141a91611959565b60601c905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168114610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f546f6b656e5061796d61737465723a2077726f6e67206163636f756e7420666160448201527f63746f72790000000000000000000000000000000000000000000000000000006064820152608401610aca565b6000602082840312156114f657600080fd5b813563ffffffff8116811461150a57600080fd5b9392505050565b6000815180845260005b818110156115375760208185018101518683018201520161151b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061150a6020830184611511565b73ffffffffffffffffffffffffffffffffffffffff81168114610a7857600080fd5b600080604083850312156115bd57600080fd5b82356115c881611588565b946020939093013593505050565b6000806000606084860312156115eb57600080fd5b83356115f681611588565b9250602084013561160681611588565b929592945050506040919091013590565b60008060006060848603121561162c57600080fd5b833567ffffffffffffffff81111561164357600080fd5b8401610120818703121561165657600080fd5b95602085013595506040909401359392505050565b60408152600061167e6040830185611511565b90508260208301529392505050565b60006020828403121561169f57600080fd5b813561150a81611588565b6000806000806000608086880312156116c257600080fd5b8535600381106116d157600080fd5b9450602086013567ffffffffffffffff808211156116ee57600080fd5b818801915088601f83011261170257600080fd5b81358181111561171157600080fd5b89602082850101111561172357600080fd5b9699602092909201985095966040810135965060600135945092505050565b6000806040838503121561175557600080fd5b823561176081611588565b9150602083013561177081611588565b809150509250929050565b600181811c9082168061178f57607f821691505b6020821081036117c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156117e057600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261181c57600080fd5b83018035915067ffffffffffffffff82111561183757600080fd5b60200191503681900382131561184c57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761065d5761065d611853565b8082018082111561065d5761065d611853565b6000826118e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600080858511156118f757600080fd5b8386111561190457600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156119515780818660100360031b1b83161692505b505092915050565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156119515760149490940360031b84901b169092169291505056fea2646970667358221220a272887859593ad4ed5beefa1a1a2d41d59ff73bdf82cd31d23d507fa7665edd64736f6c63430008170033",
  "deployedBytecode": "0x60806040526004361061018b5760003560e01c80638da5cb5b116100d6578063c23a5cea1161007f578063dd62ed3e11610059578063dd62ed3e14610472578063f0dda65c146104c5578063f2fde38b146104e557600080fd5b8063c23a5cea14610435578063c399ec8814610455578063d0e30db01461046a57600080fd5b8063a9059cbb116100b0578063a9059cbb146103cc578063b0d691fe146103ec578063bb9fe6bf1461042057600080fd5b80638da5cb5b1461033757806395d89b41146103835780639f5ca2211461039857600080fd5b8063313ce56711610138578063715018a611610112578063715018a6146102ec578063796d4371146103015780637c627b211461031757600080fd5b8063313ce5671461025f57806352b7512c1461027b57806370a08231146102a957600080fd5b806318160ddd1161016957806318160ddd14610200578063205c28781461021f57806323b872dd1461023f57600080fd5b80630396cb601461019057806306fdde03146101a5578063095ea7b3146101d0575b600080fd5b6101a361019e3660046114e4565b610505565b005b3480156101b157600080fd5b506101ba6105b7565b6040516101c79190611575565b60405180910390f35b3480156101dc57600080fd5b506101f06101eb3660046115aa565b610649565b60405190151581526020016101c7565b34801561020c57600080fd5b506003545b6040519081526020016101c7565b34801561022b57600080fd5b506101a361023a3660046115aa565b610663565b34801561024b57600080fd5b506101f061025a3660046115d6565b6106fb565b34801561026b57600080fd5b50604051601281526020016101c7565b34801561028757600080fd5b5061029b610296366004611617565b61071f565b6040516101c792919061166b565b3480156102b557600080fd5b506102116102c436600461168d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b3480156102f857600080fd5b506101a3610742565b34801561030d57600080fd5b50610211613a9881565b34801561032357600080fd5b506101a36103323660046116aa565b610756565b34801561034357600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c7565b34801561038f57600080fd5b506101ba610772565b3480156103a457600080fd5b5061035e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506101f06103e73660046115aa565b610781565b3480156103f857600080fd5b5061035e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561042c57600080fd5b506101a361078f565b34801561044157600080fd5b506101a361045036600461168d565b610819565b34801561046157600080fd5b506102116108be565b6101a3610974565b34801561047e57600080fd5b5061021161048d366004611742565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b3480156104d157600080fd5b506101a36104e03660046115aa565b6109fc565b3480156104f157600080fd5b506101a361050036600461168d565b610a12565b61050d610a7b565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b505050505050565b6060600480546105c69061177b565b80601f01602080910402602001604051908101604052809291908181526020018280546105f29061177b565b801561063f5780601f106106145761010080835404028352916020019161063f565b820191906000526020600020905b81548152906001019060200180831161062257829003601f168201915b5050505050905090565b600033610657818585610ad3565b60019150505b92915050565b61066b610a7b565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561059b57600080fd5b600033610709858285610ae5565b610714858585610bae565b506001949350505050565b6060600061072b610c59565b610736858585610cf8565b91509150935093915050565b61074a610a7b565b6107546000610f4b565b565b61075e610c59565b61076b8585858585610fc0565b5050505050565b6060600580546105c69061177b565b600033610657818585610bae565b610797610a7b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107ff57600080fd5b505af1158015610813573d6000803e3d6000fd5b50505050565b610821610a7b565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b1580156108aa57600080fd5b505af115801561076b573d6000803e3d6000fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f91906117ce565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b1580156108aa57600080fd5b610a04610a7b565b610a0e8282611006565b5050565b610a1a610a7b565b610a4430610a3d60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000610ad3565b610a4d81611062565b610a7830827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610754576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b610ae083838360016110c3565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108135781811015610b9f576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610aca565b610813848484840360006110c3565b73ffffffffffffffffffffffffffffffffffffffff8316610bfe576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b73ffffffffffffffffffffffffffffffffffffffff8216610c4e576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b610ae083838361120b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610aca565b6060600080610d06846113b6565b90506000610d13876113c3565b9050613a988111610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f546f6b656e5061796d61737465723a2067617320746f6f206c6f7720666f722060448201527f706f73744f7000000000000000000000000000000000000000000000000000006064820152608401610aca565b610db360408801886117e7565b159050610e6757610dc3876113f3565b81610dd46102c460208a018a61168d565b1015610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6b656e5061796d61737465723a206e6f2062616c616e636520287072652d60448201527f63726561746529000000000000000000000000000000000000000000000000006064820152608401610aca565b610ee0565b81610e786102c460208a018a61168d565b1015610ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f546f6b656e5061796d61737465723a206e6f2062616c616e63650000000000006044820152606401610aca565b610eed602088018861168d565b6040805173ffffffffffffffffffffffffffffffffffffffff909216602083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052976000975095505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610fce8486018661168d565b90506000610ff0610fe184613a98611882565b610feb9086611899565b6113b6565b9050610ffd823083610bae565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611056576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b610a0e6000838361120b565b61106a610a7b565b73ffffffffffffffffffffffffffffffffffffffff81166110ba576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b610a7881610f4b565b73ffffffffffffffffffffffffffffffffffffffff8416611113576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b73ffffffffffffffffffffffffffffffffffffffff8316611163576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610aca565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526002602090815260408083209387168352929052208290558015610813578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516111fd91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166112435780600360008282546112389190611899565b909155506112f59050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054818110156112c9576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610aca565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661131e5760038054829003905561134a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113a991815260200190565b60405180910390a3505050565b600061065d6064836118ac565b60006113d260e08301836117e7565b6113e1916034916024916118e7565b6113ea91611911565b60801c92915050565b600061140260408301836117e7565b611411916014916000916118e7565b61141a91611959565b60601c905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168114610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f546f6b656e5061796d61737465723a2077726f6e67206163636f756e7420666160448201527f63746f72790000000000000000000000000000000000000000000000000000006064820152608401610aca565b6000602082840312156114f657600080fd5b813563ffffffff8116811461150a57600080fd5b9392505050565b6000815180845260005b818110156115375760208185018101518683018201520161151b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061150a6020830184611511565b73ffffffffffffffffffffffffffffffffffffffff81168114610a7857600080fd5b600080604083850312156115bd57600080fd5b82356115c881611588565b946020939093013593505050565b6000806000606084860312156115eb57600080fd5b83356115f681611588565b9250602084013561160681611588565b929592945050506040919091013590565b60008060006060848603121561162c57600080fd5b833567ffffffffffffffff81111561164357600080fd5b8401610120818703121561165657600080fd5b95602085013595506040909401359392505050565b60408152600061167e6040830185611511565b90508260208301529392505050565b60006020828403121561169f57600080fd5b813561150a81611588565b6000806000806000608086880312156116c257600080fd5b8535600381106116d157600080fd5b9450602086013567ffffffffffffffff808211156116ee57600080fd5b818801915088601f83011261170257600080fd5b81358181111561171157600080fd5b89602082850101111561172357600080fd5b9699602092909201985095966040810135965060600135945092505050565b6000806040838503121561175557600080fd5b823561176081611588565b9150602083013561177081611588565b809150509250929050565b600181811c9082168061178f57607f821691505b6020821081036117c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156117e057600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261181c57600080fd5b83018035915067ffffffffffffffff82111561183757600080fd5b60200191503681900382131561184c57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761065d5761065d611853565b8082018082111561065d5761065d611853565b6000826118e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600080858511156118f757600080fd5b8386111561190457600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156119515780818660100360031b1b83161692505b505092915050565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156119515760149490940360031b84901b169092169291505056fea2646970667358221220a272887859593ad4ed5beefa1a1a2d41d59ff73bdf82cd31d23d507fa7665edd64736f6c63430008170033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
