{
  "_format": "hh-sol-artifact-1",
  "contractName": "SummaSwapV3Router",
  "sourceName": "contracts/mainContracts/SummaSwapV3Router.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WETH9",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "WETH9",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISummaSwapV3Router.ExactInputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISummaSwapV3Router.ExactInputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISummaSwapV3Router.ExactOutputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISummaSwapV3Router.ExactOutputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "summaSwapV3SwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "sweepTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWETH9",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "unwrapWETH9WithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60c06040526000196000553480156200001757600080fd5b5060405162003080380380620030808339810160408190526200003a9162000076565b6001600160601b0319606092831b8116608052911b1660a052620000ad565b80516001600160a01b03811681146200007157600080fd5b919050565b6000806040838503121562000089578182fd5b620000948362000059565b9150620000a46020840162000059565b90509250929050565b60805160601c60a05160601c612f77620001096000398061012f528061059252806106bc5280610756528061079652806108c05280611c6e5280611cce5280611d4f525080610ddb52806112635280611e515250612f776000f3fe6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063e26e9f9511610059578063e26e9f95146102f5578063f28c049814610315578063f3995c6714610328576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d8366004612a23565b61034d565b6040516101ea9190612e42565b60405180910390f35b6101bb6102013660046127a1565b6104ce565b6101bb610214366004612b40565b61058e565b34801561022557600080fd5b5061022e610754565b6040516101ea9190612c78565b6101bb610249366004612b6f565b610778565b6101bb61025c3660046127a1565b610990565b61027461026f366004612801565b610a65565b6040516101ea9190612ceb565b6101dd61028f366004612978565b610bbf565b6101bb6102a23660046127a1565b610d24565b3480156102b357600080fd5b5061022e610dd9565b6101dd6102ca366004612a23565b610dfd565b6101bb6102dd366004612702565b610f9b565b6101bb6102f0366004612743565b6110b8565b34801561030157600080fd5b506101bb610310366004612893565b61121e565b6101dd610323366004612a3f565b611365565b6101bb6103363660046127a1565b6114a1565b471561034b5761034b3347611539565b565b600081608001358061035d611687565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047f60a08401356103e260808601606087016126df565b6103f3610100870160e088016126df565b60408051606081019091528061040c60208a018a6126df565b61041c60608b0160408c01612b1d565b61042c60408c0160208d016126df565b60405160200161043e93929190612c02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252336020830181905291015261168b565b91508260c001358210156104c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612db3565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561061757600080fd5b505afa15801561062b573d6000803e3d6000fd5b505050506040513d602081101561064157600080fd5b50519050828110156106b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561074f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561072d57600080fd5b505af1158015610741573d6000803e3d6000fd5b5050505061074f8282611539565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015610789575060648211155b61079257600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561081b57600080fd5b505afa15801561082f573d6000803e3d6000fd5b505050506040513d602081101561084557600080fd5b50519050848110156108b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610989577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506000612710610961858461181190919063ffffffff16565b8161096857fe5b049050801561097b5761097b8382611539565b61098785828403611539565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a2557600080fd5b505afa158015610a39573d6000803e3d6000fd5b505050506040513d6020811015610a4f57600080fd5b50511015610987576109878686868686866104ce565b60608167ffffffffffffffff81118015610a7e57600080fd5b50604051908082528060200260200182016040528015610ab257816020015b6060815260200190600190039081610a9d5790505b50905060005b82811015610bb85760008030868685818110610ad057fe5b9050602002810190610ae29190612e4b565b604051610af0929190612c68565b600060405180830381855af49150503d8060008114610b2b576040519150601f19603f3d011682016040523d82523d6000602084013e610b30565b606091505b509150915081610b9657604481511015610b4957600080fd5b60048101905080806020019051810190610b63919061290e565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf9190612d69565b80848481518110610ba357fe5b60209081029190910101525050600101610ab8565b5092915050565b6000816040015180610bcf611687565b1115610c3c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c4d856000015161183b565b9050610cac856060015182610c66578660200151610c68565b305b60006040518060600160405280610c828b60000151611847565b815273ffffffffffffffffffffffffffffffffffffffff881660208201523360409091015261168b565b60608601528015610ccc578451309250610cc590611856565b8552610cd9565b8460600151935050610cdf565b50610c3e565b8360800151831015610d1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612db3565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b50511015610987576109878686868686866114a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610e0d611687565b1115610e7a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f3160a0840135610e9260808601606087016126df565b610ea3610100870160e088016126df565b6040518060600160405280886020016020810190610ec191906126df565b610ed160608b0160408c01612b1d565b610ede60208c018c6126df565b604051602001610ef093929190612c02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252336020830181905291015261188b565b91508260c00135821115610f71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612d7c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561100457600080fd5b505afa158015611018573d6000803e3d6000fd5b505050506040513d602081101561102e57600080fd5b50519050828110156110a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156110b2576110b2848383611a47565b50505050565b6000821180156110c9575060648211155b6110d257600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561113b57600080fd5b505afa15801561114f573d6000803e3d6000fd5b505050506040513d602081101561116557600080fd5b50519050848110156111d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109875760006127106111ed8386611811565b816111f457fe5b049050801561120857611208878483611a47565b6112158786838503611a47565b50505050505050565b600084138061122d5750600083135b61123657600080fd5b600061124482840184612a77565b905060008060006112588460000151611c1c565b92509250925061128a7f0000000000000000000000000000000000000000000000000000000000000000848484611c4d565b5060008060008a136112cb578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896112fc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b91509150811561131b576113168587602001513384611c6c565b610582565b85516113269061183b565b1561134b57855161133690611856565b8652611345813360008961188b565b50610582565b806000819055508394506105828587602001513384611c6c565b6000816040013580611375611687565b11156113e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61145d60608401356113fa60408601602087016126df565b6040805160608101909152600090806114138980612e4b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020820181905260409091015261188b565b5060005491508260800135821115610f71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612d7c565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561056e57600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106115b057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611573565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611612576040519150601f19603f3d011682016040523d82523d6000602084013e611617565b606091505b505090508061074f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff84166116ac573093505b60008060006116be8560000151611c1c565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116ef868686611e4a565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856117158f611e88565b73ffffffffffffffffffffffffffffffffffffffff8e1615611737578d61175d565b876117565773fffd8963efd1fc6a506488495d951d5263988d2561175d565b6401000276a45b8d60405160200161176e9190612dea565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161179d959493929190612c99565b6040805180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee9190612870565b91509150826117fd57816117ff565b805b6000039b9a5050505050505050505050565b600082158061182c5750508181028183828161182957fe5b04145b61183557600080fd5b92915050565b8051604211155b919050565b6060611835826000602b611eba565b80516060906118359083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611eba565b600073ffffffffffffffffffffffffffffffffffffffff84166118ac573093505b60008060006118be8560000151611c1c565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118ef858786611e4a565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856119158f611e88565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561193a578d611960565b876119595773fffd8963efd1fc6a506488495d951d5263988d25611960565b6401000276a45b8d6040516020016119719190612dea565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016119a0959493929190612c99565b6040805180830381600087803b1580156119b957600080fd5b505af11580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612870565b91509150600083611a06578183600003611a0c565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a38578b8114611a3857600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611b1c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611adf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b7e576040519150601f19603f3d011682016040523d82523d6000602084013e611b83565b606091505b5091509150818015611bb1575080511580611bb15750808060200190516020811015611bae57600080fd5b50515b61098957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611c2a84826120a1565b9250611c378460146121a1565b9050611c448460176120a1565b91509193909250565b6000611c6385611c5e868686612291565b61230e565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611cc75750804710155b15611e10577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3457600080fd5b505af1158015611d48573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505050506040513d6020811015611e0857600080fd5b506110b29050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e3e57611e39848383611a47565b6110b2565b6110b28484848461233e565b6000611e807f0000000000000000000000000000000000000000000000000000000000000000611e7b868686612291565b61251b565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611eb657600080fd5b5090565b60608182601f011015611f2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f9f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561201157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b6060821580156120305760405191506000825260208201604052612098565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612069578051835260209283019201612051565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008182601401101561211557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561218857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561221557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561228857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b612299612651565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122d1579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b600061231a838361251b565b90503373ffffffffffffffffffffffffffffffffffffffff82161461183557600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061241b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461247d576040519150601f19603f3d011682016040523d82523d6000602084013e612482565b606091505b50915091508180156124b05750805115806124b057508080602001905160208110156124ad57600080fd5b50515b61098757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061255d57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527faf8dc78ed6578b2701c317308cd8f379451229b6bbeb4ce4c214d96aeb334f7b60d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561184281612f45565b600082601f83011261268c578081fd5b813561269f61269a82612ed9565b612eb5565b8181528460208386010111156126b3578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104c8578081fd5b6000602082840312156126f0578081fd5b81356126fb81612f45565b9392505050565b600080600060608486031215612716578182fd5b833561272181612f45565b925060208401359150604084013561273881612f45565b809150509250925092565b600080600080600060a0868803121561275a578081fd5b853561276581612f45565b945060208601359350604086013561277c81612f45565b925060608601359150608086013561279381612f45565b809150509295509295909350565b60008060008060008060c087890312156127b9578081fd5b86356127c481612f45565b95506020870135945060408701359350606087013560ff811681146127e7578182fd5b9598949750929560808101359460a0909101359350915050565b60008060208385031215612813578182fd5b823567ffffffffffffffff8082111561282a578384fd5b818501915085601f83011261283d578384fd5b81358181111561284b578485fd5b866020808302850101111561285e578485fd5b60209290920196919550909350505050565b60008060408385031215612882578182fd5b505080516020909101519092909150565b600080600080606085870312156128a8578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128cd578384fd5b818701915087601f8301126128e0578384fd5b8135818111156128ee578485fd5b8860208285010111156128ff578485fd5b95989497505060200194505050565b60006020828403121561291f578081fd5b815167ffffffffffffffff811115612935578182fd5b8201601f81018413612945578182fd5b805161295361269a82612ed9565b818152856020838501011115612967578384fd5b611c63826020830160208601612f19565b600060208284031215612989578081fd5b813567ffffffffffffffff808211156129a0578283fd5b9083019060a082860312156129b3578283fd5b60405160a0810181811083821117156129c857fe5b6040528235828111156129d9578485fd5b6129e58782860161267c565b8252506129f460208401612671565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a35578081fd5b6126fb83836126cd565b600060208284031215612a50578081fd5b813567ffffffffffffffff811115612a66578182fd5b820160a081850312156126fb578182fd5b600060208284031215612a88578081fd5b813567ffffffffffffffff80821115612a9f578283fd5b9083019060608286031215612ab2578283fd5b604051606081018181108382111715612ac757fe5b604052823582811115612ad8578485fd5b612ae48782860161267c565b82525060208301359150612af782612f45565b81602082015260408301359250612b0d83612f45565b6040810192909252509392505050565b600060208284031215612b2e578081fd5b813562ffffff811681146126fb578182fd5b60008060408385031215612b52578182fd5b823591506020830135612b6481612f45565b809150509250929050565b60008060008060808587031215612b84578182fd5b843593506020850135612b9681612f45565b9250604085013591506060850135612bad81612f45565b939692955090935050565b60008151808452612bd0816020860160208601612f19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612ce060a0830184612bb8565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d5c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d4a858351612bb8565b94509285019290850190600101612d10565b5092979650505050505050565b6000602082526126fb6020830184612bb8565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160606020840152612e066080840182612bb8565b9050602084015173ffffffffffffffffffffffffffffffffffffffff808216604086015280604087015116606086015250508091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e7f578283fd5b83018035915067ffffffffffffffff821115612e99578283fd5b602001915036819003821315612eae57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612ed157fe5b604052919050565b600067ffffffffffffffff821115612eed57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612f34578181015183820152602001612f1c565b838111156110b25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f6757600080fd5b5056fea164736f6c6343000706000a",
  "deployedBytecode": "0x6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063e26e9f9511610059578063e26e9f95146102f5578063f28c049814610315578063f3995c6714610328576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d8366004612a23565b61034d565b6040516101ea9190612e42565b60405180910390f35b6101bb6102013660046127a1565b6104ce565b6101bb610214366004612b40565b61058e565b34801561022557600080fd5b5061022e610754565b6040516101ea9190612c78565b6101bb610249366004612b6f565b610778565b6101bb61025c3660046127a1565b610990565b61027461026f366004612801565b610a65565b6040516101ea9190612ceb565b6101dd61028f366004612978565b610bbf565b6101bb6102a23660046127a1565b610d24565b3480156102b357600080fd5b5061022e610dd9565b6101dd6102ca366004612a23565b610dfd565b6101bb6102dd366004612702565b610f9b565b6101bb6102f0366004612743565b6110b8565b34801561030157600080fd5b506101bb610310366004612893565b61121e565b6101dd610323366004612a3f565b611365565b6101bb6103363660046127a1565b6114a1565b471561034b5761034b3347611539565b565b600081608001358061035d611687565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047f60a08401356103e260808601606087016126df565b6103f3610100870160e088016126df565b60408051606081019091528061040c60208a018a6126df565b61041c60608b0160408c01612b1d565b61042c60408c0160208d016126df565b60405160200161043e93929190612c02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252336020830181905291015261168b565b91508260c001358210156104c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612db3565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561061757600080fd5b505afa15801561062b573d6000803e3d6000fd5b505050506040513d602081101561064157600080fd5b50519050828110156106b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561074f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561072d57600080fd5b505af1158015610741573d6000803e3d6000fd5b5050505061074f8282611539565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015610789575060648211155b61079257600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561081b57600080fd5b505afa15801561082f573d6000803e3d6000fd5b505050506040513d602081101561084557600080fd5b50519050848110156108b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610989577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506000612710610961858461181190919063ffffffff16565b8161096857fe5b049050801561097b5761097b8382611539565b61098785828403611539565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a2557600080fd5b505afa158015610a39573d6000803e3d6000fd5b505050506040513d6020811015610a4f57600080fd5b50511015610987576109878686868686866104ce565b60608167ffffffffffffffff81118015610a7e57600080fd5b50604051908082528060200260200182016040528015610ab257816020015b6060815260200190600190039081610a9d5790505b50905060005b82811015610bb85760008030868685818110610ad057fe5b9050602002810190610ae29190612e4b565b604051610af0929190612c68565b600060405180830381855af49150503d8060008114610b2b576040519150601f19603f3d011682016040523d82523d6000602084013e610b30565b606091505b509150915081610b9657604481511015610b4957600080fd5b60048101905080806020019051810190610b63919061290e565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf9190612d69565b80848481518110610ba357fe5b60209081029190910101525050600101610ab8565b5092915050565b6000816040015180610bcf611687565b1115610c3c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c4d856000015161183b565b9050610cac856060015182610c66578660200151610c68565b305b60006040518060600160405280610c828b60000151611847565b815273ffffffffffffffffffffffffffffffffffffffff881660208201523360409091015261168b565b60608601528015610ccc578451309250610cc590611856565b8552610cd9565b8460600151935050610cdf565b50610c3e565b8360800151831015610d1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612db3565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b50511015610987576109878686868686866114a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816080013580610e0d611687565b1115610e7a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f3160a0840135610e9260808601606087016126df565b610ea3610100870160e088016126df565b6040518060600160405280886020016020810190610ec191906126df565b610ed160608b0160408c01612b1d565b610ede60208c018c6126df565b604051602001610ef093929190612c02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252336020830181905291015261188b565b91508260c00135821115610f71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612d7c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561100457600080fd5b505afa158015611018573d6000803e3d6000fd5b505050506040513d602081101561102e57600080fd5b50519050828110156110a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156110b2576110b2848383611a47565b50505050565b6000821180156110c9575060648211155b6110d257600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561113b57600080fd5b505afa15801561114f573d6000803e3d6000fd5b505050506040513d602081101561116557600080fd5b50519050848110156111d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109875760006127106111ed8386611811565b816111f457fe5b049050801561120857611208878483611a47565b6112158786838503611a47565b50505050505050565b600084138061122d5750600083135b61123657600080fd5b600061124482840184612a77565b905060008060006112588460000151611c1c565b92509250925061128a7f0000000000000000000000000000000000000000000000000000000000000000848484611c4d565b5060008060008a136112cb578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896112fc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b91509150811561131b576113168587602001513384611c6c565b610582565b85516113269061183b565b1561134b57855161133690611856565b8652611345813360008961188b565b50610582565b806000819055508394506105828587602001513384611c6c565b6000816040013580611375611687565b11156113e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61145d60608401356113fa60408601602087016126df565b6040805160608101909152600090806114138980612e4b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250336020820181905260409091015261188b565b5060005491508260800135821115610f71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bf90612d7c565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561056e57600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106115b057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611573565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611612576040519150601f19603f3d011682016040523d82523d6000602084013e611617565b606091505b505090508061074f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff84166116ac573093505b60008060006116be8560000151611c1c565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116ef868686611e4a565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856117158f611e88565b73ffffffffffffffffffffffffffffffffffffffff8e1615611737578d61175d565b876117565773fffd8963efd1fc6a506488495d951d5263988d2561175d565b6401000276a45b8d60405160200161176e9190612dea565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161179d959493929190612c99565b6040805180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee9190612870565b91509150826117fd57816117ff565b805b6000039b9a5050505050505050505050565b600082158061182c5750508181028183828161182957fe5b04145b61183557600080fd5b92915050565b8051604211155b919050565b6060611835826000602b611eba565b80516060906118359083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611eba565b600073ffffffffffffffffffffffffffffffffffffffff84166118ac573093505b60008060006118be8560000151611c1c565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118ef858786611e4a565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856119158f611e88565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561193a578d611960565b876119595773fffd8963efd1fc6a506488495d951d5263988d25611960565b6401000276a45b8d6040516020016119719190612dea565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016119a0959493929190612c99565b6040805180830381600087803b1580156119b957600080fd5b505af11580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612870565b91509150600083611a06578183600003611a0c565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a38578b8114611a3857600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611b1c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611adf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b7e576040519150601f19603f3d011682016040523d82523d6000602084013e611b83565b606091505b5091509150818015611bb1575080511580611bb15750808060200190516020811015611bae57600080fd5b50515b61098957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611c2a84826120a1565b9250611c378460146121a1565b9050611c448460176120a1565b91509193909250565b6000611c6385611c5e868686612291565b61230e565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611cc75750804710155b15611e10577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3457600080fd5b505af1158015611d48573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505050506040513d6020811015611e0857600080fd5b506110b29050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e3e57611e39848383611a47565b6110b2565b6110b28484848461233e565b6000611e807f0000000000000000000000000000000000000000000000000000000000000000611e7b868686612291565b61251b565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611eb657600080fd5b5090565b60608182601f011015611f2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f9f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561201157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b6060821580156120305760405191506000825260208201604052612098565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612069578051835260209283019201612051565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008182601401101561211557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561218857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b60008182600301101561221557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561228857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b612299612651565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122d1579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b600061231a838361251b565b90503373ffffffffffffffffffffffffffffffffffffffff82161461183557600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b6020831061241b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461247d576040519150601f19603f3d011682016040523d82523d6000602084013e612482565b606091505b50915091508180156124b05750805115806124b057508080602001905160208110156124ad57600080fd5b50515b61098757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061255d57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527faf8dc78ed6578b2701c317308cd8f379451229b6bbeb4ce4c214d96aeb334f7b60d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561184281612f45565b600082601f83011261268c578081fd5b813561269f61269a82612ed9565b612eb5565b8181528460208386010111156126b3578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104c8578081fd5b6000602082840312156126f0578081fd5b81356126fb81612f45565b9392505050565b600080600060608486031215612716578182fd5b833561272181612f45565b925060208401359150604084013561273881612f45565b809150509250925092565b600080600080600060a0868803121561275a578081fd5b853561276581612f45565b945060208601359350604086013561277c81612f45565b925060608601359150608086013561279381612f45565b809150509295509295909350565b60008060008060008060c087890312156127b9578081fd5b86356127c481612f45565b95506020870135945060408701359350606087013560ff811681146127e7578182fd5b9598949750929560808101359460a0909101359350915050565b60008060208385031215612813578182fd5b823567ffffffffffffffff8082111561282a578384fd5b818501915085601f83011261283d578384fd5b81358181111561284b578485fd5b866020808302850101111561285e578485fd5b60209290920196919550909350505050565b60008060408385031215612882578182fd5b505080516020909101519092909150565b600080600080606085870312156128a8578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128cd578384fd5b818701915087601f8301126128e0578384fd5b8135818111156128ee578485fd5b8860208285010111156128ff578485fd5b95989497505060200194505050565b60006020828403121561291f578081fd5b815167ffffffffffffffff811115612935578182fd5b8201601f81018413612945578182fd5b805161295361269a82612ed9565b818152856020838501011115612967578384fd5b611c63826020830160208601612f19565b600060208284031215612989578081fd5b813567ffffffffffffffff808211156129a0578283fd5b9083019060a082860312156129b3578283fd5b60405160a0810181811083821117156129c857fe5b6040528235828111156129d9578485fd5b6129e58782860161267c565b8252506129f460208401612671565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a35578081fd5b6126fb83836126cd565b600060208284031215612a50578081fd5b813567ffffffffffffffff811115612a66578182fd5b820160a081850312156126fb578182fd5b600060208284031215612a88578081fd5b813567ffffffffffffffff80821115612a9f578283fd5b9083019060608286031215612ab2578283fd5b604051606081018181108382111715612ac757fe5b604052823582811115612ad8578485fd5b612ae48782860161267c565b82525060208301359150612af782612f45565b81602082015260408301359250612b0d83612f45565b6040810192909252509392505050565b600060208284031215612b2e578081fd5b813562ffffff811681146126fb578182fd5b60008060408385031215612b52578182fd5b823591506020830135612b6481612f45565b809150509250929050565b60008060008060808587031215612b84578182fd5b843593506020850135612b9681612f45565b9250604085013591506060850135612bad81612f45565b939692955090935050565b60008151808452612bd0816020860160208601612f19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612ce060a0830184612bb8565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d5c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d4a858351612bb8565b94509285019290850190600101612d10565b5092979650505050505050565b6000602082526126fb6020830184612bb8565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160606020840152612e066080840182612bb8565b9050602084015173ffffffffffffffffffffffffffffffffffffffff808216604086015280604087015116606086015250508091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e7f578283fd5b83018035915067ffffffffffffffff821115612e99578283fd5b602001915036819003821315612eae57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612ed157fe5b604052919050565b600067ffffffffffffffff821115612eed57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612f34578181015183820152602001612f1c565b838111156110b25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f6757600080fd5b5056fea164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
