{
  "_format": "hh-sol-artifact-1",
  "contractName": "SwapHelper",
  "sourceName": "contracts/SwapHelper/SwapHelper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "backendSigner_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CallerNotAuthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DeadlineReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MissingSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoCallsProvided",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SaltAlreadyUsed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ApprovedMax",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldSigner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newSigner",
          "type": "address"
        }
      ],
      "name": "BackendSignerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "GenericCallExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "callsCount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "MulticallExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "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": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Swept",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "approveMax",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "backendSigner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "genericCall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "calls",
          "type": "bytes[]"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "multicall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newSigner",
          "type": "address"
        }
      ],
      "name": "setBackendSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "sweep",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "usedSalts",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x610160604052348015610010575f5ffd5b5060405161218938038061218983398101604081905261002f9161027b565b6040805180820182526009815268056656e7573537761760bc1b602080830191909152825180840190935260018352603160f81b9083015290610072825f61010c565b6101205261008181600161010c565b61014052815160208084019190912060e052815190820120610100524660a0526100a961013e565b60805250503060c0526100bb33610197565b60016004556001600160a01b0381166100e75760405163d92e233d60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055610547565b5f60208351101561012757610120836101b3565b9050610138565b816101328482610391565b5060ff90505b92915050565b60e051610100516040515f9261017c927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9246903090602001610461565b60405160208183030381529060405280519060200120905090565b600380546001600160a01b03191690556101b0816101fc565b50565b5f5f829050601f815111156101e6578260405163305a27a960e01b81526004016101dd91906104e9565b60405180910390fd5b80516101f18261050a565b179392505050565b90565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b038216610138565b6102668161024d565b81146101b0575f5ffd5b80516101388161025d565b5f6020828403121561028e5761028e5f5ffd5b5f6102998484610270565b949350505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806102dd57607f821691505b6020821081036102ef576102ef6102b5565b50919050565b5f6101386101f98381565b610309836102f5565b81545f1960089490940293841b1916921b91909117905550565b5f61032f818484610300565b505050565b8181101561034e576103465f82610323565b600101610334565b5050565b601f82111561032f575f818152602090206020601f850104810160208510156103785750805b61038a6020601f860104830182610334565b5050505050565b81516001600160401b038111156103aa576103aa6102a1565b6103b482546102c9565b6103bf828285610352565b6020601f8311600181146103f1575f84156103da5750858201515b5f19600886021c1981166002860217865550610448565b5f85815260208120601f198616915b828110156104205788850151825560209485019460019092019101610400565b8683101561043b57848901515f19601f89166008021c191682555b6001600288020188555050505b505050505050565b805b82525050565b6104528161024d565b60a0810161046f8288610450565b61047c6020830187610450565b6104896040830186610450565b6104966060830185610450565b6104a36080830184610458565b9695505050505050565b8281835e505f910152565b5f6104c1825190565b8084526020840193506104d88185602086016104ad565b601f01601f19169290920192915050565b602080825281016104fa81846104b8565b9392505050565b5f610138825190565b5f610513825190565b6020830161052081610501565b925060208210156105405761053b5f19836020036008021b90565b831692505b5050919050565b60805160a05160c05160e051610100516101205161014051611bf16105985f395f6103c801525f61039e01525f6111cf01525f6111ae01525f61101601525f61104001525f61106a0152611bf15ff3fe608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806384b0196e11610088578063aec42a1711610063578063aec42a171461019e578063b8dc491b146101b1578063e30c3978146101c4578063f2fde38b146101d5575f5ffd5b806384b0196e1461015f5780638da5cb5b1461017a578063a0e069091461018b575f5ffd5b80630b0fdb3d146100cf57806336f95670146101075780634650c3081461011c57806365d65e861461012f578063715018a61461014f57806379ba509714610157575b5f5ffd5b6100f16100dd366004611236565b60066020525f908152604090205460ff1681565b6040516100fe919061125e565b60405180910390f35b61011a610115366004611290565b6101e8565b005b61011a61012a3660046112f5565b610272565b600554610142906001600160a01b031681565b6040516100fe9190611355565b61011a61033d565b61011a610350565b610167610391565b6040516100fe9796959493929190611411565b6002546001600160a01b0316610142565b61011a6101993660046114d4565b610417565b61011a6101ac36600461158d565b610634565b61011a6101bf36600461158d565b6106c6565b6003546001600160a01b0316610142565b61011a6101e3366004611290565b610813565b6101f0610884565b6001600160a01b0381166102175760405163d92e233d60e01b815260040160405180910390fd5b6005546040516001600160a01b038084169216907f93f9d0472cb0fc12887bf8f1f15cc7a197a5acd122ab23b8dcc25de0191e0d5e905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331480159061028d5750333014155b156102ab5760405163c183bcef60e01b815260040160405180910390fd5b6102f482828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b038716929150506108ae565b50826001600160a01b03167f9bef3e449f25221aa6ab339a3eb184cfc318ea4ac85512f02e6c22b913324eb283836040516103309291906115f4565b60405180910390a2505050565b610345610884565b61034e5f6108fa565b565b60035433906001600160a01b031681146103855760405162461bcd60e51b815260040161037c9061164e565b60405180910390fd5b61038e816108fa565b50565b5f606080828080836103c37f000000000000000000000000000000000000000000000000000000000000000083610913565b6103ee7f00000000000000000000000000000000000000000000000000000000000000006001610913565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b61041f6109bc565b5f85900361044057604051633ce6169160e11b815260040160405180910390fd5b834211156104615760405163b08ce5b360e01b815260040160405180910390fd5b5f8190036104825760405163166c700d60e21b815260040160405180910390fd5b5f8381526006602052604090205460ff16156104b157604051630ced304360e01b815260040160405180910390fd5b5f838152600660205260408120805460ff191660011790556104d633888888886109e5565b90505f6105188285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b2092505050565b6005549091506001600160a01b03808316911614610548576040516282b42960e81b815260040160405180910390fd5b5f5b878110156105e1575f80308b8b8581811061056757610567611672565b90506020028101906105799190611686565b6040516105879291906116f3565b5f604051808303815f865af19150503d805f81146105c0576040519150601f19603f3d011682016040523d82523d5f602084013e6105c5565b606091505b5091509150816105d757805160208201fd5b505060010161054a565b5060405133907f704d392ae0677a1e26b4358b06346bfa8e93d60615e56c3764c867b35c14746390610618908a908a908a906116ff565b60405180910390a2505061062c6001600455565b505050505050565b6002546001600160a01b0316331480159061064f5750333014155b1561066d5760405163c183bcef60e01b815260040160405180910390fd5b6106826001600160a01b038316825f19610b42565b806001600160a01b0316826001600160a01b03167fc98957213fcf2b4a542a2f88d854c847b00e87d84fc4a7e66a009196f1cf224060405160405180910390a35050565b6002546001600160a01b031633148015906106e15750333014155b156106ff5760405163c183bcef60e01b815260040160405180910390fd5b6001600160a01b038216158061071c57506001600160a01b038116155b1561073a5760405163d92e233d60e01b815260040160405180910390fd5b6040516370a0823160e01b81525f906001600160a01b038416906370a0823190610768903090600401611355565b602060405180830381865afa158015610783573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a79190611732565b905080156107c3576107c36001600160a01b0384168383610c06565b816001600160a01b0316836001600160a01b03167f7b09c29f9106defeccc9ac3b823f3aad0b470d120e5df7aed033b5c43a4bf718836040516108069190611750565b60405180910390a3505050565b61081b610884565b600380546001600160a01b0383166001600160a01b0319909116811790915561084c6002546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6002546001600160a01b0316331461034e5760405162461bcd60e51b815260040161037c90611792565b60606108f183835f6040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610c2a565b90505b92915050565b600380546001600160a01b031916905561038e81610cc4565b606060ff831461092d5761092683610d15565b90506108f4565b818054610939906117b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610965906117b6565b80156109b05780601f10610987576101008083540402835291602001916109b0565b820191905f5260205f20905b81548152906001019060200180831161099357829003601f168201915b505050505090506108f4565b6002600454036109de5760405162461bcd60e51b815260040161037c90611815565b6002600455565b5f808467ffffffffffffffff811115610a0057610a0061165e565b604051908082528060200260200182016040528015610a29578160200160208202803683370190505b5090505f5b85811015610a9557868682818110610a4857610a48611672565b9050602002810190610a5a9190611686565b604051610a689291906116f3565b6040518091039020828281518110610a8257610a82611672565b6020908102919091010152600101610a2e565b50610b137f0c545221cb71dea46b10349167d787bba14b050610e9eab8d78f64fe47b581368883604051602001610acc919061185a565b604051602081830303815290604052805190602001208787604051602001610af8959493929190611865565b60405160208183030381529060405280519060200120610d52565b9150505b95945050505050565b5f5f5f610b2d8585610d7e565b91509150610b3a81610dc0565b509392505050565b5f63095ea7b360e01b8383604051602401610b5e9291906118b1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050610b9c8482610e6e565b610c0057610bf68463095ea7b360e01b855f604051602401610bbf9291906118df565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f0b565b610c008482610f0b565b50505050565b610c258363a9059cbb60e01b8484604051602401610bbf9291906118b1565b505050565b606082471015610c4c5760405162461bcd60e51b815260040161037c9061193c565b5f5f866001600160a01b03168587604051610c67919061196d565b5f6040518083038185875af1925050503d805f8114610ca1576040519150601f19603f3d011682016040523d82523d5f602084013e610ca6565b606091505b5091509150610cb787838387610f9b565b925050505b949350505050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f610d2183610fe3565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6108f4610d5e61100a565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f8251604103610db2576020830151604084015160608501515f1a610da687828585611099565b94509450505050610db9565b505f905060025b9250929050565b5f816004811115610dd357610dd3611978565b03610ddb5750565b6001816004811115610def57610def611978565b03610e0c5760405162461bcd60e51b815260040161037c906119bf565b6002816004811115610e2057610e20611978565b03610e3d5760405162461bcd60e51b815260040161037c90611a02565b6003816004811115610e5157610e51611978565b0361038e5760405162461bcd60e51b815260040161037c90611a50565b5f5f5f846001600160a01b031684604051610e89919061196d565b5f604051808303815f865af19150503d805f8114610ec2576040519150601f19603f3d011682016040523d82523d5f602084013e610ec7565b606091505b5091509150818015610ef1575080511580610ef1575080806020019051810190610ef19190611a73565b8015610b175750505050506001600160a01b03163b151590565b5f610f5f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111489092919063ffffffff16565b905080515f1480610f7f575080806020019051810190610f7f9190611a73565b610c255760405162461bcd60e51b815260040161037c90611ad7565b60608315610fd95782515f03610fd2576001600160a01b0385163b610fd25760405162461bcd60e51b815260040161037c90611b1a565b5081610cbc565b610cbc8383611160565b5f60ff8216601f8111156108f457604051632cd44ac360e21b815260040160405180910390fd5b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561106257507f000000000000000000000000000000000000000000000000000000000000000046145b1561108c57507f000000000000000000000000000000000000000000000000000000000000000090565b61109461118a565b905090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156110ce57505f9050600361113f565b5f6001878787876040515f81526020016040526040516110f19493929190611b33565b6020604051602081039080840390855afa158015611111573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611139575f6001925092505061113f565b91505f90505b94509492505050565b606061115684845f85610c2a565b90505b9392505050565b8151156111705781518083602001fd5b8060405162461bcd60e51b815260040161037c9190611b68565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611204959493929190611b79565b60405160208183030381529060405280519060200120905090565b805b811461038e575f5ffd5b80356108f48161121f565b5f60208284031215611249576112495f5ffd5b5f610cbc848461122b565b8015155b82525050565b602081016108f48284611254565b5f6001600160a01b0382166108f4565b6112218161126c565b80356108f48161127c565b5f602082840312156112a3576112a35f5ffd5b5f610cbc8484611285565b5f5f83601f8401126112c1576112c15f5ffd5b50813567ffffffffffffffff8111156112db576112db5f5ffd5b602083019150836001820283011115610db957610db95f5ffd5b5f5f5f6040848603121561130a5761130a5f5ffd5b5f6113158686611285565b935050602084013567ffffffffffffffff811115611334576113345f5ffd5b611340868287016112ae565b92509250509250925092565b6112588161126c565b602081016108f4828461134c565b6001600160f81b03198116611258565b8281835e505f910152565b5f611387825190565b80845260208401935061139e818560208601611373565b601f19601f8201165b9093019392505050565b80611258565b5f6113c283836113b1565b505060200190565b5f6113d3825190565b8084526020938401938301805f5b838110156114065781516113f588826113b7565b9750602083019250506001016113e1565b509495945050505050565b60e0810161141f828a611363565b8181036020830152611431818961137e565b90508181036040830152611445818861137e565b905061145460608301876113b1565b611461608083018661134c565b61146e60a08301856113b1565b81810360c083015261148081846113ca565b9998505050505050505050565b5f5f83601f8401126114a0576114a05f5ffd5b50813567ffffffffffffffff8111156114ba576114ba5f5ffd5b602083019150836020820283011115610db957610db95f5ffd5b5f5f5f5f5f5f608087890312156114ec576114ec5f5ffd5b863567ffffffffffffffff811115611505576115055f5ffd5b61151189828a0161148d565b9650965050602061152489828a0161122b565b945050604061153589828a0161122b565b935050606087013567ffffffffffffffff811115611554576115545f5ffd5b61156089828a016112ae565b92509250509295509295509295565b5f6108f48261126c565b6112218161156f565b80356108f481611579565b5f5f604083850312156115a1576115a15f5ffd5b5f6115ac8585611582565b92505060206115bd85828601611285565b9150509250929050565b82818337505f910152565b8183525f6020840193506115e78385846115c7565b601f19601f8401166113a7565b602080825281016111568184866115d2565b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b602080825281016108f481611606565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e193685900301811261169f5761169f5f5ffd5b80840192508235915067ffffffffffffffff8211156116bf576116bf5f5ffd5b6020830192506001820236038313156116d9576116d95f5ffd5b509250929050565b5f6116ed8385846115c7565b50500190565b5f610cbc8284866116e1565b6060810161170d82866113b1565b61171a60208301856113b1565b610cbc60408301846113b1565b80516108f48161121f565b5f60208284031215611745576117455f5ffd5b5f610cbc8484611727565b602081016108f482846113b1565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f5b5060200190565b602080825281016108f48161175e565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806117ca57607f821691505b6020821081036117dc576117dc6117a2565b50919050565b601f81525f602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c008152915061178b565b602080825281016108f4816117e2565b5f61182e825190565b60208301805f5b8381101561140657815161184988826113b7565b975060208301925050600101611835565b5f6111598284611825565b60a0810161187382886113b1565b611880602083018761134c565b61188d60408301866113b1565b61189a60608301856113b1565b6118a760808301846113b1565b9695505050505050565b604081016118bf828561134c565b61115960208301846113b1565b5f60ff82166108f4565b611258816118cc565b604081016118ed828561134c565b61115960208301846118d6565b602681525f602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150611647565b602080825281016108f4816118fa565b5f611955825190565b611963818560208601611373565b9290920192915050565b5f611159828461194c565b634e487b7160e01b5f52602160045260245ffd5b601881525f602082017f45434453413a20696e76616c6964207369676e617475726500000000000000008152915061178b565b602080825281016108f48161198c565b601f81525f602082017f45434453413a20696e76616c6964207369676e6174757265206c656e677468008152915061178b565b602080825281016108f4816119cf565b602281525f602082017f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b60208201529150611647565b602080825281016108f481611a12565b801515611221565b80516108f481611a60565b5f60208284031215611a8657611a865f5ffd5b5f610cbc8484611a68565b602a81525f602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150611647565b602080825281016108f481611a91565b601d81525f602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000008152915061178b565b602080825281016108f481611ae7565b60ff8116611258565b60808101611b4182876113b1565b611b4e6020830186611b2a565b611b5b60408301856113b1565b610b1760608301846113b1565b602080825281016108f1818461137e565b60a08101611b8782886113b1565b611b9460208301876113b1565b611ba160408301866113b1565b611bae60608301856113b1565b6118a7608083018461134c56fea2646970667358221220e9fdb211ce64c20212021c9e5de9fcfc940a1c512fe7fccef3a30715695d872b64736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806384b0196e11610088578063aec42a1711610063578063aec42a171461019e578063b8dc491b146101b1578063e30c3978146101c4578063f2fde38b146101d5575f5ffd5b806384b0196e1461015f5780638da5cb5b1461017a578063a0e069091461018b575f5ffd5b80630b0fdb3d146100cf57806336f95670146101075780634650c3081461011c57806365d65e861461012f578063715018a61461014f57806379ba509714610157575b5f5ffd5b6100f16100dd366004611236565b60066020525f908152604090205460ff1681565b6040516100fe919061125e565b60405180910390f35b61011a610115366004611290565b6101e8565b005b61011a61012a3660046112f5565b610272565b600554610142906001600160a01b031681565b6040516100fe9190611355565b61011a61033d565b61011a610350565b610167610391565b6040516100fe9796959493929190611411565b6002546001600160a01b0316610142565b61011a6101993660046114d4565b610417565b61011a6101ac36600461158d565b610634565b61011a6101bf36600461158d565b6106c6565b6003546001600160a01b0316610142565b61011a6101e3366004611290565b610813565b6101f0610884565b6001600160a01b0381166102175760405163d92e233d60e01b815260040160405180910390fd5b6005546040516001600160a01b038084169216907f93f9d0472cb0fc12887bf8f1f15cc7a197a5acd122ab23b8dcc25de0191e0d5e905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331480159061028d5750333014155b156102ab5760405163c183bcef60e01b815260040160405180910390fd5b6102f482828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b038716929150506108ae565b50826001600160a01b03167f9bef3e449f25221aa6ab339a3eb184cfc318ea4ac85512f02e6c22b913324eb283836040516103309291906115f4565b60405180910390a2505050565b610345610884565b61034e5f6108fa565b565b60035433906001600160a01b031681146103855760405162461bcd60e51b815260040161037c9061164e565b60405180910390fd5b61038e816108fa565b50565b5f606080828080836103c37f000000000000000000000000000000000000000000000000000000000000000083610913565b6103ee7f00000000000000000000000000000000000000000000000000000000000000006001610913565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b61041f6109bc565b5f85900361044057604051633ce6169160e11b815260040160405180910390fd5b834211156104615760405163b08ce5b360e01b815260040160405180910390fd5b5f8190036104825760405163166c700d60e21b815260040160405180910390fd5b5f8381526006602052604090205460ff16156104b157604051630ced304360e01b815260040160405180910390fd5b5f838152600660205260408120805460ff191660011790556104d633888888886109e5565b90505f6105188285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b2092505050565b6005549091506001600160a01b03808316911614610548576040516282b42960e81b815260040160405180910390fd5b5f5b878110156105e1575f80308b8b8581811061056757610567611672565b90506020028101906105799190611686565b6040516105879291906116f3565b5f604051808303815f865af19150503d805f81146105c0576040519150601f19603f3d011682016040523d82523d5f602084013e6105c5565b606091505b5091509150816105d757805160208201fd5b505060010161054a565b5060405133907f704d392ae0677a1e26b4358b06346bfa8e93d60615e56c3764c867b35c14746390610618908a908a908a906116ff565b60405180910390a2505061062c6001600455565b505050505050565b6002546001600160a01b0316331480159061064f5750333014155b1561066d5760405163c183bcef60e01b815260040160405180910390fd5b6106826001600160a01b038316825f19610b42565b806001600160a01b0316826001600160a01b03167fc98957213fcf2b4a542a2f88d854c847b00e87d84fc4a7e66a009196f1cf224060405160405180910390a35050565b6002546001600160a01b031633148015906106e15750333014155b156106ff5760405163c183bcef60e01b815260040160405180910390fd5b6001600160a01b038216158061071c57506001600160a01b038116155b1561073a5760405163d92e233d60e01b815260040160405180910390fd5b6040516370a0823160e01b81525f906001600160a01b038416906370a0823190610768903090600401611355565b602060405180830381865afa158015610783573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a79190611732565b905080156107c3576107c36001600160a01b0384168383610c06565b816001600160a01b0316836001600160a01b03167f7b09c29f9106defeccc9ac3b823f3aad0b470d120e5df7aed033b5c43a4bf718836040516108069190611750565b60405180910390a3505050565b61081b610884565b600380546001600160a01b0383166001600160a01b0319909116811790915561084c6002546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6002546001600160a01b0316331461034e5760405162461bcd60e51b815260040161037c90611792565b60606108f183835f6040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610c2a565b90505b92915050565b600380546001600160a01b031916905561038e81610cc4565b606060ff831461092d5761092683610d15565b90506108f4565b818054610939906117b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610965906117b6565b80156109b05780601f10610987576101008083540402835291602001916109b0565b820191905f5260205f20905b81548152906001019060200180831161099357829003601f168201915b505050505090506108f4565b6002600454036109de5760405162461bcd60e51b815260040161037c90611815565b6002600455565b5f808467ffffffffffffffff811115610a0057610a0061165e565b604051908082528060200260200182016040528015610a29578160200160208202803683370190505b5090505f5b85811015610a9557868682818110610a4857610a48611672565b9050602002810190610a5a9190611686565b604051610a689291906116f3565b6040518091039020828281518110610a8257610a82611672565b6020908102919091010152600101610a2e565b50610b137f0c545221cb71dea46b10349167d787bba14b050610e9eab8d78f64fe47b581368883604051602001610acc919061185a565b604051602081830303815290604052805190602001208787604051602001610af8959493929190611865565b60405160208183030381529060405280519060200120610d52565b9150505b95945050505050565b5f5f5f610b2d8585610d7e565b91509150610b3a81610dc0565b509392505050565b5f63095ea7b360e01b8383604051602401610b5e9291906118b1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050610b9c8482610e6e565b610c0057610bf68463095ea7b360e01b855f604051602401610bbf9291906118df565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610f0b565b610c008482610f0b565b50505050565b610c258363a9059cbb60e01b8484604051602401610bbf9291906118b1565b505050565b606082471015610c4c5760405162461bcd60e51b815260040161037c9061193c565b5f5f866001600160a01b03168587604051610c67919061196d565b5f6040518083038185875af1925050503d805f8114610ca1576040519150601f19603f3d011682016040523d82523d5f602084013e610ca6565b606091505b5091509150610cb787838387610f9b565b925050505b949350505050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f610d2183610fe3565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6108f4610d5e61100a565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f8251604103610db2576020830151604084015160608501515f1a610da687828585611099565b94509450505050610db9565b505f905060025b9250929050565b5f816004811115610dd357610dd3611978565b03610ddb5750565b6001816004811115610def57610def611978565b03610e0c5760405162461bcd60e51b815260040161037c906119bf565b6002816004811115610e2057610e20611978565b03610e3d5760405162461bcd60e51b815260040161037c90611a02565b6003816004811115610e5157610e51611978565b0361038e5760405162461bcd60e51b815260040161037c90611a50565b5f5f5f846001600160a01b031684604051610e89919061196d565b5f604051808303815f865af19150503d805f8114610ec2576040519150601f19603f3d011682016040523d82523d5f602084013e610ec7565b606091505b5091509150818015610ef1575080511580610ef1575080806020019051810190610ef19190611a73565b8015610b175750505050506001600160a01b03163b151590565b5f610f5f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111489092919063ffffffff16565b905080515f1480610f7f575080806020019051810190610f7f9190611a73565b610c255760405162461bcd60e51b815260040161037c90611ad7565b60608315610fd95782515f03610fd2576001600160a01b0385163b610fd25760405162461bcd60e51b815260040161037c90611b1a565b5081610cbc565b610cbc8383611160565b5f60ff8216601f8111156108f457604051632cd44ac360e21b815260040160405180910390fd5b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561106257507f000000000000000000000000000000000000000000000000000000000000000046145b1561108c57507f000000000000000000000000000000000000000000000000000000000000000090565b61109461118a565b905090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156110ce57505f9050600361113f565b5f6001878787876040515f81526020016040526040516110f19493929190611b33565b6020604051602081039080840390855afa158015611111573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611139575f6001925092505061113f565b91505f90505b94509492505050565b606061115684845f85610c2a565b90505b9392505050565b8151156111705781518083602001fd5b8060405162461bcd60e51b815260040161037c9190611b68565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611204959493929190611b79565b60405160208183030381529060405280519060200120905090565b805b811461038e575f5ffd5b80356108f48161121f565b5f60208284031215611249576112495f5ffd5b5f610cbc848461122b565b8015155b82525050565b602081016108f48284611254565b5f6001600160a01b0382166108f4565b6112218161126c565b80356108f48161127c565b5f602082840312156112a3576112a35f5ffd5b5f610cbc8484611285565b5f5f83601f8401126112c1576112c15f5ffd5b50813567ffffffffffffffff8111156112db576112db5f5ffd5b602083019150836001820283011115610db957610db95f5ffd5b5f5f5f6040848603121561130a5761130a5f5ffd5b5f6113158686611285565b935050602084013567ffffffffffffffff811115611334576113345f5ffd5b611340868287016112ae565b92509250509250925092565b6112588161126c565b602081016108f4828461134c565b6001600160f81b03198116611258565b8281835e505f910152565b5f611387825190565b80845260208401935061139e818560208601611373565b601f19601f8201165b9093019392505050565b80611258565b5f6113c283836113b1565b505060200190565b5f6113d3825190565b8084526020938401938301805f5b838110156114065781516113f588826113b7565b9750602083019250506001016113e1565b509495945050505050565b60e0810161141f828a611363565b8181036020830152611431818961137e565b90508181036040830152611445818861137e565b905061145460608301876113b1565b611461608083018661134c565b61146e60a08301856113b1565b81810360c083015261148081846113ca565b9998505050505050505050565b5f5f83601f8401126114a0576114a05f5ffd5b50813567ffffffffffffffff8111156114ba576114ba5f5ffd5b602083019150836020820283011115610db957610db95f5ffd5b5f5f5f5f5f5f608087890312156114ec576114ec5f5ffd5b863567ffffffffffffffff811115611505576115055f5ffd5b61151189828a0161148d565b9650965050602061152489828a0161122b565b945050604061153589828a0161122b565b935050606087013567ffffffffffffffff811115611554576115545f5ffd5b61156089828a016112ae565b92509250509295509295509295565b5f6108f48261126c565b6112218161156f565b80356108f481611579565b5f5f604083850312156115a1576115a15f5ffd5b5f6115ac8585611582565b92505060206115bd85828601611285565b9150509250929050565b82818337505f910152565b8183525f6020840193506115e78385846115c7565b601f19601f8401166113a7565b602080825281016111568184866115d2565b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b602080825281016108f481611606565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e193685900301811261169f5761169f5f5ffd5b80840192508235915067ffffffffffffffff8211156116bf576116bf5f5ffd5b6020830192506001820236038313156116d9576116d95f5ffd5b509250929050565b5f6116ed8385846115c7565b50500190565b5f610cbc8284866116e1565b6060810161170d82866113b1565b61171a60208301856113b1565b610cbc60408301846113b1565b80516108f48161121f565b5f60208284031215611745576117455f5ffd5b5f610cbc8484611727565b602081016108f482846113b1565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f5b5060200190565b602080825281016108f48161175e565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806117ca57607f821691505b6020821081036117dc576117dc6117a2565b50919050565b601f81525f602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c008152915061178b565b602080825281016108f4816117e2565b5f61182e825190565b60208301805f5b8381101561140657815161184988826113b7565b975060208301925050600101611835565b5f6111598284611825565b60a0810161187382886113b1565b611880602083018761134c565b61188d60408301866113b1565b61189a60608301856113b1565b6118a760808301846113b1565b9695505050505050565b604081016118bf828561134c565b61115960208301846113b1565b5f60ff82166108f4565b611258816118cc565b604081016118ed828561134c565b61115960208301846118d6565b602681525f602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150611647565b602080825281016108f4816118fa565b5f611955825190565b611963818560208601611373565b9290920192915050565b5f611159828461194c565b634e487b7160e01b5f52602160045260245ffd5b601881525f602082017f45434453413a20696e76616c6964207369676e617475726500000000000000008152915061178b565b602080825281016108f48161198c565b601f81525f602082017f45434453413a20696e76616c6964207369676e6174757265206c656e677468008152915061178b565b602080825281016108f4816119cf565b602281525f602082017f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b60208201529150611647565b602080825281016108f481611a12565b801515611221565b80516108f481611a60565b5f60208284031215611a8657611a865f5ffd5b5f610cbc8484611a68565b602a81525f602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b60208201529150611647565b602080825281016108f481611a91565b601d81525f602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000008152915061178b565b602080825281016108f481611ae7565b60ff8116611258565b60808101611b4182876113b1565b611b4e6020830186611b2a565b611b5b60408301856113b1565b610b1760608301846113b1565b602080825281016108f1818461137e565b60a08101611b8782886113b1565b611b9460208301876113b1565b611ba160408301866113b1565b611bae60608301856113b1565b6118a7608083018461134c56fea2646970667358221220e9fdb211ce64c20212021c9e5de9fcfc940a1c512fe7fccef3a30715695d872b64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
