{
    "_format": "hh-sol-artifact-1",
    "contractName": "StealthPay",
    "sourceName": "contracts/StealthPay.sol",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_toll",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "_tollCollector",
                    "type": "address"
                },
                {
                    "internalType": "address payable",
                    "name": "_tollReceiver",
                    "type": "address"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "receiver",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "pkx",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "ciphertext",
                    "type": "bytes32"
                }
            ],
            "name": "Announcement",
            "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": "receiver",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "acceptor",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "TokenWithdrawal",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "collectTolls",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "_receiver",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_tollCommitment",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes32",
                    "name": "_pkx",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "_ciphertext",
                    "type": "bytes32"
                }
            ],
            "name": "sendEth",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_receiver",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenAddr",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes32",
                    "name": "_pkx",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "_ciphertext",
                    "type": "bytes32"
                }
            ],
            "name": "sendToken",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_newToll",
                    "type": "uint256"
                }
            ],
            "name": "setToll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_newTollCollector",
                    "type": "address"
                }
            ],
            "name": "setTollCollector",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "_newTollReceiver",
                    "type": "address"
                }
            ],
            "name": "setTollReceiver",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "tokenPayments",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "toll",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "tollCollector",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "tollReceiver",
            "outputs": [
                {
                    "internalType": "address payable",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_acceptor",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenAddr",
                    "type": "address"
                }
            ],
            "name": "withdrawToken",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_acceptor",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenAddr",
                    "type": "address"
                },
                {
                    "internalType": "contract IStealthPayHookReceiver",
                    "name": "_hook",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "_data",
                    "type": "bytes"
                }
            ],
            "name": "withdrawTokenAndCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_stealthAddr",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_acceptor",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenAddr",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_sponsor",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_sponsorFee",
                    "type": "uint256"
                },
                {
                    "internalType": "contract IStealthPayHookReceiver",
                    "name": "_hook",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "_data",
                    "type": "bytes"
                },
                {
                    "internalType": "uint8",
                    "name": "_v",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes32",
                    "name": "_r",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "_s",
                    "type": "bytes32"
                }
            ],
            "name": "withdrawTokenAndCallOnBehalf",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_stealthAddr",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_acceptor",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenAddr",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_sponsor",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_sponsorFee",
                    "type": "uint256"
                },
                {
                    "internalType": "uint8",
                    "name": "_v",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes32",
                    "name": "_r",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes32",
                    "name": "_s",
                    "type": "bytes32"
                }
            ],
            "name": "withdrawTokenOnBehalf",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50604051611cc9380380611cc98339818101604052606081101561003357600080fd5b5080516020820151604090920151909190600061004e6100cf565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600192909255600280546001600160a01b039283166001600160a01b031991821617909155600380549290931691161790556100d3565b3390565b611be7806100e26000396000f3fe60806040526004361061010e5760003560e01c806381ab0fcd116100a5578063b400ee4611610074578063beb9addf11610059578063beb9addf14610574578063c0b9b4ea146105b9578063f2fde38b146105f95761010e565b8063b400ee4614610510578063b9bfabe1146105255761010e565b806381ab0fcd146104135780638da5cb5b146104895780638ef490b01461049e578063a3dace5d146104e65761010e565b8063285aaa20116100e1578063285aaa20146103515780633aeac4e114610378578063715018a6146103c05780637e8c2f94146103d55761010e565b8063059ca2f5146101135780630c6b7067146101f6578063185ad0a51461023657806323d0e7a11461024b575b600080fd5b34801561011f57600080fd5b506101f46004803603608081101561013657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359092169181019060808101606082013564010000000081111561017f57600080fd5b82018360208201111561019157600080fd5b803590602001918460018302840111640100000000831117156101b357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610639945050505050565b005b34801561020257600080fd5b506101f46004803603602081101561021957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661064f565b34801561024257600080fd5b506101f461073e565b34801561025757600080fd5b506101f4600480360361014081101561026f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101358216926040820135831692606083013581169260808101359260a08201359092169181019060e0810160c08201356401000000008111156102ce57600080fd5b8201836020820111156102e057600080fd5b8035906020019184600183028401116401000000008311171561030257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505060ff833516935050506020810135906040013561080d565b34801561035d57600080fd5b5061036661083a565b60408051918252519081900360200190f35b34801561038457600080fd5b506101f46004803603604081101561039b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610840565b3480156103cc57600080fd5b506101f4610864565b3480156103e157600080fd5b506103ea61097b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561041f57600080fd5b506101f4600480360361010081101561043757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013581169160608101359091169060808101359060ff60a0820135169060c08101359060e00135610997565b34801561049557600080fd5b506103ea6109e2565b3480156104aa57600080fd5b50610366600480360360408110156104c157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109fe565b3480156104f257600080fd5b506101f46004803603602081101561050957600080fd5b5035610a1b565b34801561051c57600080fd5b506103ea610ac8565b6101f4600480360360a081101561053b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060800135610ae4565b6101f46004803603608081101561058a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060600135610c50565b3480156105c557600080fd5b506101f4600480360360208110156105dc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dc8565b34801561060557600080fd5b506101f46004803603602081101561061c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610eb7565b6106493385856000808787611058565b50505050565b6106576112f1565b73ffffffffffffffffffffffffffffffffffffffff166106756109e2565b73ffffffffffffffffffffffffffffffffffffffff16146106f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f537465616c74685061793a204e6f7420746f6c6c20636f6c6c6563746f720000604482015290519081900360640190fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff909116904780156108fc02916000818181858888f1935050505015801561080a573d6000803e3d6000fd5b50565b61081f8a8a8a8a8a8a8a8a8a8a6112f5565b61082e8a8a8a8a8a8a8a611058565b50505050505050505050565b60015481565b610860338383600080600060405180602001604052806000815250611058565b5050565b61086c6112f1565b73ffffffffffffffffffffffffffffffffffffffff1661088a6109e2565b73ffffffffffffffffffffffffffffffffffffffff161461090c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6109b988888888886000604051806020016040528060008152508a8a8a6112f5565b6109d88888888888600060405180602001604052806000815250611058565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600460209081526000928352604080842090915290825290205481565b610a236112f1565b73ffffffffffffffffffffffffffffffffffffffff16610a416109e2565b73ffffffffffffffffffffffffffffffffffffffff1614610ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600155565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6001543414610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611a546023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602090815260408083209388168352929052205415610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180611a9d6036913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808616600081815260046020908152604080832094891680845294825291829020879055815187815290810186905280820185905290517f29877766fa2bfe3b90008d6d92f965eca91cbc5757ed775740e460799fb922199181900360600190a3610c49843330866115bd565b5050505050565b6001548314610caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611ad3602f913960400191505060405180910390fd5b6001543411610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180611b616027913960400191505060405180910390fd5b600154604080513492909203808352602083018590528282018490529051909173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9173ffffffffffffffffffffffffffffffffffffffff8816917f29877766fa2bfe3b90008d6d92f965eca91cbc5757ed775740e460799fb92219919081900360600190a360405173ffffffffffffffffffffffffffffffffffffffff86169082156108fc029083906000818181858888f19350505050158015610dc0573d6000803e3d6000fd5b505050505050565b610dd06112f1565b73ffffffffffffffffffffffffffffffffffffffff16610dee6109e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebf6112f1565b73ffffffffffffffffffffffffffffffffffffffff16610edd6109e2565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a776026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600460209081526040808320938916835292905220548381116110e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180611b026039913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208b8616808552908352818420939093558051898703808252915191959394938d1693927f30eb3583ad09933b693a45452ab07512244cdbc5868701aa004c27b7b267c24992918290030190a4611163878983611652565b841561117457611174878787611652565b73ffffffffffffffffffffffffffffffffffffffff8416156112e6578373ffffffffffffffffffffffffffffffffffffffff1663579073de828b8b8b8b8b8a6040518863ffffffff1660e01b8152600401808881526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561127b578181015183820152602001611263565b50505050905090810190601f1680156112a85780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b505050505b505050505050505050565b3390565b6000469050600081308c8c8c8c8c8c604051602001808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113dc5781810151838201526020016113c4565b50505050905090810190601f1680156114095780820380516001836020036101000a031916815260200191505b5099505050505050505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061155257508c73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6112e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f537465616c74685061793a20496e76616c6964205369676e6174757265000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526106499085906116e4565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526116df9084906116e4565b505050565b6000611746826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117bc9092919063ffffffff16565b8051909150156116df5780806020019051602081101561176557600080fd5b50516116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611b88602a913960400191505060405180910390fd5b60606117cb84846000856117d5565b90505b9392505050565b606082471015611830576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b3b6026913960400191505060405180910390fd5b6118398561198f565b6118a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061190d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016118d0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461196f576040519150601f19603f3d011682016040523d82523d6000602084013e611974565b606091505b5091509150611984828286611995565b979650505050505050565b3b151590565b606083156119a45750816117ce565b8251156119b45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a18578181015183820152602001611a00565b50505050905090810190601f168015611a455780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe537465616c74685061793a204d757374207061792074686520657861637420746f6c6c4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537465616c74685061793a2043616e6e6f742073656e64206d6f726520746f6b656e7320746f20737465616c74682061646472657373537465616c74685061793a20496e76616c6964206f72206f7574646174656420746f6c6c20636f6d6d69746d656e74537465616c74685061793a204e6f2062616c616e636520746f207769746864726177206f722066656520657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c537465616c74685061793a204d75737420706179206d6f7265207468616e2074686520746f6c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e0fb172798e744213c04f75185093ef0b1e3d0e29056115b883dbef61e001f3064736f6c63430007060033",
    "deployedBytecode": "0x60806040526004361061010e5760003560e01c806381ab0fcd116100a5578063b400ee4611610074578063beb9addf11610059578063beb9addf14610574578063c0b9b4ea146105b9578063f2fde38b146105f95761010e565b8063b400ee4614610510578063b9bfabe1146105255761010e565b806381ab0fcd146104135780638da5cb5b146104895780638ef490b01461049e578063a3dace5d146104e65761010e565b8063285aaa20116100e1578063285aaa20146103515780633aeac4e114610378578063715018a6146103c05780637e8c2f94146103d55761010e565b8063059ca2f5146101135780630c6b7067146101f6578063185ad0a51461023657806323d0e7a11461024b575b600080fd5b34801561011f57600080fd5b506101f46004803603608081101561013657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359092169181019060808101606082013564010000000081111561017f57600080fd5b82018360208201111561019157600080fd5b803590602001918460018302840111640100000000831117156101b357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610639945050505050565b005b34801561020257600080fd5b506101f46004803603602081101561021957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661064f565b34801561024257600080fd5b506101f461073e565b34801561025757600080fd5b506101f4600480360361014081101561026f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101358216926040820135831692606083013581169260808101359260a08201359092169181019060e0810160c08201356401000000008111156102ce57600080fd5b8201836020820111156102e057600080fd5b8035906020019184600183028401116401000000008311171561030257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505060ff833516935050506020810135906040013561080d565b34801561035d57600080fd5b5061036661083a565b60408051918252519081900360200190f35b34801561038457600080fd5b506101f46004803603604081101561039b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610840565b3480156103cc57600080fd5b506101f4610864565b3480156103e157600080fd5b506103ea61097b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561041f57600080fd5b506101f4600480360361010081101561043757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013581169160608101359091169060808101359060ff60a0820135169060c08101359060e00135610997565b34801561049557600080fd5b506103ea6109e2565b3480156104aa57600080fd5b50610366600480360360408110156104c157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109fe565b3480156104f257600080fd5b506101f46004803603602081101561050957600080fd5b5035610a1b565b34801561051c57600080fd5b506103ea610ac8565b6101f4600480360360a081101561053b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060800135610ae4565b6101f46004803603608081101561058a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060600135610c50565b3480156105c557600080fd5b506101f4600480360360208110156105dc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dc8565b34801561060557600080fd5b506101f46004803603602081101561061c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610eb7565b6106493385856000808787611058565b50505050565b6106576112f1565b73ffffffffffffffffffffffffffffffffffffffff166106756109e2565b73ffffffffffffffffffffffffffffffffffffffff16146106f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f537465616c74685061793a204e6f7420746f6c6c20636f6c6c6563746f720000604482015290519081900360640190fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff909116904780156108fc02916000818181858888f1935050505015801561080a573d6000803e3d6000fd5b50565b61081f8a8a8a8a8a8a8a8a8a8a6112f5565b61082e8a8a8a8a8a8a8a611058565b50505050505050505050565b60015481565b610860338383600080600060405180602001604052806000815250611058565b5050565b61086c6112f1565b73ffffffffffffffffffffffffffffffffffffffff1661088a6109e2565b73ffffffffffffffffffffffffffffffffffffffff161461090c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6109b988888888886000604051806020016040528060008152508a8a8a6112f5565b6109d88888888888600060405180602001604052806000815250611058565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600460209081526000928352604080842090915290825290205481565b610a236112f1565b73ffffffffffffffffffffffffffffffffffffffff16610a416109e2565b73ffffffffffffffffffffffffffffffffffffffff1614610ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600155565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6001543414610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611a546023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602090815260408083209388168352929052205415610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180611a9d6036913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808616600081815260046020908152604080832094891680845294825291829020879055815187815290810186905280820185905290517f29877766fa2bfe3b90008d6d92f965eca91cbc5757ed775740e460799fb922199181900360600190a3610c49843330866115bd565b5050505050565b6001548314610caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611ad3602f913960400191505060405180910390fd5b6001543411610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180611b616027913960400191505060405180910390fd5b600154604080513492909203808352602083018590528282018490529051909173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9173ffffffffffffffffffffffffffffffffffffffff8816917f29877766fa2bfe3b90008d6d92f965eca91cbc5757ed775740e460799fb92219919081900360600190a360405173ffffffffffffffffffffffffffffffffffffffff86169082156108fc029083906000818181858888f19350505050158015610dc0573d6000803e3d6000fd5b505050505050565b610dd06112f1565b73ffffffffffffffffffffffffffffffffffffffff16610dee6109e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ebf6112f1565b73ffffffffffffffffffffffffffffffffffffffff16610edd6109e2565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a776026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600460209081526040808320938916835292905220548381116110e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180611b026039913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208b8616808552908352818420939093558051898703808252915191959394938d1693927f30eb3583ad09933b693a45452ab07512244cdbc5868701aa004c27b7b267c24992918290030190a4611163878983611652565b841561117457611174878787611652565b73ffffffffffffffffffffffffffffffffffffffff8416156112e6578373ffffffffffffffffffffffffffffffffffffffff1663579073de828b8b8b8b8b8a6040518863ffffffff1660e01b8152600401808881526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561127b578181015183820152602001611263565b50505050905090810190601f1680156112a85780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b505050505b505050505050505050565b3390565b6000469050600081308c8c8c8c8c8c604051602001808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113dc5781810151838201526020016113c4565b50505050905090810190601f1680156114095780820380516001836020036101000a031916815260200191505b5099505050505050505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156114d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061155257508c73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6112e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f537465616c74685061793a20496e76616c6964205369676e6174757265000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526106499085906116e4565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526116df9084906116e4565b505050565b6000611746826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117bc9092919063ffffffff16565b8051909150156116df5780806020019051602081101561176557600080fd5b50516116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611b88602a913960400191505060405180910390fd5b60606117cb84846000856117d5565b90505b9392505050565b606082471015611830576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b3b6026913960400191505060405180910390fd5b6118398561198f565b6118a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061190d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016118d0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461196f576040519150601f19603f3d011682016040523d82523d6000602084013e611974565b606091505b5091509150611984828286611995565b979650505050505050565b3b151590565b606083156119a45750816117ce565b8251156119b45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a18578181015183820152602001611a00565b50505050905090810190601f168015611a455780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe537465616c74685061793a204d757374207061792074686520657861637420746f6c6c4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537465616c74685061793a2043616e6e6f742073656e64206d6f726520746f6b656e7320746f20737465616c74682061646472657373537465616c74685061793a20496e76616c6964206f72206f7574646174656420746f6c6c20636f6d6d69746d656e74537465616c74685061793a204e6f2062616c616e636520746f207769746864726177206f722066656520657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c537465616c74685061793a204d75737420706179206d6f7265207468616e2074686520746f6c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e0fb172798e744213c04f75185093ef0b1e3d0e29056115b883dbef61e001f3064736f6c63430007060033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
