{
  "_format": "hh-sol-artifact-1",
  "contractName": "CowProtocolVirtualTokenTestInterface",
  "sourceName": "src/contracts/test/CowProtocolVirtualTokenTestInterface.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "merkleRoot",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "cowToken",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "communityFundsTarget",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "investorFundsTarget",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "usdcToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "usdcPrice",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "gnoToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "gnoPrice",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "wrappedNativeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nativeTokenPrice",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "teamController",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyClaimed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CannotSendNativeToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClaimingExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClaimingMoreThanMaximum",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedNativeTokenTransfer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidNativeTokenAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidNativeTokenValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidProof",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotSupported",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyOwnerCanClaimPartially",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyTeamController",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VestingNotCancelable",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "enum ClaimingInterface.ClaimType",
          "name": "claimType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimableAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimedAmount",
          "type": "uint256"
        }
      ],
      "name": "Claimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Vested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isCancelable",
          "type": "bool"
        }
      ],
      "name": "VestingAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "freedVestingBeneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VestingStopped",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "VESTING_PERIOD_IN_SECONDS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "addInstantlySwappableTokensTest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isCancelableFlag",
          "type": "bool"
        }
      ],
      "name": "addVestingTest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "enum ClaimingInterface.ClaimType",
          "name": "claimType",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "claimableAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimedAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "merkleProof",
          "type": "bytes32[]"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "indices",
          "type": "uint256[]"
        },
        {
          "internalType": "enum ClaimingInterface.ClaimType[]",
          "name": "claimTypes",
          "type": "uint8[]"
        },
        {
          "internalType": "address[]",
          "name": "claimants",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "claimableAmounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "claimedAmounts",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes32[][]",
          "name": "merkleProofs",
          "type": "bytes32[][]"
        },
        {
          "internalType": "uint256[]",
          "name": "sentNativeTokens",
          "type": "uint256[]"
        }
      ],
      "name": "claimMany",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "communityFundsTarget",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cowToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "cumulativeVestedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deploymentTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "fullAllocation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "getStorageAt",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gnoPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gnoToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "increaseTotalSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "instantlySwappableBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "investorFundsTarget",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isCancelable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "isClaimed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "merkleRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeTokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "newlyVestedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "targetContract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "calldataPayload",
          "type": "bytes"
        }
      ],
      "name": "simulateDelegatecall",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "response",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "targetContract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "calldataPayload",
          "type": "bytes"
        }
      ],
      "name": "simulateDelegatecallInternal",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "response",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "stopClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "swap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "swapAll",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "swappedBalance",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "swappableBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "teamController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "usdcPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "usdcToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "vestedAllocation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vestingStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawEth",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wrappedNativeToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6102206040523480156200001257600080fd5b50604051620031a2380380620031a28339810160408190526200003591620002a4565b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a6040518060400160405280601a81526020017f436f572050726f746f636f6c205669727475616c20546f6b656e0000000000008152506040518060400160405280600481526020016376434f5760e01b8152508160009080519060200190620000b6929190620001e5565b508051620000cc906001906020840190620001e5565b5050504260808181525050896001600160a01b0316610140816001600160a01b031681525050886001600160a01b0316610100816001600160a01b031681525050876001600160a01b0316610120816001600160a01b031681525050866001600160a01b0316610160816001600160a01b0316815250508560a08181525050846001600160a01b0316610180816001600160a01b0316815250508360c08181525050826001600160a01b03166101a0816001600160a01b0316815250508160e08181525050806001600160a01b03166101c0816001600160a01b031681525050426101e08181525050505050505050505050508061020081815250505050505050505050505050505050505050505050505050620003b6565b828054620001f39062000379565b90600052602060002090601f01602090048101928262000217576000855562000262565b82601f106200023257805160ff191683800117855562000262565b8280016001018555821562000262579182015b828111156200026257825182559160200191906001019062000245565b506200027092915062000274565b5090565b5b8082111562000270576000815560010162000275565b6001600160a01b0381168114620002a157600080fd5b50565b60008060008060008060008060008060006101608c8e031215620002c757600080fd5b8b519a5060208c0151620002db816200028b565b60408d0151909a50620002ee816200028b565b60608d015190995062000301816200028b565b60808d015190985062000314816200028b565b60a08d015160c08e015191985096506200032e816200028b565b60e08d01516101008e0151919650945062000349816200028b565b6101208d01516101408e0151919450925062000365816200028b565b809150509295989b509295989b9093969950565b600181811c908216806200038e57607f821691505b60208210811415620003b057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051612cb5620004ed60003960008181610511015261150301526000818161084001528181611bb001528181611c8f01528181611dae01528181611e9701528181611fa3015261204e0152600081816104bd01528181610e310152610e900152600081816104020152611e250152600081816108740152611d290152600081816103a90152611f3101526000818161065501526112630152600081816107730152611f740152600081816108ff01528181610cec01528181611d6c0152611e6801526000818161056c01528181611e46015261212f0152600081816107f40152611d4a0152600081816108a80152611f520152600081816104890152610dd60152612cb56000f3fe6080604052600436106102dc5760003560e01c80638cd8e8d211610184578063b7d1d98e116100d6578063dacee3471161008a578063f3507dab11610064578063f3507dab14610921578063f84436bd14610934578063ffd93cd51461095457600080fd5b8063dacee34714610896578063dd62ed3e146108ca578063e4a0ddf7146108ed57600080fd5b8063be1ae6f9116100bb578063be1ae6f914610816578063bfc12c051461082e578063c61f21841461086257600080fd5b8063b7d1d98e146107c2578063bcfffb68146107e257600080fd5b8063a0ef91df11610138578063acaf21f711610112578063acaf21f714610741578063b1d882eb14610761578063b79b37131461079557600080fd5b8063a0ef91df146106ff578063a2a626f814610714578063a9059cbb1461030c57600080fd5b80639519f828116101695780639519f8281461069757806395d89b41146106aa5780639e34070f146106bf57600080fd5b80638cd8e8d21461064357806394b918de1461067757600080fd5b806326f3acae1161023d5780633e9ffbea116101f157806368700028116101cb57806368700028146105e357806370a082311461060357806386eaaa341461062357600080fd5b80633e9ffbea1461058e57806343218e19146105a35780635624b25b146105c357600080fd5b80632eb4a7ab116102225780632eb4a7ab146104ff578063313ce56714610533578063332572c41461055a57600080fd5b806326f3acae146104ab5780632a14ac81146104df57600080fd5b806317fcb39b116102945780631d43cc98116102795780631d43cc981461043a57806323b872dd1461045c578063254800d41461047757600080fd5b806317fcb39b146103f057806318160ddd1461042457600080fd5b80630ca9279c116102c55780630ca9279c1461033c5780631051e84f1461036a57806311eac8551461039757600080fd5b806306fdde03146102e1578063095ea7b31461030c575b600080fd5b3480156102ed57600080fd5b506102f6610984565b60405161030391906122fe565b60405180910390f35b34801561031857600080fd5b5061032c61032736600461233a565b610a12565b6040519015158152602001610303565b34801561034857600080fd5b5061035c610357366004612364565b610a46565b604051908152602001610303565b34801561037657600080fd5b5061035c610385366004612364565b60036020526000908152604090205481565b3480156103a357600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610303565b3480156103fc57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043057600080fd5b5061035c60055481565b34801561044657600080fd5b5061045a61045536600461237f565b610a87565b005b34801561046857600080fd5b5061032c610327366004612398565b34801561048357600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b757600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104eb57600080fd5b5061045a6104fa36600461233a565b610aa1565b34801561050b57600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053f57600080fd5b50610548601281565b60405160ff9091168152602001610303565b34801561056657600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059a57600080fd5b5061035c610adf565b3480156105af57600080fd5b506102f66105be366004612452565b610af7565b3480156105cf57600080fd5b506102f66105de366004612516565b610b99565b3480156105ef57600080fd5b5061035c6105fe366004612364565b610c1f565b34801561060f57600080fd5b5061035c61061e366004612364565b610c58565b34801561062f57600080fd5b5061045a61063e366004612538565b610c9d565b34801561064f57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068357600080fd5b5061045a61069236600461237f565b610cad565b61045a6106a53660046125d8565b610cc2565b3480156106b657600080fd5b506102f6610cdb565b3480156106cb57600080fd5b5061032c6106da36600461237f565b600881901c600090815260076020526040902054600160ff9092169190911b16151590565b34801561070b57600080fd5b5061045a610ce8565b34801561072057600080fd5b5061035c61072f366004612364565b60026020526000908152604090205481565b34801561074d57600080fd5b5061035c61075c366004612364565b610da2565b34801561076d57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a157600080fd5b5061035c6107b0366004612364565b60066020526000908152604090205481565b3480156107ce57600080fd5b5061045a6107dd366004612364565b610e19565b3480156107ee57600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082257600080fd5b5061035c6307861f8081565b34801561083a57600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561086e57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a257600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108d657600080fd5b5061035c6108e536600461265a565b600092915050565b3480156108f957600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b61045a61092f36600461277e565b610eee565b34801561094057600080fd5b506102f661094f366004612452565b61104e565b34801561096057600080fd5b5061032c61096f366004612364565b60046020526000908152604090205460ff1681565b60008054610991906128e9565b80601f01602080910402602001604051908101604052809291908181526020018280546109bd906128e9565b8015610a0a5780601f106109df57610100808354040283529160200191610a0a565b820191906000526020600020905b8154815290600101906020018083116109ed57829003601f168201915b505050505081565b60006040517fa038794000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a5182610c1f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902054610a819190612966565b92915050565b8060056000828254610a999190612966565b909155505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604081208054839290610ad6908490612966565b90915550505050565b6000610ae96111cf565b9050610af48161120b565b90565b606060008373ffffffffffffffffffffffffffffffffffffffff1683604051610b20919061297e565b600060405180830381855af49150503d8060008114610b5b576040519150601f19603f3d011682016040523d82523d6000602084013e610b60565b606091505b50604051909350909150610b9290610b7e908490849060200161299a565b6040516020818303038152906040526112c5565b5092915050565b60606000610ba88360206129c2565b67ffffffffffffffff811115610bc057610bc06123d4565b6040519080825280601f01601f191660200182016040528015610bea576020820181803683370190505b50905060005b83811015610c17578481015460208083028401015280610c0f816129ff565b915050610bf0565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812054610c4e83610da2565b610a819190612a38565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460038352818420546006909352908320549091610c4e91612966565b610ca88383836112cd565b505050565b610cb56111cf565b50610cbf8161120b565b50565b610cd287878787878787346113b4565b50505050505050565b60018054610991906128e9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610d62576040519150601f19603f3d011682016040523d82523d6000602084013e610d67565b606091505b5050905080610cbf576040517f68a36fef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120546307861f8090610e05610dfb7f000000000000000000000000000000000000000000000000000000000000000042612a38565b6307861f806115da565b610e0f91906129c2565b610a819190612a4f565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e88576040517f1f78defd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eb4827f00000000000000000000000000000000000000000000000000000000000000006115f2565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812080549293508392909190610ad6908490612966565b6000805b8d5181101561100557838382818110610f0d57610f0d612a8a565b9050602002013582610f1f9190612966565b9150610ff38e8281518110610f3657610f36612a8a565b60200260200101518e8381518110610f5057610f50612a8a565b60200260200101518e8e85818110610f6a57610f6a612a8a565b9050602002016020810190610f7f9190612364565b8d8d86818110610f9157610f91612a8a565b905060200201358c8c87818110610faa57610faa612a8a565b905060200201358b8b88818110610fc357610fc3612a8a565b9050602002810190610fd59190612ab9565b8b8b8a818110610fe757610fe7612a8a565b905060200201356113b4565b80610ffd816129ff565b915050610ef2565b5034811461103f576040517f46459bbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050505050565b606060006343218e1960e01b848460405160240161106d929190612b21565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905190915030906110fc90839061297e565b6000604051808303816000865af19150503d8060008114611139576040519150601f19603f3d011682016040523d82523d6000602084013e61113e565b606091505b50905080925050600082600184516111569190612a38565b8151811061116657611166612a8a565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b1490506111b183600185516111ad9190612a38565b9052565b80156111be575050610a81565b6111c7836112c5565b505092915050565b60006111da33611771565b336000908152600660205260409020546111f49190612966565b336000908152600660205260409020819055919050565b336000908152600660205260408120805483929061122a908490612a38565b9250508190555080600560008282546112439190612a38565b9091555061128a905073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016338361180a565b60405181815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b805160208201fd5b80156113235773ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054849290611358908490612966565b909155505060408051838152821515602082015273ffffffffffffffffffffffffffffffffffffffff8516917f9534c146324716c0538375208553c94318368250a36a4832f663bea2f3351fd3910160405180910390a2505050565b600888901c600090815260076020526040902054600160ff8a161b1615611407576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84841115611441576040517f28de1fc900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848410801561146657503373ffffffffffffffffffffffffffffffffffffffff871614155b1561149d576040517fb052d0e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000888888886040516020016114b69493929190612b87565b60405160208183030381529060405280519060200120905061152e8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506118e89050565b611564576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600889901c60009081526007602052604090208054600160ff8c161b17905561159088338988866118fe565b7fd436e9973d1e44d40db4d4119e3c773cadb1323b263981968c14d3d191c0e14889898989896040516115c7959493929190612c09565b60405180910390a1505050505050505050565b60008183106115e957816115eb565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205460ff16611651576040517fd5cd510000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165a83611771565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526003602081815260408084208054600284528286208054928790558690559589168552929091528220805494955092939092849290916116b8908490612966565b909155505073ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040812080548392906116f2908490612966565b909155505073ffffffffffffffffffffffffffffffffffffffff85167fcc22011f6028a0d1d9fcbfa015dec953b2bc08df296d28d2a6407b8fcf9c6c828561173a8486612a38565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520160405180910390a2505092915050565b600061177c82610c1f565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260408120805492935083929091906117b6908490612966565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316907ed5958799b183a7b738d3ad5e711305293dd5076a37a4e3b7e6611dea6114f39060200160405180910390a2919050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161186d573d6000803e3d6000fd5b5061187784611a36565b6118e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5361666545524332303a206661696c6564207472616e7366657200000000000060448201526064015b60405180910390fd5b50505050565b6000826118f58584611b02565b14949350505050565b600085600581111561191257611912612b58565b141561192857611923838383611ba6565b6119ca565b600185600581111561193c5761193c612b58565b141561194e5761192383838684611c85565b600285600581111561196257611962612b58565b14156119745761192383838684611da4565b600385600581111561198857611988612b58565b141561199a5761192383838684611e8d565b60048560058111156119ae576119ae612b58565b14156119bf57611923838383611f99565b6119ca838383612044565b81600560008282546119dc9190612966565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050565b6000611a76565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611ab55760208114611aef57611ab07f5361666545524332303a20626164207472616e7366657220726573756c740000601e611a3d565b611afc565b823b611ae657611ae67f5361666545524332303a206e6f74206120636f6e7472616374000000000000006019611a3d565b60019150611afc565b3d6000803e600051151591505b50919050565b600081815b8451811015610c17576000858281518110611b2457611b24612a8a565b60200260200101519050808311611b66576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611b93565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611b9e816129ff565b915050611b07565b62375f00611bd4817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611c0d576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611c45576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526006602052604081208054859290611c7a908490612966565b909155505050505050565b62127500611cb3817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611cec576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611d24576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000857f0000000000000000000000000000000000000000000000000000000000000000886120ef565b611d9d858560006112cd565b5050505050565b62127500611dd2817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611e0b576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611e2057611e1b8483612127565b611d91565b611d917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000857f0000000000000000000000000000000000000000000000000000000000000000886120ef565b62127500611ebb817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611ef4576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611f2c576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000857f0000000000000000000000000000000000000000000000000000000000000000886120ef565b62375f00611fc7817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115612000576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115612038576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2848460016112cd565b62375f00612072817f0000000000000000000000000000000000000000000000000000000000000000612966565b4211156120ab576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81156120e3576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2848460006112cd565b60006120fb828661218e565b905061211f73ffffffffffffffffffffffffffffffffffffffff87168585846121ad565b505050505050565b6000612153837f000000000000000000000000000000000000000000000000000000000000000061218e565b9050808214610ca8576040517f27eb4d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000670de0b6b3a76400006121a383856129c2565b6115eb9190612a4f565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1612218573d6000803e3d6000fd5b5061222285611a36565b611d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5361666545524332303a206661696c6564207472616e7366657246726f6d000060448201526064016118d9565b60005b838110156122a357818101518382015260200161228b565b838111156118e25750506000910152565b600081518084526122cc816020860160208601612288565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006115eb60208301846122b4565b803573ffffffffffffffffffffffffffffffffffffffff8116811461233557600080fd5b919050565b6000806040838503121561234d57600080fd5b61235683612311565b946020939093013593505050565b60006020828403121561237657600080fd5b6115eb82612311565b60006020828403121561239157600080fd5b5035919050565b6000806000606084860312156123ad57600080fd5b6123b684612311565b92506123c460208501612311565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561244a5761244a6123d4565b604052919050565b6000806040838503121561246557600080fd5b61246e83612311565b915060208084013567ffffffffffffffff8082111561248c57600080fd5b818601915086601f8301126124a057600080fd5b8135818111156124b2576124b26123d4565b6124e2847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612403565b915080825287848285010111156124f857600080fd5b80848401858401376000848284010152508093505050509250929050565b6000806040838503121561252957600080fd5b50508035926020909101359150565b60008060006060848603121561254d57600080fd5b61255684612311565b9250602084013591506040840135801515811461257257600080fd5b809150509250925092565b80356006811061233557600080fd5b60008083601f84011261259e57600080fd5b50813567ffffffffffffffff8111156125b657600080fd5b6020830191508360208260051b85010111156125d157600080fd5b9250929050565b600080600080600080600060c0888a0312156125f357600080fd5b873596506126036020890161257d565b955061261160408901612311565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561263b57600080fd5b6126478a828b0161258c565b989b979a50959850939692959293505050565b6000806040838503121561266d57600080fd5b61267683612311565b915061268460208401612311565b90509250929050565b600067ffffffffffffffff8211156126a7576126a76123d4565b5060051b60200190565b600082601f8301126126c257600080fd5b813560206126d76126d28361268d565b612403565b82815260059290921b840181019181810190868411156126f657600080fd5b8286015b8481101561271157803583529183019183016126fa565b509695505050505050565b600082601f83011261272d57600080fd5b8135602061273d6126d28361268d565b82815260059290921b8401810191818101908684111561275c57600080fd5b8286015b84811015612711576127718161257d565b8352918301918301612760565b60008060008060008060008060008060008060e08d8f0312156127a057600080fd5b67ffffffffffffffff8d3511156127b657600080fd5b6127c38e8e358f016126b1565b9b5067ffffffffffffffff60208e013511156127de57600080fd5b6127ee8e60208f01358f0161271c565b9a5067ffffffffffffffff60408e0135111561280957600080fd5b6128198e60408f01358f0161258c565b909a50985067ffffffffffffffff60608e0135111561283757600080fd5b6128478e60608f01358f0161258c565b909850965067ffffffffffffffff60808e0135111561286557600080fd5b6128758e60808f01358f0161258c565b909650945067ffffffffffffffff60a08e0135111561289357600080fd5b6128a38e60a08f01358f0161258c565b909450925067ffffffffffffffff60c08e013511156128c157600080fd5b6128d18e60c08f01358f0161258c565b81935080925050509295989b509295989b509295989b565b600181811c908216806128fd57607f821691505b60208210811415611afc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561297957612979612937565b500190565b60008251612990818460208701612288565b9190910192915050565b600083516129ac818460208801612288565b92151560f81b9190920190815260010192915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129fa576129fa612937565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a3157612a31612937565b5060010190565b600082821015612a4a57612a4a612937565b500390565b600082612a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612aee57600080fd5b83018035915067ffffffffffffffff821115612b0957600080fd5b6020019150600581901b36038213156125d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000612b5060408301846122b4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b848152600060068510612bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5060f89390931b602084015260609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218301526035820152605501919050565b85815260a0810160068610612c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b85602083015273ffffffffffffffffffffffffffffffffffffffff85166040830152836060830152826080830152969550505050505056fea26469706673582212201377dda6420de858776bc1b49512dbea68a79328b374d4b47eb10fc2fdec9e1c64736f6c634300080a0033",
  "deployedBytecode": "0x6080604052600436106102dc5760003560e01c80638cd8e8d211610184578063b7d1d98e116100d6578063dacee3471161008a578063f3507dab11610064578063f3507dab14610921578063f84436bd14610934578063ffd93cd51461095457600080fd5b8063dacee34714610896578063dd62ed3e146108ca578063e4a0ddf7146108ed57600080fd5b8063be1ae6f9116100bb578063be1ae6f914610816578063bfc12c051461082e578063c61f21841461086257600080fd5b8063b7d1d98e146107c2578063bcfffb68146107e257600080fd5b8063a0ef91df11610138578063acaf21f711610112578063acaf21f714610741578063b1d882eb14610761578063b79b37131461079557600080fd5b8063a0ef91df146106ff578063a2a626f814610714578063a9059cbb1461030c57600080fd5b80639519f828116101695780639519f8281461069757806395d89b41146106aa5780639e34070f146106bf57600080fd5b80638cd8e8d21461064357806394b918de1461067757600080fd5b806326f3acae1161023d5780633e9ffbea116101f157806368700028116101cb57806368700028146105e357806370a082311461060357806386eaaa341461062357600080fd5b80633e9ffbea1461058e57806343218e19146105a35780635624b25b146105c357600080fd5b80632eb4a7ab116102225780632eb4a7ab146104ff578063313ce56714610533578063332572c41461055a57600080fd5b806326f3acae146104ab5780632a14ac81146104df57600080fd5b806317fcb39b116102945780631d43cc98116102795780631d43cc981461043a57806323b872dd1461045c578063254800d41461047757600080fd5b806317fcb39b146103f057806318160ddd1461042457600080fd5b80630ca9279c116102c55780630ca9279c1461033c5780631051e84f1461036a57806311eac8551461039757600080fd5b806306fdde03146102e1578063095ea7b31461030c575b600080fd5b3480156102ed57600080fd5b506102f6610984565b60405161030391906122fe565b60405180910390f35b34801561031857600080fd5b5061032c61032736600461233a565b610a12565b6040519015158152602001610303565b34801561034857600080fd5b5061035c610357366004612364565b610a46565b604051908152602001610303565b34801561037657600080fd5b5061035c610385366004612364565b60036020526000908152604090205481565b3480156103a357600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610303565b3480156103fc57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043057600080fd5b5061035c60055481565b34801561044657600080fd5b5061045a61045536600461237f565b610a87565b005b34801561046857600080fd5b5061032c610327366004612398565b34801561048357600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b757600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104eb57600080fd5b5061045a6104fa36600461233a565b610aa1565b34801561050b57600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053f57600080fd5b50610548601281565b60405160ff9091168152602001610303565b34801561056657600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059a57600080fd5b5061035c610adf565b3480156105af57600080fd5b506102f66105be366004612452565b610af7565b3480156105cf57600080fd5b506102f66105de366004612516565b610b99565b3480156105ef57600080fd5b5061035c6105fe366004612364565b610c1f565b34801561060f57600080fd5b5061035c61061e366004612364565b610c58565b34801561062f57600080fd5b5061045a61063e366004612538565b610c9d565b34801561064f57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068357600080fd5b5061045a61069236600461237f565b610cad565b61045a6106a53660046125d8565b610cc2565b3480156106b657600080fd5b506102f6610cdb565b3480156106cb57600080fd5b5061032c6106da36600461237f565b600881901c600090815260076020526040902054600160ff9092169190911b16151590565b34801561070b57600080fd5b5061045a610ce8565b34801561072057600080fd5b5061035c61072f366004612364565b60026020526000908152604090205481565b34801561074d57600080fd5b5061035c61075c366004612364565b610da2565b34801561076d57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a157600080fd5b5061035c6107b0366004612364565b60066020526000908152604090205481565b3480156107ce57600080fd5b5061045a6107dd366004612364565b610e19565b3480156107ee57600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082257600080fd5b5061035c6307861f8081565b34801561083a57600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561086e57600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a257600080fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108d657600080fd5b5061035c6108e536600461265a565b600092915050565b3480156108f957600080fd5b506103cb7f000000000000000000000000000000000000000000000000000000000000000081565b61045a61092f36600461277e565b610eee565b34801561094057600080fd5b506102f661094f366004612452565b61104e565b34801561096057600080fd5b5061032c61096f366004612364565b60046020526000908152604090205460ff1681565b60008054610991906128e9565b80601f01602080910402602001604051908101604052809291908181526020018280546109bd906128e9565b8015610a0a5780601f106109df57610100808354040283529160200191610a0a565b820191906000526020600020905b8154815290600101906020018083116109ed57829003601f168201915b505050505081565b60006040517fa038794000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a5182610c1f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040902054610a819190612966565b92915050565b8060056000828254610a999190612966565b909155505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526006602052604081208054839290610ad6908490612966565b90915550505050565b6000610ae96111cf565b9050610af48161120b565b90565b606060008373ffffffffffffffffffffffffffffffffffffffff1683604051610b20919061297e565b600060405180830381855af49150503d8060008114610b5b576040519150601f19603f3d011682016040523d82523d6000602084013e610b60565b606091505b50604051909350909150610b9290610b7e908490849060200161299a565b6040516020818303038152906040526112c5565b5092915050565b60606000610ba88360206129c2565b67ffffffffffffffff811115610bc057610bc06123d4565b6040519080825280601f01601f191660200182016040528015610bea576020820181803683370190505b50905060005b83811015610c17578481015460208083028401015280610c0f816129ff565b915050610bf0565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812054610c4e83610da2565b610a819190612a38565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460038352818420546006909352908320549091610c4e91612966565b610ca88383836112cd565b505050565b610cb56111cf565b50610cbf8161120b565b50565b610cd287878787878787346113b4565b50505050505050565b60018054610991906128e9565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610d62576040519150601f19603f3d011682016040523d82523d6000602084013e610d67565b606091505b5050905080610cbf576040517f68a36fef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120546307861f8090610e05610dfb7f000000000000000000000000000000000000000000000000000000000000000042612a38565b6307861f806115da565b610e0f91906129c2565b610a819190612a4f565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e88576040517f1f78defd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610eb4827f00000000000000000000000000000000000000000000000000000000000000006115f2565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812080549293508392909190610ad6908490612966565b6000805b8d5181101561100557838382818110610f0d57610f0d612a8a565b9050602002013582610f1f9190612966565b9150610ff38e8281518110610f3657610f36612a8a565b60200260200101518e8381518110610f5057610f50612a8a565b60200260200101518e8e85818110610f6a57610f6a612a8a565b9050602002016020810190610f7f9190612364565b8d8d86818110610f9157610f91612a8a565b905060200201358c8c87818110610faa57610faa612a8a565b905060200201358b8b88818110610fc357610fc3612a8a565b9050602002810190610fd59190612ab9565b8b8b8a818110610fe757610fe7612a8a565b905060200201356113b4565b80610ffd816129ff565b915050610ef2565b5034811461103f576040517f46459bbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050505050565b606060006343218e1960e01b848460405160240161106d929190612b21565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905190915030906110fc90839061297e565b6000604051808303816000865af19150503d8060008114611139576040519150601f19603f3d011682016040523d82523d6000602084013e61113e565b606091505b50905080925050600082600184516111569190612a38565b8151811061116657611166612a8a565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b1490506111b183600185516111ad9190612a38565b9052565b80156111be575050610a81565b6111c7836112c5565b505092915050565b60006111da33611771565b336000908152600660205260409020546111f49190612966565b336000908152600660205260409020819055919050565b336000908152600660205260408120805483929061122a908490612a38565b9250508190555080600560008282546112439190612a38565b9091555061128a905073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016338361180a565b60405181815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b805160208201fd5b80156113235773ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790555b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054849290611358908490612966565b909155505060408051838152821515602082015273ffffffffffffffffffffffffffffffffffffffff8516917f9534c146324716c0538375208553c94318368250a36a4832f663bea2f3351fd3910160405180910390a2505050565b600888901c600090815260076020526040902054600160ff8a161b1615611407576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84841115611441576040517f28de1fc900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848410801561146657503373ffffffffffffffffffffffffffffffffffffffff871614155b1561149d576040517fb052d0e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000888888886040516020016114b69493929190612b87565b60405160208183030381529060405280519060200120905061152e8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506118e89050565b611564576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600889901c60009081526007602052604090208054600160ff8c161b17905561159088338988866118fe565b7fd436e9973d1e44d40db4d4119e3c773cadb1323b263981968c14d3d191c0e14889898989896040516115c7959493929190612c09565b60405180910390a1505050505050505050565b60008183106115e957816115eb565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205460ff16611651576040517fd5cd510000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165a83611771565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526003602081815260408084208054600284528286208054928790558690559589168552929091528220805494955092939092849290916116b8908490612966565b909155505073ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040812080548392906116f2908490612966565b909155505073ffffffffffffffffffffffffffffffffffffffff85167fcc22011f6028a0d1d9fcbfa015dec953b2bc08df296d28d2a6407b8fcf9c6c828561173a8486612a38565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520160405180910390a2505092915050565b600061177c82610c1f565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260408120805492935083929091906117b6908490612966565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316907ed5958799b183a7b738d3ad5e711305293dd5076a37a4e3b7e6611dea6114f39060200160405180910390a2919050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161186d573d6000803e3d6000fd5b5061187784611a36565b6118e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5361666545524332303a206661696c6564207472616e7366657200000000000060448201526064015b60405180910390fd5b50505050565b6000826118f58584611b02565b14949350505050565b600085600581111561191257611912612b58565b141561192857611923838383611ba6565b6119ca565b600185600581111561193c5761193c612b58565b141561194e5761192383838684611c85565b600285600581111561196257611962612b58565b14156119745761192383838684611da4565b600385600581111561198857611988612b58565b141561199a5761192383838684611e8d565b60048560058111156119ae576119ae612b58565b14156119bf57611923838383611f99565b6119ca838383612044565b81600560008282546119dc9190612966565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050565b6000611a76565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611ab55760208114611aef57611ab07f5361666545524332303a20626164207472616e7366657220726573756c740000601e611a3d565b611afc565b823b611ae657611ae67f5361666545524332303a206e6f74206120636f6e7472616374000000000000006019611a3d565b60019150611afc565b3d6000803e600051151591505b50919050565b600081815b8451811015610c17576000858281518110611b2457611b24612a8a565b60200260200101519050808311611b66576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611b93565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611b9e816129ff565b915050611b07565b62375f00611bd4817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611c0d576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611c45576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526006602052604081208054859290611c7a908490612966565b909155505050505050565b62127500611cb3817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611cec576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611d24576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000857f0000000000000000000000000000000000000000000000000000000000000000886120ef565b611d9d858560006112cd565b5050505050565b62127500611dd2817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611e0b576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611e2057611e1b8483612127565b611d91565b611d917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000857f0000000000000000000000000000000000000000000000000000000000000000886120ef565b62127500611ebb817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115611ef4576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115611f2c576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000857f0000000000000000000000000000000000000000000000000000000000000000886120ef565b62375f00611fc7817f0000000000000000000000000000000000000000000000000000000000000000612966565b421115612000576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8115612038576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2848460016112cd565b62375f00612072817f0000000000000000000000000000000000000000000000000000000000000000612966565b4211156120ab576040517ff7704cc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81156120e3576040517f79ef7d0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2848460006112cd565b60006120fb828661218e565b905061211f73ffffffffffffffffffffffffffffffffffffffff87168585846121ad565b505050505050565b6000612153837f000000000000000000000000000000000000000000000000000000000000000061218e565b9050808214610ca8576040517f27eb4d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000670de0b6b3a76400006121a383856129c2565b6115eb9190612a4f565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1612218573d6000803e3d6000fd5b5061222285611a36565b611d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5361666545524332303a206661696c6564207472616e7366657246726f6d000060448201526064016118d9565b60005b838110156122a357818101518382015260200161228b565b838111156118e25750506000910152565b600081518084526122cc816020860160208601612288565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006115eb60208301846122b4565b803573ffffffffffffffffffffffffffffffffffffffff8116811461233557600080fd5b919050565b6000806040838503121561234d57600080fd5b61235683612311565b946020939093013593505050565b60006020828403121561237657600080fd5b6115eb82612311565b60006020828403121561239157600080fd5b5035919050565b6000806000606084860312156123ad57600080fd5b6123b684612311565b92506123c460208501612311565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561244a5761244a6123d4565b604052919050565b6000806040838503121561246557600080fd5b61246e83612311565b915060208084013567ffffffffffffffff8082111561248c57600080fd5b818601915086601f8301126124a057600080fd5b8135818111156124b2576124b26123d4565b6124e2847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612403565b915080825287848285010111156124f857600080fd5b80848401858401376000848284010152508093505050509250929050565b6000806040838503121561252957600080fd5b50508035926020909101359150565b60008060006060848603121561254d57600080fd5b61255684612311565b9250602084013591506040840135801515811461257257600080fd5b809150509250925092565b80356006811061233557600080fd5b60008083601f84011261259e57600080fd5b50813567ffffffffffffffff8111156125b657600080fd5b6020830191508360208260051b85010111156125d157600080fd5b9250929050565b600080600080600080600060c0888a0312156125f357600080fd5b873596506126036020890161257d565b955061261160408901612311565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561263b57600080fd5b6126478a828b0161258c565b989b979a50959850939692959293505050565b6000806040838503121561266d57600080fd5b61267683612311565b915061268460208401612311565b90509250929050565b600067ffffffffffffffff8211156126a7576126a76123d4565b5060051b60200190565b600082601f8301126126c257600080fd5b813560206126d76126d28361268d565b612403565b82815260059290921b840181019181810190868411156126f657600080fd5b8286015b8481101561271157803583529183019183016126fa565b509695505050505050565b600082601f83011261272d57600080fd5b8135602061273d6126d28361268d565b82815260059290921b8401810191818101908684111561275c57600080fd5b8286015b84811015612711576127718161257d565b8352918301918301612760565b60008060008060008060008060008060008060e08d8f0312156127a057600080fd5b67ffffffffffffffff8d3511156127b657600080fd5b6127c38e8e358f016126b1565b9b5067ffffffffffffffff60208e013511156127de57600080fd5b6127ee8e60208f01358f0161271c565b9a5067ffffffffffffffff60408e0135111561280957600080fd5b6128198e60408f01358f0161258c565b909a50985067ffffffffffffffff60608e0135111561283757600080fd5b6128478e60608f01358f0161258c565b909850965067ffffffffffffffff60808e0135111561286557600080fd5b6128758e60808f01358f0161258c565b909650945067ffffffffffffffff60a08e0135111561289357600080fd5b6128a38e60a08f01358f0161258c565b909450925067ffffffffffffffff60c08e013511156128c157600080fd5b6128d18e60c08f01358f0161258c565b81935080925050509295989b509295989b509295989b565b600181811c908216806128fd57607f821691505b60208210811415611afc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561297957612979612937565b500190565b60008251612990818460208701612288565b9190910192915050565b600083516129ac818460208801612288565b92151560f81b9190920190815260010192915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129fa576129fa612937565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a3157612a31612937565b5060010190565b600082821015612a4a57612a4a612937565b500390565b600082612a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612aee57600080fd5b83018035915067ffffffffffffffff821115612b0957600080fd5b6020019150600581901b36038213156125d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000612b5060408301846122b4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b848152600060068510612bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5060f89390931b602084015260609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218301526035820152605501919050565b85815260a0810160068610612c47577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b85602083015273ffffffffffffffffffffffffffffffffffffffff85166040830152836060830152826080830152969550505050505056fea26469706673582212201377dda6420de858776bc1b49512dbea68a79328b374d4b47eb10fc2fdec9e1c64736f6c634300080a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
