{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockLoanTokenLogic",
  "sourceName": "contracts/mockup/MockLoanTokenLogic.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "burner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "loanAmount",
          "type": "uint256"
        }
      ],
      "name": "FlashBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "addresses",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "limits",
          "type": "uint256[]"
        }
      ],
      "name": "SetTransactionLimits",
      "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"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assetBorrow",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "assetSupply",
          "type": "uint256"
        }
      ],
      "name": "_supplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "assetBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avgBorrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "baseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "burnAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "useLM",
          "type": "bool"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "redeemed",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "burnAmount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanAmountPaid",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "string",
          "name": "funcId",
          "type": "string"
        }
      ],
      "name": "checkPause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        }
      ],
      "name": "checkPriceDivergence",
      "outputs": [],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "checkpointPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "checkpointSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "collateralTokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "isTorqueLoans",
          "type": "bool[]"
        }
      ],
      "name": "disableLoanParams",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "earlyAccessToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getBorrowAmountForDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "initialLoanDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getDepositAmountForBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        }
      ],
      "name": "getEstimatedMarginDetails",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        }
      ],
      "name": "getMaxEscrowAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "maxEscrowAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kinkLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidityMiningAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "loanParamsIds",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "loanTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lowUtilBaseRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lowUtilRateMultiplier",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "marginTrade",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "leverageAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "loanTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateralTokenSent",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "collateralTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "affiliateReferrer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "loanDataBytes",
          "type": "bytes"
        }
      ],
      "name": "marginTradeAffiliate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "marketLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxScaleRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "useLM",
          "type": "bool"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minted",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        }
      ],
      "name": "nextBorrowInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "supplyAmount",
          "type": "uint256"
        }
      ],
      "name": "nextSupplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pauser",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "profitOf",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rateMultiplier",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "setAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "referrer",
          "type": "address"
        }
      ],
      "name": "setAffiliatesReferrer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_baseRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_rateMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lowUtilBaseRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lowUtilRateMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_targetLevel",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_kinkLevel",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxScaleRate",
          "type": "uint256"
        }
      ],
      "name": "setDemandCurve",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "LMAddress",
          "type": "address"
        }
      ],
      "name": "setLiquidityMiningAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_pauser",
          "type": "address"
        }
      ],
      "name": "setPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "setUserNotFirstTradeFlag",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "bool",
              "name": "active",
              "type": "bool"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "loanToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateralToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "minInitialMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maintenanceMargin",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxLoanTerm",
              "type": "uint256"
            }
          ],
          "internalType": "struct LoanParamsStruct.LoanParams[]",
          "name": "loanParamsList",
          "type": "tuple[]"
        },
        {
          "internalType": "bool",
          "name": "areTorqueLoans",
          "type": "bool"
        }
      ],
      "name": "setupLoanParams",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "targetLevel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "target_",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "funcId",
          "type": "string"
        },
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "name": "toggleFunctionPause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalAssetBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalAssetSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assetSupply",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "transactionLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052600160009081556200001e6001600160e01b036200007216565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076565b3390565b615c7a80620000866000396000f3fe6080604052600436106103ef5760003560e01c80637ff9b59611610208578063cb926cb311610118578063e41b07e3116100ab578063f06a9c6b1161007a578063f06a9c6b14610aee578063f2fde38b14610b0e578063f6b69f9914610b2e578063f851a44014610b41578063ffa1ad7414610b56576103ef565b8063e41b07e314610a79578063e697d2ee14610a99578063eebc508114610ab9578063ef2b0b3914610ad9576103ef565b8063d8f06c83116100e7578063d8f06c83146109f9578063d97206a414610a19578063dd62ed3e14610a39578063e3cded6114610a59576103ef565b8063cb926cb314610984578063d1a1beb4146109a4578063d65a5021146109c4578063d759dbeb146109e4576103ef565b80639bda3a981161019b578063b9fe1a8f1161016a578063b9fe1a8f146108fa578063ba0e43bf1461091a578063be1942171461092f578063c9ddf4481461094f578063ca37e6661461096f576103ef565b80639bda3a98146108905780639dc29fac146108a55780639fd0506d146108c5578063a9059cbb146108da576103ef565b80638ee6c4e6116101d75780638ee6c4e61461083c5780638f32d59b146108515780638fb807c51461086657806395d89b411461087b576103ef565b80637ff9b596146107dd578063829b38f4146107f25780638325a1c0146108125780638da5cb5b14610827576103ef565b8063313ce56711610303578063631a3ef8116102965780637288b344116102655780637288b3441461075e57806376fd4fdf1461077e578063797bf3851461079e5780637b7933b4146107b35780637e37c08c146107c8576103ef565b8063631a3ef8146106cf5780636b40cd40146106ef578063704b6c021461071e57806370a082311461073e576103ef565b806344a4a003116102d257806344a4a0031461067057806354198ce91461068557806356e07d70146106a5578063612ef80b146106ba576103ef565b8063313ce567146105f95780633291c11a1461061b578063330691ac1461063b57806340c10f1914610650576103ef565b806318498b1d1161038657806323b872dd1161035557806323b872dd1461057057806328a02f19146105905780632d88af4a146105b15780632ea295fa146105d15780632f6b600d146105e4576103ef565b806318498b1d1461050f5780631d0806ae146105315780631f68f20a1461054657806320f6d07c1461055b576103ef565b8063095ea7b3116103c2578063095ea7b31461049857806309ec6b6b146104c557806312416898146104da57806318160ddd146104fa576103ef565b806304797930146103fe57806306947a3a1461043457806306b3efd61461045657806306fdde0314610476575b3480156103fb57600080fd5b50005b34801561040a57600080fd5b5061041e610419366004614b9d565b610b6b565b60405161042b9190615814565b60405180910390f35b34801561044057600080fd5b50610449610d14565b60405161042b919061568b565b34801561046257600080fd5b5061041e610471366004614619565b610d23565b34801561048257600080fd5b5061048b610e0f565b60405161042b9190615893565b3480156104a457600080fd5b506104b86104b33660046146dc565b610e9a565b60405161042b9190615806565b3480156104d157600080fd5b5061041e610f05565b3480156104e657600080fd5b5061041e6104f5366004614b12565b610f1a565b34801561050657600080fd5b5061041e610f45565b34801561051b57600080fd5b5061052f61052a366004614c41565b610f4b565b005b34801561053d57600080fd5b5061041e610f8e565b34801561055257600080fd5b5061041e610f94565b34801561056757600080fd5b5061041e610f9a565b34801561057c57600080fd5b506104b861058b36600461468f565b611029565b6105a361059e366004614a1a565b6110f2565b60405161042b929190615a94565b3480156105bd57600080fd5b5061052f6105cc366004614619565b611317565b6105a36105df366004614873565b61135d565b3480156105f057600080fd5b5061044961163d565b34801561060557600080fd5b5061060e61164c565b60405161042b9190615abd565b34801561062757600080fd5b5061041e610636366004614b12565b611655565b34801561064757600080fd5b5061041e611667565b34801561065c57600080fd5b5061041e61066b3660046146dc565b61166d565b34801561067c57600080fd5b5061041e6116ae565b34801561069157600080fd5b5061041e6106a0366004614619565b6116c0565b3480156106b157600080fd5b5061041e611761565b3480156106c657600080fd5b5061041e611767565b3480156106db57600080fd5b5061041e6106ea366004614b9d565b611798565b3480156106fb57600080fd5b5061070f61070a366004614be0565b611938565b60405161042b93929190615aa2565b34801561072a57600080fd5b5061052f610739366004614619565b611a49565b34801561074a57600080fd5b5061041e610759366004614619565b611a8f565b34801561076a57600080fd5b5061041e610779366004614b4e565b611aaa565b34801561078a57600080fd5b5061041e61079936600461470c565b611b8d565b3480156107aa57600080fd5b50610449611c38565b3480156107bf57600080fd5b5061041e611c4c565b3480156107d457600080fd5b5061041e611c52565b3480156107e957600080fd5b5061041e611c58565b3480156107fe57600080fd5b5061041e61080d366004614b12565b611c96565b34801561081e57600080fd5b5061041e611d16565b34801561083357600080fd5b50610449611d22565b34801561084857600080fd5b50610449611d31565b34801561085d57600080fd5b506104b8611d40565b34801561087257600080fd5b5061041e611d66565b34801561088757600080fd5b5061048b611d96565b34801561089c57600080fd5b50610449611df1565b3480156108b157600080fd5b5061041e6108c03660046146dc565b611e00565b3480156108d157600080fd5b50610449611e74565b3480156108e657600080fd5b506104b86108f53660046146dc565b611e83565b34801561090657600080fd5b5061041e610915366004614b12565b611e93565b34801561092657600080fd5b5061041e611e9e565b34801561093b57600080fd5b506104b861094a366004614aa9565b611ea4565b34801561095b57600080fd5b5061052f61096a366004614655565b611f26565b34801561097b57600080fd5b50610449611f86565b34801561099057600080fd5b5061052f61099f366004614619565b611f95565b3480156109b057600080fd5b5061041e6109bf36600461470c565b611fdb565b3480156109d057600080fd5b5061041e6109df366004614b12565b612025565b3480156109f057600080fd5b5061041e612038565b348015610a0557600080fd5b5061052f610a143660046147f1565b61203e565b348015610a2557600080fd5b5061052f610a34366004614d3d565b61220d565b348015610a4557600080fd5b5061041e610a54366004614655565b612314565b348015610a6557600080fd5b5061052f610a74366004614add565b61233f565b348015610a8557600080fd5b5061041e610a94366004614619565b6123e4565b348015610aa557600080fd5b5061052f610ab436600461474f565b6123f6565b348015610ac557600080fd5b5061041e610ad4366004614619565b6125a7565b348015610ae557600080fd5b5061041e6125c2565b348015610afa57600080fd5b5061052f610b09366004614619565b6125c8565b348015610b1a57600080fd5b5061052f610b29366004614619565b612626565b6105a3610b3c36600461493a565b612656565b348015610b4d57600080fd5b50610449612726565b348015610b6257600080fd5b5061041e612735565b60008315610d0d576001600160a01b038216610b90576017546001600160a01b031691505b600060106000846001604051602001610baa929190615617565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610c1b918a9101615814565b60206040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c6b9190810190614b30565b60016040518663ffffffff1660e01b8152600401610c8d959493929190615705565b60206040518083038186803b158015610ca557600080fd5b505afa158015610cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cdd9190810190614b30565b9150610cf182610ceb611d66565b8661273a565b9350610cff91506127b39050565b821115610d0b57600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610dbe57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d6b90309087906004016156a7565b60206040518083038186803b158015610d8357600080fd5b505afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dbb9190810190614b30565b90505b610e06670de0b6b3a7640000610dfa610dd5611c58565b610dee85610de289611a8f565b9063ffffffff6127e916565b9063ffffffff61280e16565b9063ffffffff61284816565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e925780601f10610e6757610100808354040283529160200191610e92565b820191906000526020600020905b815481529060010190602001808311610e7557829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ef3908690615814565b60405180910390a35060015b92915050565b6000610f146104f5600061288a565b90505b90565b600080610f25610f9a565b90508015610f3f57610f378184611aaa565b915050610e0a565b50919050565b60155490565b6000610f5986868686611938565b5091505081811015610f865760405162461bcd60e51b8152600401610f7d906158a4565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610fd993309361010090920490911691016156a7565b60206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f149190810190614b30565b60165460405163115dd4b160e01b81526000916110ea918691869186916001600160a01b03169063115dd4b190611064903390600401615699565b60206040518083038186803b15801561107c57600080fd5b505afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b49190810190614855565b6110e1576001600160a01b03881660009081526014602090815260408083203384529091529020546110e5565b6000195b6128c4565b949350505050565b6000806001600054146111175760405162461bcd60e51b8152600401610f7d90615a44565b6002600055611124612a97565b6111318989898988610f4b565b6001600160a01b03861661114e576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156111815760405162461bcd60e51b8152600401610f7d90615954565b8915806111965750336001600160a01b038616145b6111b25760405162461bcd60e51b8152600401610f7d90615a64565b6001600160a01b038616600090815260126020526040902054156111f5576001600160a01b0386166000908152601260205260409020548711156111f557600080fd5b60045461010090046001600160a01b0316600090815260126020526040902054156112465760045461010090046001600160a01b031660009081526012602052604090205488111561124657600080fd5b600061125387898b612b17565b9050806112725760405162461bcd60e51b8152600401610f7d90615984565b61127a614319565b611282614337565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a90526112ba612d44565b6112cb8c8260016020020151612dea565b825260208201526112ec6f4b3b4ca85a86c47a098a2240000000008d612848565b9b506112fe8d60008e8c86868c612e39565b6001600055909e909d509b505050505050505050505050565b61131f611d40565b61133b5760405162461bcd60e51b8152600401610f7d906159e4565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146113825760405162461bcd60e51b8152600401610f7d90615a44565b6002600055886113a45760405162461bcd60e51b8152600401610f7d90615a74565b6113ac612a97565b6001600160a01b038616600090815260126020526040902054156113ef576001600160a01b0386166000908152601260205260409020548711156113ef57600080fd5b3415806113fb57508634145b801561140f57508615158061140f57508915155b801561143657506001600160a01b03861615158061142c57503415155b8061143657508915155b801561145257508915806114525750336001600160a01b038616145b61146e5760405162461bcd60e51b8152600401610f7d90615914565b6001600160a01b03861661148b576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114be5760405162461bcd60e51b8152600401610f7d906158b4565b6114c6612d44565b6114ce614319565b6114d6614337565b3082526001600160a01b03878116602080850191909152908716604084015281018b905261150e8b611508600061288a565b8c61273a565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506116258c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e6001604051602001611579929190615617565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b81526004016115bd9190615814565b60206040518083038186803b1580156115d557600080fd5b505afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061160d9190810190614b30565b8b868660405180602001604052806000815250612e39565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146116915760405162461bcd60e51b8152600401610f7d90615a44565b60026000556116a08383613098565b90505b600160005592915050565b6000610f146116bb610f9a565b6131a4565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116f992919061563d565b604051602081830303815290604052805190602001209050610e068160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611743611c58565b6001600160a01b0387166000908152601160205260409020546131dc565b600a5481565b600080611774600061288a565b90506000611780610f9a565b9050808211156117935790039050610f17565b505090565b60008315610d0d5760006117ae85610ceb611d66565b925050506117ba6127b3565b8111610d0b576001600160a01b0383166117dd576017546001600160a01b031692505b6000601060008560016040516020016117f7929190615617565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061192f93600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d99161186d918c9101615814565b60206040518083038186803b15801561188557600080fd5b505afa158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118bd9190810190614b30565b60016040518663ffffffff1660e01b81526004016118df959493929190615705565b60206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610de29190810190614b30565b92505050610d0d565b600080806001600160a01b038416611959576017546001600160a01b031693505b6000611966858789612b17565b90506119728882612dea565b909450915061197f6127b3565b841115611996575060009250829150819050611a3f565b6119a6878563ffffffff6127e916565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f7077936119eb9361010090930416918a918d918d918a918d9101615747565b60206040518083038186803b158015611a0357600080fd5b505afa158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a3b9190810190614b30565b9250505b9450945094915050565b611a51611d40565b611a6d5760405162461bcd60e51b8152600401610f7d906159e4565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611abb5750828210155b15610eff57611b86701d6329f1c35ca4bfabb9f5610000000000610dfa611b7068056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3357600080fd5b505afa158015611b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b6b9190810190614b30565b613236565b610dee611b7d8888613278565b610dee896131a4565b9050610eff565b6000600160005414611bb15760405162461bcd60e51b8152600401610f7d90615a44565b60026000558115611bcc57611bc5836132aa565b9050611bd8565b611bd583613450565b90505b8015611c2c57611c2c600460019054906101000a90046001600160a01b0316858360405180604001604052806015815260200174185cdcd95d081d1c985b9cd9995c8819985a5b1959605a1b815250613607565b60016000559392505050565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611c7f57611c7b613667565b9150505b611c90611c8b8261288a565b613733565b91505090565b600080611cb561016d610dfa601c600b5461280e90919063ffffffff16565b90506000611cd268056bc75e2d631000008363ffffffff61323616565b90506000611cef68056bc75e2d63100000610dfa84610dee611767565b9050611d0d85610dfa83670de0b6b3a764000063ffffffff61280e16565b95945050505050565b6000610f146000613762565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611d576137b8565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611d8d57611d89613667565b9150505b611c908161288a565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e925780601f10610e6757610100808354040283529160200191610e92565b6018546001600160a01b031681565b6000600160005414611e245760405162461bcd60e51b8152600401610f7d90615a44565b6002600055611e3282613450565b905080156116a3576116a3600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b815250613607565b601b546001600160a01b031681565b6000610d0d3384846000196128c4565b6000610eff82613762565b60095481565b60008082604051602001611eb8919061567f565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611f05929190615663565b60408051808303601f19018152919052805160209091012054949350505050565b60165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf44890611f5890859085906004016156a7565b600060405180830381600087803b158015611f7257600080fd5b505af1158015610f86573d6000803e3d6000fd5b601a546001600160a01b031681565b611f9d611d40565b611fb95760405162461bcd60e51b8152600401610f7d906159e4565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600160005414611fff5760405162461bcd60e51b8152600401610f7d90615a44565b6002600055811561201b5761201484846137bc565b9050611c2c565b6120148484613098565b6000610eff6104f583610de2600061288a565b60075481565b612046611d40565b8061205b57506019546001600160a01b031633145b6120775760405162461bcd60e51b8152600401610f7d906159e4565b60045460609061010090046001600160a01b031660005b845181101561210157818582815181106120a457fe5b6020026020010151606001906001600160a01b031690816001600160a01b031681525050836120d6576224ea006120d9565b60005b62ffffff168582815181106120ea57fe5b602090810291909101015160e0015260010161208e565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e906121329087906004016157f5565b600060405180830381600087803b15801561214c57600080fd5b505af1158015612160573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261218891908101906147bd565b915060005b8251811015612206578281815181106121a257fe5b6020026020010151601060008784815181106121ba57fe5b602002602001015160800151876040516020016121d8929190615617565b60408051601f198184030181529181528151602092830120835290820192909252016000205560010161218d565b5050505050565b612215611d40565b8061222a57506019546001600160a01b031633145b6122465760405162461bcd60e51b8152600401610f7d906159e4565b68056bc75e2d63100000612260878963ffffffff6127e916565b111561227e5760405162461bcd60e51b8152600401610f7d90615974565b68056bc75e2d63100000612298858763ffffffff6127e916565b11156122b65760405162461bcd60e51b8152600401610f7d90615974565b68056bc75e2d6310000083111580156122d8575068056bc75e2d631000008211155b6122f45760405162461bcd60e51b8152600401610f7d906159a4565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146123695760405162461bcd60e51b8152600401610f7d90615a34565b60008260405160200161237c919061567f565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f26040516020016123c4929190615663565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b6123fe611d40565b8061241357506019546001600160a01b031633145b61242f5760405162461bcd60e51b8152600401610f7d906159e4565b82811461244e5760405162461bcd60e51b8152600401610f7d90615904565b60408051848152602080860282010190915260609084801561247a578160200160208202803883390190505b50905060005b8481101561253d57600086868381811061249657fe5b90506020020160206124ab9190810190614619565b8585848181106124b757fe5b90506020020160206124cc9190810190614837565b6040516020016124dd929190615617565b6040516020818303038152906040528051906020012060001c9050601060008281526020019081526020016000205483838151811061251857fe5b6020908102919091018101919091526000918252601090526040812055600101612480565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a9061256e9084906004016157e4565b600060405180830381600087803b15801561258857600080fd5b505af115801561259c573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b60165460405163f06a9c6b60e01b81526001600160a01b039091169063f06a9c6b906125f890849060040161568b565b600060405180830381600087803b15801561261257600080fd5b505af1158015612206573d6000803e3d6000fd5b61262e611d40565b61264a5760405162461bcd60e51b8152600401610f7d906159e4565b61265381613845565b50565b6000806001600160a01b038516156126cd5760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf4489061269a908a9089906004016156a7565b600060405180830381600087803b1580156126b457600080fd5b505af11580156126c8573d6000803e3d6000fd5b505050505b6127138c8c8c8c8c8c8c8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110f292505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b600080600061274986866138c7565b925061279661277e670de0b6b3a7640000611b6b6b0a3098c68eb9427db8000000610dfa83610dee8a8c63ffffffff61280e16565b610dfa88670de0b6b3a764000063ffffffff61280e16565b90506127a8818763ffffffff61323616565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610fd99130910161568b565b600082820183811015610d0d5760405162461bcd60e51b8152600401610f7d906158e4565b60008261281d57506000610eff565b8282028284828161282a57fe5b0414610d0d5760405162461bcd60e51b8152600401610f7d906159d4565b6000610d0d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139dd565b6000601554600014610e0a57600c54806128b4576128b16128a9610f9a565b610de26127b3565b90505b610f37818463ffffffff6127e916565b60006000198214612920576040805180820190915260028152610c4d60f21b60208201526128fb908390859063ffffffff613a1416565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166129465760405162461bcd60e51b8152600401610f7d906158c4565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b92820192909252909190612991908390879063ffffffff613a1416565b6001600160a01b038089166000908152601360205260408082208490559189168152908120549192506129ca828863ffffffff6127e916565b6001600160a01b03891660009081526013602052604081208290559091506129f0611c58565b601c549091506001600160a01b038b8116911614801590612a1f5750601c546001600160a01b038a8116911614155b15612a3c57612a308a868684613a40565b612a3c89848484613a40565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612a7f9190615814565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001612ad7929190615663565b6040516020818303038152906040528051906020012090506000815490508015612b135760405162461bcd60e51b8152600401610f7d906159e4565b5050565b808215610d0d57600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ba79190810190614637565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612be0938c9361010090910490921691016156a7565b604080518083038186803b158015612bf757600080fd5b505afa158015612c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c2f9190810190614b6d565b9150915081600014158015612c4357508015155b612c5f5760405162461bcd60e51b8152600401610f7d90615a24565b6000612c7582610dfa888663ffffffff61280e16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612cb8936101009004909116918d918891016156dd565b60206040518083038186803b158015612cd057600080fd5b505afa158015612ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d089190810190614b30565b9050868114612d2857612d2587610dfa848463ffffffff61280e16565b91505b612d38828663ffffffff6127e916565b98975050505050505050565b600f5442906001600160581b038083169116146126535760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612d94936101009004909116910161568b565b600060405180830381600087803b158015612dae57600080fd5b505af1158015612dc2573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612e0a670de0b6b3a7640000610dfa868863ffffffff61280e16565b9050612e1f81612e1a600061288a565b6138c7565b9150612e2f826224ea0083613af6565b9250509250929050565b600080612e44612a97565b612e4c6127b3565b602085015111801590612e6b575060208501516001600160a01b031615155b612e875760405162461bcd60e51b8152600401610f7d90615944565b60408501516001600160a01b0316612ead5760208501516001600160a01b031660408601525b6000612ebb8787878c613b57565b60208601516060870151919250612ed291906127e9565b60608601528815612ef2576060850151612eec908a613236565b60608601525b60008915612efe575060015b6000601060008a84604051602001612f17929190615617565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612f8f9796959493929190615822565b60408051808303818588803b158015612fa757600080fd5b505af1158015612fbb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612fe09190810190614b6d565b6080890152602088018190526130085760405162461bcd60e51b8152600401610f7d90615994565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b9161303b9160040161568b565b600060405180830381600087803b15801561305557600080fd5b505af1158015613069573d6000803e3d6000fd5b505050508660016005811061307a57fe5b6020020151608090970151969c969b50959950505050505050505050565b6000806130a483613d8c565b601c5491935091506000906001600160a01b03161561314257601c54604051636822955360e11b81526001600160a01b039091169063d0452aa6906130ef90309089906004016156a7565b60206040518083038186803b15801561310757600080fd5b505afa15801561311b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061313f9190810190614b30565b90505b6001600160a01b03851660009081526013602052604081205461316b908363ffffffff6127e916565b9050600061317f828663ffffffff6127e916565b905061318d87868887613e96565b5061319a87838387613a40565b5050505092915050565b60008115610e0a5760006131b6613667565b509050610f3783610dfa61016d610dee8568056bc75e2d6310000063ffffffff61280e16565b6000816131eb575060006110ea565b508354611d0d8161322a670de0b6b3a764000061321e88613212898963ffffffff613fb716565b9063ffffffff613ffd16565b9063ffffffff61406816565b9063ffffffff6140cc16565b6000610d0d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a14565b6000821580159061328857508115155b15610eff57611b8682610dfa8568056bc75e2d6310000063ffffffff61280e16565b601c54604051636822955360e11b815260009182916001600160a01b039091169063d0452aa6906132e190309033906004016156c2565b60206040518083038186803b1580156132f957600080fd5b505afa15801561330d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133319190810190614b30565b90508261334d61334033611a8f565b839063ffffffff6127e916565b101561336b5760405162461bcd60e51b8152600401610f7d90615924565b801561344b57828110156133e457601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec906133ad903090859033906004016157bc565b600060405180830381600087803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b5050505061344b565b601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613418903090879033906004016157bc565b600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505b610e06835b60008161346f5760405162461bcd60e51b8152600401610f7d906159f4565b61347833611a8f565b8211156134ac5760001982146134a05760405162461bcd60e51b8152600401610f7d906159b4565b6134a933611a8f565b91505b6134b4612d44565b60006134c3611c8b600061288a565b905060006134e3670de0b6b3a7640000610dfa868563ffffffff61280e16565b905060006134ef6127b3565b9050819350808411156135145760405162461bcd60e51b8152600401610f7d90615934565b601c546000906001600160a01b0316156135ad57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061355a90309033906004016156c2565b60206040518083038186803b15801561357257600080fd5b505afa158015613586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135aa9190810190614b30565b90505b336000908152601360205260408120546135cd908363ffffffff6127e916565b905060006135e1828963ffffffff61323616565b90506135ef33898989614112565b506135fc33838389613a40565b505050505050919050565b60405161366190859063a9059cbb60e01b9061362990879087906024016157a1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283614237565b50505050565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb0936136a9933093610100900490911691016156a7565b60c06040518083038186803b1580156136c157600080fd5b505afa1580156136d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136f99190810190614cb6565b509196509450925061372c915068056bc75e2d631000009050610dfa61371f8285613236565b859063ffffffff61280e16565b9150509091565b6015546000908061374657600e54610e06565b610e0681610dfa85670de0b6b3a764000063ffffffff61280e16565b60008082156137ab57600f54426001600160581b0390811691161461378d57613789613667565b9150505b600061379b82610de26127b3565b9050808411156137a9578093505b505b610e0683612e1a8361288a565b3390565b60006137c88383613098565b601c549091506137e49084906001600160a01b031683806128c4565b50601c546040516336305cf160e21b81526001600160a01b039091169063d8c173c49061381790869085906004016157a1565b600060405180830381600087803b15801561383157600080fd5b505af115801561319a573d6000803e3d6000fd5b6001600160a01b03811661386b5760405162461bcd60e51b8152600401610f7d906158d4565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806138df6138d985610de2610f9a565b84613278565b600554600654600954600a54600b5494955060009485949392919082881015613906578297505b8188111561397957968190039668056bc75e2d631000008290038089111561392c578098505b61394d68056bc75e2d63100000610dfa85610dee898b63ffffffff6127e916565b965061397187610de283610dfa613964878d613236565b8e9063ffffffff61280e16565b9950506139cf565b61399a85610de268056bc75e2d63100000610dfa8c8963ffffffff61280e16565b985093955085936139b1848663ffffffff6127e916565b9550868910156139c3578698506139cf565b858911156139cf578598505b505050505050505092915050565b600081836139fe5760405162461bcd60e51b8152600401610f7d9190615893565b506000838581613a0a57fe5b0495945050505050565b60008184841115613a385760405162461bcd60e51b8152600401610f7d9190615893565b505050900390565b604051600090613a769086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb69060200161563d565b60405160208183030381529060405280519060200120905060008360001415613aa25760009250613ad3565b8415613ad3576001600160a01b038616600090815260116020526040902054613ad0908390879086906131dc565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b600080613b116301e13380610dfa878763ffffffff61280e16565b90506000613b2e68056bc75e2d631000008363ffffffff61323616565b9050613b4d81610dfa8668056bc75e2d6310000063ffffffff61280e16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b16851415613bad5760405162461bcd60e51b8152600401610f7d90615a04565b3496508715613c0b57613bd185858a60405180602001604052806000815250613607565b87831115613c0657601654604080516020810190915260008152613c069187916001600160a01b03909116908b870390613607565b613c40565b601654604080518082019091526002815261323760f01b6020820152613c409187916001600160a01b03909116908690613607565b8015613d4357856001600160a01b03168b6001600160a01b0316148015613c6657508615155b8015613c725750808710155b15613d0c57856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613cb257600080fd5b505af1158015613cc6573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b6020820152613d0294508f93506001600160a01b0390911691508490613607565b8087039650613d43565b601654604080518082019091526004815263191c16b160e11b6020820152613d43918d9133916001600160a01b03169085906142f5565b8115613d7e57601654604080518082019091526002815261323960f01b6020820152613d7e91879133916001600160a01b03169086906142f5565b505050505050949350505050565b60008082613dac5760405162461bcd60e51b8152600401610f7d906159c4565b613db4612d44565b613dc1611c8b600061288a565b9050613ddf81610dfa85670de0b6b3a764000063ffffffff61280e16565b915034613e2757613e22600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b8152506142f5565b613e91565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e7757600080fd5b505af1158015613e8b573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613ebe5760405162461bcd60e51b8152600401610f7d906158c4565b6001600160a01b038516600090815260136020526040812054613ee7908663ffffffff6127e916565b6001600160a01b0387166000908152601360205260409020819055601554909150613f18908663ffffffff6127e916565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613f5a90889088908890615aa2565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613fa69190615814565b60405180910390a395945050505050565b6000818303818312801590613fcc5750838113155b80613fe15750600083128015613fe157508381135b610d0d5760405162461bcd60e51b8152600401610f7d90615a54565b60008261400c57506000610eff565b826000191480156140205750600160ff1b82145b1561403d5760405162461bcd60e51b8152600401610f7d90615a14565b8282028284828161404a57fe5b0514610d0d5760405162461bcd60e51b8152600401610f7d90615a14565b6000816140875760405162461bcd60e51b8152600401610f7d90615a84565b8160001914801561409b5750600160ff1b83145b156140b85760405162461bcd60e51b8152600401610f7d90615964565b60008284816140c357fe5b05949350505050565b60008282018183128015906140e15750838112155b806140f657506000831280156140f657508381125b610d0d5760405162461bcd60e51b8152600401610f7d906158f4565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b0387166000908152601390915291822054829161415a9190879063ffffffff613a1416565b9050600a811161417b57614174858263ffffffff6127e916565b9450600090505b6001600160a01b03861660009081526013602052604090208190556015546141a9908663ffffffff61323616565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b4644906141eb90889088908890615aa2565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613fa69190615814565b60006060846001600160a01b031684604051614253919061567f565b6000604051808303816000865af19150503d8060008114614290576040519150601f19603f3d011682016040523d82523d6000602084013e614295565b606091505b50915091508183906142ba5760405162461bcd60e51b8152600401610f7d9190615893565b5080511561220657808060200190516142d69190810190614855565b8390610f865760405162461bcd60e51b8152600401610f7d9190615893565b6040516122069086906323b872dd60e01b90613629908890889088906024016156dd565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610eff81615c11565b8051610eff81615c11565b60008083601f84011261437d57600080fd5b5081356001600160401b0381111561439457600080fd5b6020830191508360208202830111156143ac57600080fd5b9250929050565b600082601f8301126143c457600080fd5b81516143d76143d282615af1565b615acb565b915081818352602084019350602081019050838560208402820111156143fc57600080fd5b60005b8381101561319a578161441288826144bd565b84525060209283019291909101906001016143ff565b600082601f83011261443957600080fd5b81356144476143d282615af1565b915081818352602084019350602081019050838561010084028201111561446d57600080fd5b60005b8381101561319a57816144838882614558565b8452506020909201916101009190910190600101614470565b8035610eff81615c25565b8051610eff81615c25565b8035610eff81615c2e565b8051610eff81615c2e565b60008083601f8401126144da57600080fd5b5081356001600160401b038111156144f157600080fd5b6020830191508360018202830111156143ac57600080fd5b600082601f83011261451a57600080fd5b81356145286143d282615b11565b9150808252602083016020830185838301111561454457600080fd5b61454f838284615b97565b50505092915050565b6000610100828403121561456b57600080fd5b614576610100615acb565b9050600061458484846144b2565b82525060206145958484830161449c565b60208301525060406145a984828501614355565b60408301525060606145bd84828501614355565b60608301525060806145d184828501614355565b60808301525060a06145e5848285016144b2565b60a08301525060c06145f9848285016144b2565b60c08301525060e061460d848285016144b2565b60e08301525092915050565b60006020828403121561462b57600080fd5b60006110ea8484614355565b60006020828403121561464957600080fd5b60006110ea8484614360565b6000806040838503121561466857600080fd5b60006146748585614355565b925050602061468585828601614355565b9150509250929050565b6000806000606084860312156146a457600080fd5b60006146b08686614355565b93505060206146c186828701614355565b92505060406146d2868287016144b2565b9150509250925092565b600080604083850312156146ef57600080fd5b60006146fb8585614355565b9250506020614685858286016144b2565b60008060006060848603121561472157600080fd5b600061472d8686614355565b935050602061473e868287016144b2565b92505060406146d28682870161449c565b6000806000806040858703121561476557600080fd5b84356001600160401b0381111561477b57600080fd5b6147878782880161436b565b945094505060208501356001600160401b038111156147a557600080fd5b6147b18782880161436b565b95989497509550505050565b6000602082840312156147cf57600080fd5b81516001600160401b038111156147e557600080fd5b6110ea848285016143b3565b6000806040838503121561480457600080fd5b82356001600160401b0381111561481a57600080fd5b61482685828601614428565b92505060206146858582860161449c565b60006020828403121561484957600080fd5b60006110ea848461449c565b60006020828403121561486757600080fd5b60006110ea84846144a7565b600080600080600080600080610100898b03121561489057600080fd5b600061489c8b8b6144b2565b98505060206148ad8b828c016144b2565b97505060406148be8b828c016144b2565b96505060606148cf8b828c016144b2565b95505060806148e08b828c01614355565b94505060a06148f18b828c01614355565b93505060c06149028b828c01614355565b92505060e08901356001600160401b0381111561491e57600080fd5b61492a8b828c01614509565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561495a57600080fd5b60006149668d8d6144b2565b9a505060206149778d828e016144b2565b99505060406149888d828e016144b2565b98505060606149998d828e016144b2565b97505060806149aa8d828e01614355565b96505060a06149bb8d828e01614355565b95505060c06149cc8d828e016144b2565b94505060e06149dd8d828e01614355565b9350506101008b01356001600160401b038111156149fa57600080fd5b614a068d828e016144c8565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b031215614a3757600080fd5b6000614a438b8b6144b2565b9850506020614a548b828c016144b2565b9750506040614a658b828c016144b2565b9650506060614a768b828c016144b2565b9550506080614a878b828c01614355565b94505060a0614a988b828c01614355565b93505060c06149028b828c016144b2565b600060208284031215614abb57600080fd5b81356001600160401b03811115614ad157600080fd5b6110ea84828501614509565b60008060408385031215614af057600080fd5b82356001600160401b03811115614b0657600080fd5b61482685828601614509565b600060208284031215614b2457600080fd5b60006110ea84846144b2565b600060208284031215614b4257600080fd5b60006110ea84846144bd565b60008060408385031215614b6157600080fd5b60006146fb85856144b2565b60008060408385031215614b8057600080fd5b6000614b8c85856144bd565b9250506020614685858286016144bd565b600080600060608486031215614bb257600080fd5b6000614bbe86866144b2565b9350506020614bcf868287016144b2565b92505060406146d286828701614355565b60008060008060808587031215614bf657600080fd5b6000614c0287876144b2565b9450506020614c13878288016144b2565b9350506040614c24878288016144b2565b9250506060614c3587828801614355565b91505092959194509250565b600080600080600060a08688031215614c5957600080fd5b6000614c6588886144b2565b9550506020614c76888289016144b2565b9450506040614c87888289016144b2565b9350506060614c9888828901614355565b9250506080614ca9888289016144b2565b9150509295509295909350565b60008060008060008060c08789031215614ccf57600080fd5b6000614cdb89896144bd565b9650506020614cec89828a016144bd565b9550506040614cfd89828a016144bd565b9450506060614d0e89828a016144bd565b9350506080614d1f89828a016144bd565b92505060a0614d3089828a016144bd565b9150509295509295509295565b600080600080600080600060e0888a031215614d5857600080fd5b6000614d648a8a6144b2565b9750506020614d758a828b016144b2565b9650506040614d868a828b016144b2565b9550506060614d978a828b016144b2565b9450506080614da88a828b016144b2565b93505060a0614db98a828b016144b2565b92505060c0614dca8a828b016144b2565b91505092959891949750929550565b6000614de58383614e1d565b505060200190565b6000614de58383614f90565b6000614e058383615577565b50506101000190565b614e1781615b86565b82525050565b614e1781615b57565b614e17614e3282615b57565b615bcf565b614e4081615b3e565b614e4a8184610e0a565b9250614e5582610f17565b8060005b83811015610f86578151614e6d8782614dd9565b9650614e7883615b38565b925050600101614e59565b6000614e8e82615b44565b614e988185615b4e565b9350614ea383615b38565b8060005b83811015614ed1578151614ebb8882614ded565b9750614ec683615b38565b925050600101614ea7565b509495945050505050565b6000614ee782615b44565b614ef18185615b4e565b9350614efc83615b38565b8060005b83811015614ed1578151614f148882614df9565b9750614f1f83615b38565b925050600101614f00565b614f3381615b48565b614f3d8184610e0a565b9250614f4882610f17565b8060005b83811015610f86578151614f608782614ded565b9650614f6b83615b38565b925050600101614f4c565b614e1781615b62565b614e17614f8b82615b62565b615bda565b614e1781610f17565b614e17614fa582610f17565b610f17565b614e17614fa582615b67565b6000614fc182615b44565b614fcb8185615b4e565b9350614fdb818560208601615ba3565b614fe481615bfb565b9093019392505050565b6000614ff982615b44565b6150038185610e0a565b9350615013818560208601615ba3565b9290920192915050565b600061502a600c83615b4e565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000615052600283615b4e565b61031360f41b815260200192915050565b6000615070600283615b4e565b61313560f01b815260200192915050565b600061508e602683615b4e565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006150d6601b83615b4e565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061510f602183615b4e565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615152600e83615b4e565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b600061517c600183615b4e565b603760f81b815260200192915050565b6000615199601283615b4e565b716e6f7420656e6f7567682062616c616e636560701b815260200192915050565b60006151c7600283615b4e565b61333760f01b815260200192915050565b60006151e5600283615b4e565b610c8d60f21b815260200192915050565b6000615203600283615b4e565b61313160f01b815260200192915050565b6000615221602183615b4e565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615264601583615b4e565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b6000615295600283615b4e565b61189960f11b815260200192915050565b60006152b3600283615b4e565b61323560f01b815260200192915050565b60006152d1600f83615b4e565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b60006152fc600283615b4e565b61199960f11b815260200192915050565b600061531a600283615b4e565b61313760f01b815260200192915050565b6000615338602183615b4e565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061537b600c83615b4e565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006153a3600283615b4e565b61313960f01b815260200192915050565b60006153c1600283615b4e565b61191b60f11b815260200192915050565b60006153df602783615b4e565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000615428601d83615b4e565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b6000615461600a83615b4e565b6937b7363ca830bab9b2b960b11b815260200192915050565b6000615487600c83615b4e565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b60006154af602483615b4e565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b60006154f5601883615b4e565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b600061552e600183615b4e565b601b60f91b815260200192915050565b600061554b602083615b4e565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b80516101008301906155898482614f90565b50602082015161559c6020850182614f76565b5060408201516155af6040850182614e1d565b5060608201516155c26060850182614e1d565b5060808201516155d56080850182614e1d565b5060a08201516155e860a0850182614f90565b5060c08201516155fb60c0850182614f90565b5060e082015161366160e0850182614f90565b614e1781615b80565b60006156238285614e26565b6014820191506156338284614f7f565b5060010192915050565b60006156498285614e26565b6014820191506156598284614f99565b5060200192915050565b600061566f8285614faa565b6004820191506156598284614f99565b6000610d0d8284614fee565b60208101610eff8284614e1d565b60208101610eff8284614e0e565b604081016156b58285614e1d565b610d0d6020830184614e1d565b604081016156d08285614e1d565b610d0d6020830184614e0e565b606081016156eb8286614e1d565b6156f86020830185614e1d565b6110ea6040830184614f90565b60a081016157138288614e1d565b6157206020830187614e1d565b61572d6040830186614f90565b61573a6060830185614f90565b613b4d6080830184614f76565b60c081016157558289614e1d565b6157626020830188614e1d565b61576f6040830187614f90565b61577c6060830186614f90565b6157896080830185614f90565b61579660a0830184614f90565b979650505050505050565b604081016157af8285614e1d565b610d0d6020830184614f90565b606081016157ca8286614e1d565b6157d76020830185614f90565b6110ea6040830184614e0e565b60208082528101610d0d8184614e83565b60208082528101610d0d8184614edc565b60208101610eff8284614f76565b60208101610eff8284614f90565b6101c08101615831828a614f90565b61583e6020830189614f90565b61584b6040830188614f76565b6158586060830187614f90565b6158656080830186614e37565b615873610100830185614f2a565b8181036101a08301526158868184614fb6565b9998505050505050505050565b60208082528101610d0d8184614fb6565b60208082528101610eff8161501d565b60208082528101610eff81615045565b60208082528101610eff81615063565b60208082528101610eff81615081565b60208082528101610eff816150c9565b60208082528101610eff81615102565b60208082528101610eff81615145565b60208082528101610eff8161516f565b60208082528101610eff8161518c565b60208082528101610eff816151ba565b60208082528101610eff816151d8565b60208082528101610eff816151f6565b60208082528101610eff81615214565b60208082528101610eff81615257565b60208082528101610eff81615288565b60208082528101610eff816152a6565b60208082528101610eff816152c4565b60208082528101610eff816152ef565b60208082528101610eff8161530d565b60208082528101610eff8161532b565b60208082528101610eff8161536e565b60208082528101610eff81615396565b60208082528101610eff816153b4565b60208082528101610eff816153d2565b60208082528101610eff8161541b565b60208082528101610eff81615454565b60208082528101610eff8161547a565b60208082528101610eff816154a2565b60208082528101610eff816154e8565b60208082528101610eff81615521565b60208082528101610eff8161553e565b604081016157af8285614f90565b60608101615ab08286614f90565b6156f86020830185614f90565b60208101610eff828461560e565b6040518181016001600160401b0381118282101715615ae957600080fd5b604052919050565b60006001600160401b03821115615b0757600080fd5b5060209081020190565b60006001600160401b03821115615b2757600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610eff82615b74565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610eff826000610eff82615b57565b82818337506000910152565b60005b83811015615bbe578181015183820152602001615ba6565b838111156136615750506000910152565b6000610eff82615be5565b6000610eff82615bf0565b6000610eff82615c0b565b6000610eff82615c05565b601f01601f191690565b60f81b90565b60601b90565b615c1a81615b57565b811461265357600080fd5b615c1a81615b62565b615c1a81610f1756fea365627a7a72315820c73210bfed5f9dc340d9bb6d509064e47607585d837100b09c7acb22300cc4966c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x6080604052600436106103ef5760003560e01c80637ff9b59611610208578063cb926cb311610118578063e41b07e3116100ab578063f06a9c6b1161007a578063f06a9c6b14610aee578063f2fde38b14610b0e578063f6b69f9914610b2e578063f851a44014610b41578063ffa1ad7414610b56576103ef565b8063e41b07e314610a79578063e697d2ee14610a99578063eebc508114610ab9578063ef2b0b3914610ad9576103ef565b8063d8f06c83116100e7578063d8f06c83146109f9578063d97206a414610a19578063dd62ed3e14610a39578063e3cded6114610a59576103ef565b8063cb926cb314610984578063d1a1beb4146109a4578063d65a5021146109c4578063d759dbeb146109e4576103ef565b80639bda3a981161019b578063b9fe1a8f1161016a578063b9fe1a8f146108fa578063ba0e43bf1461091a578063be1942171461092f578063c9ddf4481461094f578063ca37e6661461096f576103ef565b80639bda3a98146108905780639dc29fac146108a55780639fd0506d146108c5578063a9059cbb146108da576103ef565b80638ee6c4e6116101d75780638ee6c4e61461083c5780638f32d59b146108515780638fb807c51461086657806395d89b411461087b576103ef565b80637ff9b596146107dd578063829b38f4146107f25780638325a1c0146108125780638da5cb5b14610827576103ef565b8063313ce56711610303578063631a3ef8116102965780637288b344116102655780637288b3441461075e57806376fd4fdf1461077e578063797bf3851461079e5780637b7933b4146107b35780637e37c08c146107c8576103ef565b8063631a3ef8146106cf5780636b40cd40146106ef578063704b6c021461071e57806370a082311461073e576103ef565b806344a4a003116102d257806344a4a0031461067057806354198ce91461068557806356e07d70146106a5578063612ef80b146106ba576103ef565b8063313ce567146105f95780633291c11a1461061b578063330691ac1461063b57806340c10f1914610650576103ef565b806318498b1d1161038657806323b872dd1161035557806323b872dd1461057057806328a02f19146105905780632d88af4a146105b15780632ea295fa146105d15780632f6b600d146105e4576103ef565b806318498b1d1461050f5780631d0806ae146105315780631f68f20a1461054657806320f6d07c1461055b576103ef565b8063095ea7b3116103c2578063095ea7b31461049857806309ec6b6b146104c557806312416898146104da57806318160ddd146104fa576103ef565b806304797930146103fe57806306947a3a1461043457806306b3efd61461045657806306fdde0314610476575b3480156103fb57600080fd5b50005b34801561040a57600080fd5b5061041e610419366004614b9d565b610b6b565b60405161042b9190615814565b60405180910390f35b34801561044057600080fd5b50610449610d14565b60405161042b919061568b565b34801561046257600080fd5b5061041e610471366004614619565b610d23565b34801561048257600080fd5b5061048b610e0f565b60405161042b9190615893565b3480156104a457600080fd5b506104b86104b33660046146dc565b610e9a565b60405161042b9190615806565b3480156104d157600080fd5b5061041e610f05565b3480156104e657600080fd5b5061041e6104f5366004614b12565b610f1a565b34801561050657600080fd5b5061041e610f45565b34801561051b57600080fd5b5061052f61052a366004614c41565b610f4b565b005b34801561053d57600080fd5b5061041e610f8e565b34801561055257600080fd5b5061041e610f94565b34801561056757600080fd5b5061041e610f9a565b34801561057c57600080fd5b506104b861058b36600461468f565b611029565b6105a361059e366004614a1a565b6110f2565b60405161042b929190615a94565b3480156105bd57600080fd5b5061052f6105cc366004614619565b611317565b6105a36105df366004614873565b61135d565b3480156105f057600080fd5b5061044961163d565b34801561060557600080fd5b5061060e61164c565b60405161042b9190615abd565b34801561062757600080fd5b5061041e610636366004614b12565b611655565b34801561064757600080fd5b5061041e611667565b34801561065c57600080fd5b5061041e61066b3660046146dc565b61166d565b34801561067c57600080fd5b5061041e6116ae565b34801561069157600080fd5b5061041e6106a0366004614619565b6116c0565b3480156106b157600080fd5b5061041e611761565b3480156106c657600080fd5b5061041e611767565b3480156106db57600080fd5b5061041e6106ea366004614b9d565b611798565b3480156106fb57600080fd5b5061070f61070a366004614be0565b611938565b60405161042b93929190615aa2565b34801561072a57600080fd5b5061052f610739366004614619565b611a49565b34801561074a57600080fd5b5061041e610759366004614619565b611a8f565b34801561076a57600080fd5b5061041e610779366004614b4e565b611aaa565b34801561078a57600080fd5b5061041e61079936600461470c565b611b8d565b3480156107aa57600080fd5b50610449611c38565b3480156107bf57600080fd5b5061041e611c4c565b3480156107d457600080fd5b5061041e611c52565b3480156107e957600080fd5b5061041e611c58565b3480156107fe57600080fd5b5061041e61080d366004614b12565b611c96565b34801561081e57600080fd5b5061041e611d16565b34801561083357600080fd5b50610449611d22565b34801561084857600080fd5b50610449611d31565b34801561085d57600080fd5b506104b8611d40565b34801561087257600080fd5b5061041e611d66565b34801561088757600080fd5b5061048b611d96565b34801561089c57600080fd5b50610449611df1565b3480156108b157600080fd5b5061041e6108c03660046146dc565b611e00565b3480156108d157600080fd5b50610449611e74565b3480156108e657600080fd5b506104b86108f53660046146dc565b611e83565b34801561090657600080fd5b5061041e610915366004614b12565b611e93565b34801561092657600080fd5b5061041e611e9e565b34801561093b57600080fd5b506104b861094a366004614aa9565b611ea4565b34801561095b57600080fd5b5061052f61096a366004614655565b611f26565b34801561097b57600080fd5b50610449611f86565b34801561099057600080fd5b5061052f61099f366004614619565b611f95565b3480156109b057600080fd5b5061041e6109bf36600461470c565b611fdb565b3480156109d057600080fd5b5061041e6109df366004614b12565b612025565b3480156109f057600080fd5b5061041e612038565b348015610a0557600080fd5b5061052f610a143660046147f1565b61203e565b348015610a2557600080fd5b5061052f610a34366004614d3d565b61220d565b348015610a4557600080fd5b5061041e610a54366004614655565b612314565b348015610a6557600080fd5b5061052f610a74366004614add565b61233f565b348015610a8557600080fd5b5061041e610a94366004614619565b6123e4565b348015610aa557600080fd5b5061052f610ab436600461474f565b6123f6565b348015610ac557600080fd5b5061041e610ad4366004614619565b6125a7565b348015610ae557600080fd5b5061041e6125c2565b348015610afa57600080fd5b5061052f610b09366004614619565b6125c8565b348015610b1a57600080fd5b5061052f610b29366004614619565b612626565b6105a3610b3c36600461493a565b612656565b348015610b4d57600080fd5b50610449612726565b348015610b6257600080fd5b5061041e612735565b60008315610d0d576001600160a01b038216610b90576017546001600160a01b031691505b600060106000846001604051602001610baa929190615617565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610c1b918a9101615814565b60206040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c6b9190810190614b30565b60016040518663ffffffff1660e01b8152600401610c8d959493929190615705565b60206040518083038186803b158015610ca557600080fd5b505afa158015610cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cdd9190810190614b30565b9150610cf182610ceb611d66565b8661273a565b9350610cff91506127b39050565b821115610d0b57600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610dbe57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d6b90309087906004016156a7565b60206040518083038186803b158015610d8357600080fd5b505afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dbb9190810190614b30565b90505b610e06670de0b6b3a7640000610dfa610dd5611c58565b610dee85610de289611a8f565b9063ffffffff6127e916565b9063ffffffff61280e16565b9063ffffffff61284816565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e925780601f10610e6757610100808354040283529160200191610e92565b820191906000526020600020905b815481529060010190602001808311610e7557829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ef3908690615814565b60405180910390a35060015b92915050565b6000610f146104f5600061288a565b90505b90565b600080610f25610f9a565b90508015610f3f57610f378184611aaa565b915050610e0a565b50919050565b60155490565b6000610f5986868686611938565b5091505081811015610f865760405162461bcd60e51b8152600401610f7d906158a4565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610fd993309361010090920490911691016156a7565b60206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f149190810190614b30565b60165460405163115dd4b160e01b81526000916110ea918691869186916001600160a01b03169063115dd4b190611064903390600401615699565b60206040518083038186803b15801561107c57600080fd5b505afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b49190810190614855565b6110e1576001600160a01b03881660009081526014602090815260408083203384529091529020546110e5565b6000195b6128c4565b949350505050565b6000806001600054146111175760405162461bcd60e51b8152600401610f7d90615a44565b6002600055611124612a97565b6111318989898988610f4b565b6001600160a01b03861661114e576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156111815760405162461bcd60e51b8152600401610f7d90615954565b8915806111965750336001600160a01b038616145b6111b25760405162461bcd60e51b8152600401610f7d90615a64565b6001600160a01b038616600090815260126020526040902054156111f5576001600160a01b0386166000908152601260205260409020548711156111f557600080fd5b60045461010090046001600160a01b0316600090815260126020526040902054156112465760045461010090046001600160a01b031660009081526012602052604090205488111561124657600080fd5b600061125387898b612b17565b9050806112725760405162461bcd60e51b8152600401610f7d90615984565b61127a614319565b611282614337565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a90526112ba612d44565b6112cb8c8260016020020151612dea565b825260208201526112ec6f4b3b4ca85a86c47a098a2240000000008d612848565b9b506112fe8d60008e8c86868c612e39565b6001600055909e909d509b505050505050505050505050565b61131f611d40565b61133b5760405162461bcd60e51b8152600401610f7d906159e4565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146113825760405162461bcd60e51b8152600401610f7d90615a44565b6002600055886113a45760405162461bcd60e51b8152600401610f7d90615a74565b6113ac612a97565b6001600160a01b038616600090815260126020526040902054156113ef576001600160a01b0386166000908152601260205260409020548711156113ef57600080fd5b3415806113fb57508634145b801561140f57508615158061140f57508915155b801561143657506001600160a01b03861615158061142c57503415155b8061143657508915155b801561145257508915806114525750336001600160a01b038616145b61146e5760405162461bcd60e51b8152600401610f7d90615914565b6001600160a01b03861661148b576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114be5760405162461bcd60e51b8152600401610f7d906158b4565b6114c6612d44565b6114ce614319565b6114d6614337565b3082526001600160a01b03878116602080850191909152908716604084015281018b905261150e8b611508600061288a565b8c61273a565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506116258c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e6001604051602001611579929190615617565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b81526004016115bd9190615814565b60206040518083038186803b1580156115d557600080fd5b505afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061160d9190810190614b30565b8b868660405180602001604052806000815250612e39565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146116915760405162461bcd60e51b8152600401610f7d90615a44565b60026000556116a08383613098565b90505b600160005592915050565b6000610f146116bb610f9a565b6131a4565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116f992919061563d565b604051602081830303815290604052805190602001209050610e068160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611743611c58565b6001600160a01b0387166000908152601160205260409020546131dc565b600a5481565b600080611774600061288a565b90506000611780610f9a565b9050808211156117935790039050610f17565b505090565b60008315610d0d5760006117ae85610ceb611d66565b925050506117ba6127b3565b8111610d0b576001600160a01b0383166117dd576017546001600160a01b031692505b6000601060008560016040516020016117f7929190615617565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061192f93600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d99161186d918c9101615814565b60206040518083038186803b15801561188557600080fd5b505afa158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118bd9190810190614b30565b60016040518663ffffffff1660e01b81526004016118df959493929190615705565b60206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610de29190810190614b30565b92505050610d0d565b600080806001600160a01b038416611959576017546001600160a01b031693505b6000611966858789612b17565b90506119728882612dea565b909450915061197f6127b3565b841115611996575060009250829150819050611a3f565b6119a6878563ffffffff6127e916565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f7077936119eb9361010090930416918a918d918d918a918d9101615747565b60206040518083038186803b158015611a0357600080fd5b505afa158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a3b9190810190614b30565b9250505b9450945094915050565b611a51611d40565b611a6d5760405162461bcd60e51b8152600401610f7d906159e4565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611abb5750828210155b15610eff57611b86701d6329f1c35ca4bfabb9f5610000000000610dfa611b7068056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3357600080fd5b505afa158015611b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b6b9190810190614b30565b613236565b610dee611b7d8888613278565b610dee896131a4565b9050610eff565b6000600160005414611bb15760405162461bcd60e51b8152600401610f7d90615a44565b60026000558115611bcc57611bc5836132aa565b9050611bd8565b611bd583613450565b90505b8015611c2c57611c2c600460019054906101000a90046001600160a01b0316858360405180604001604052806015815260200174185cdcd95d081d1c985b9cd9995c8819985a5b1959605a1b815250613607565b60016000559392505050565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611c7f57611c7b613667565b9150505b611c90611c8b8261288a565b613733565b91505090565b600080611cb561016d610dfa601c600b5461280e90919063ffffffff16565b90506000611cd268056bc75e2d631000008363ffffffff61323616565b90506000611cef68056bc75e2d63100000610dfa84610dee611767565b9050611d0d85610dfa83670de0b6b3a764000063ffffffff61280e16565b95945050505050565b6000610f146000613762565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611d576137b8565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611d8d57611d89613667565b9150505b611c908161288a565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e925780601f10610e6757610100808354040283529160200191610e92565b6018546001600160a01b031681565b6000600160005414611e245760405162461bcd60e51b8152600401610f7d90615a44565b6002600055611e3282613450565b905080156116a3576116a3600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b815250613607565b601b546001600160a01b031681565b6000610d0d3384846000196128c4565b6000610eff82613762565b60095481565b60008082604051602001611eb8919061567f565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611f05929190615663565b60408051808303601f19018152919052805160209091012054949350505050565b60165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf44890611f5890859085906004016156a7565b600060405180830381600087803b158015611f7257600080fd5b505af1158015610f86573d6000803e3d6000fd5b601a546001600160a01b031681565b611f9d611d40565b611fb95760405162461bcd60e51b8152600401610f7d906159e4565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600160005414611fff5760405162461bcd60e51b8152600401610f7d90615a44565b6002600055811561201b5761201484846137bc565b9050611c2c565b6120148484613098565b6000610eff6104f583610de2600061288a565b60075481565b612046611d40565b8061205b57506019546001600160a01b031633145b6120775760405162461bcd60e51b8152600401610f7d906159e4565b60045460609061010090046001600160a01b031660005b845181101561210157818582815181106120a457fe5b6020026020010151606001906001600160a01b031690816001600160a01b031681525050836120d6576224ea006120d9565b60005b62ffffff168582815181106120ea57fe5b602090810291909101015160e0015260010161208e565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e906121329087906004016157f5565b600060405180830381600087803b15801561214c57600080fd5b505af1158015612160573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261218891908101906147bd565b915060005b8251811015612206578281815181106121a257fe5b6020026020010151601060008784815181106121ba57fe5b602002602001015160800151876040516020016121d8929190615617565b60408051601f198184030181529181528151602092830120835290820192909252016000205560010161218d565b5050505050565b612215611d40565b8061222a57506019546001600160a01b031633145b6122465760405162461bcd60e51b8152600401610f7d906159e4565b68056bc75e2d63100000612260878963ffffffff6127e916565b111561227e5760405162461bcd60e51b8152600401610f7d90615974565b68056bc75e2d63100000612298858763ffffffff6127e916565b11156122b65760405162461bcd60e51b8152600401610f7d90615974565b68056bc75e2d6310000083111580156122d8575068056bc75e2d631000008211155b6122f45760405162461bcd60e51b8152600401610f7d906159a4565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146123695760405162461bcd60e51b8152600401610f7d90615a34565b60008260405160200161237c919061567f565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f26040516020016123c4929190615663565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b6123fe611d40565b8061241357506019546001600160a01b031633145b61242f5760405162461bcd60e51b8152600401610f7d906159e4565b82811461244e5760405162461bcd60e51b8152600401610f7d90615904565b60408051848152602080860282010190915260609084801561247a578160200160208202803883390190505b50905060005b8481101561253d57600086868381811061249657fe5b90506020020160206124ab9190810190614619565b8585848181106124b757fe5b90506020020160206124cc9190810190614837565b6040516020016124dd929190615617565b6040516020818303038152906040528051906020012060001c9050601060008281526020019081526020016000205483838151811061251857fe5b6020908102919091018101919091526000918252601090526040812055600101612480565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a9061256e9084906004016157e4565b600060405180830381600087803b15801561258857600080fd5b505af115801561259c573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b60165460405163f06a9c6b60e01b81526001600160a01b039091169063f06a9c6b906125f890849060040161568b565b600060405180830381600087803b15801561261257600080fd5b505af1158015612206573d6000803e3d6000fd5b61262e611d40565b61264a5760405162461bcd60e51b8152600401610f7d906159e4565b61265381613845565b50565b6000806001600160a01b038516156126cd5760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf4489061269a908a9089906004016156a7565b600060405180830381600087803b1580156126b457600080fd5b505af11580156126c8573d6000803e3d6000fd5b505050505b6127138c8c8c8c8c8c8c8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110f292505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b600080600061274986866138c7565b925061279661277e670de0b6b3a7640000611b6b6b0a3098c68eb9427db8000000610dfa83610dee8a8c63ffffffff61280e16565b610dfa88670de0b6b3a764000063ffffffff61280e16565b90506127a8818763ffffffff61323616565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610fd99130910161568b565b600082820183811015610d0d5760405162461bcd60e51b8152600401610f7d906158e4565b60008261281d57506000610eff565b8282028284828161282a57fe5b0414610d0d5760405162461bcd60e51b8152600401610f7d906159d4565b6000610d0d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139dd565b6000601554600014610e0a57600c54806128b4576128b16128a9610f9a565b610de26127b3565b90505b610f37818463ffffffff6127e916565b60006000198214612920576040805180820190915260028152610c4d60f21b60208201526128fb908390859063ffffffff613a1416565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166129465760405162461bcd60e51b8152600401610f7d906158c4565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b92820192909252909190612991908390879063ffffffff613a1416565b6001600160a01b038089166000908152601360205260408082208490559189168152908120549192506129ca828863ffffffff6127e916565b6001600160a01b03891660009081526013602052604081208290559091506129f0611c58565b601c549091506001600160a01b038b8116911614801590612a1f5750601c546001600160a01b038a8116911614155b15612a3c57612a308a868684613a40565b612a3c89848484613a40565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612a7f9190615814565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001612ad7929190615663565b6040516020818303038152906040528051906020012090506000815490508015612b135760405162461bcd60e51b8152600401610f7d906159e4565b5050565b808215610d0d57600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ba79190810190614637565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612be0938c9361010090910490921691016156a7565b604080518083038186803b158015612bf757600080fd5b505afa158015612c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c2f9190810190614b6d565b9150915081600014158015612c4357508015155b612c5f5760405162461bcd60e51b8152600401610f7d90615a24565b6000612c7582610dfa888663ffffffff61280e16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612cb8936101009004909116918d918891016156dd565b60206040518083038186803b158015612cd057600080fd5b505afa158015612ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d089190810190614b30565b9050868114612d2857612d2587610dfa848463ffffffff61280e16565b91505b612d38828663ffffffff6127e916565b98975050505050505050565b600f5442906001600160581b038083169116146126535760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612d94936101009004909116910161568b565b600060405180830381600087803b158015612dae57600080fd5b505af1158015612dc2573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612e0a670de0b6b3a7640000610dfa868863ffffffff61280e16565b9050612e1f81612e1a600061288a565b6138c7565b9150612e2f826224ea0083613af6565b9250509250929050565b600080612e44612a97565b612e4c6127b3565b602085015111801590612e6b575060208501516001600160a01b031615155b612e875760405162461bcd60e51b8152600401610f7d90615944565b60408501516001600160a01b0316612ead5760208501516001600160a01b031660408601525b6000612ebb8787878c613b57565b60208601516060870151919250612ed291906127e9565b60608601528815612ef2576060850151612eec908a613236565b60608601525b60008915612efe575060015b6000601060008a84604051602001612f17929190615617565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612f8f9796959493929190615822565b60408051808303818588803b158015612fa757600080fd5b505af1158015612fbb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612fe09190810190614b6d565b6080890152602088018190526130085760405162461bcd60e51b8152600401610f7d90615994565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b9161303b9160040161568b565b600060405180830381600087803b15801561305557600080fd5b505af1158015613069573d6000803e3d6000fd5b505050508660016005811061307a57fe5b6020020151608090970151969c969b50959950505050505050505050565b6000806130a483613d8c565b601c5491935091506000906001600160a01b03161561314257601c54604051636822955360e11b81526001600160a01b039091169063d0452aa6906130ef90309089906004016156a7565b60206040518083038186803b15801561310757600080fd5b505afa15801561311b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061313f9190810190614b30565b90505b6001600160a01b03851660009081526013602052604081205461316b908363ffffffff6127e916565b9050600061317f828663ffffffff6127e916565b905061318d87868887613e96565b5061319a87838387613a40565b5050505092915050565b60008115610e0a5760006131b6613667565b509050610f3783610dfa61016d610dee8568056bc75e2d6310000063ffffffff61280e16565b6000816131eb575060006110ea565b508354611d0d8161322a670de0b6b3a764000061321e88613212898963ffffffff613fb716565b9063ffffffff613ffd16565b9063ffffffff61406816565b9063ffffffff6140cc16565b6000610d0d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a14565b6000821580159061328857508115155b15610eff57611b8682610dfa8568056bc75e2d6310000063ffffffff61280e16565b601c54604051636822955360e11b815260009182916001600160a01b039091169063d0452aa6906132e190309033906004016156c2565b60206040518083038186803b1580156132f957600080fd5b505afa15801561330d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133319190810190614b30565b90508261334d61334033611a8f565b839063ffffffff6127e916565b101561336b5760405162461bcd60e51b8152600401610f7d90615924565b801561344b57828110156133e457601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec906133ad903090859033906004016157bc565b600060405180830381600087803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b5050505061344b565b601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613418903090879033906004016157bc565b600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505050505b610e06835b60008161346f5760405162461bcd60e51b8152600401610f7d906159f4565b61347833611a8f565b8211156134ac5760001982146134a05760405162461bcd60e51b8152600401610f7d906159b4565b6134a933611a8f565b91505b6134b4612d44565b60006134c3611c8b600061288a565b905060006134e3670de0b6b3a7640000610dfa868563ffffffff61280e16565b905060006134ef6127b3565b9050819350808411156135145760405162461bcd60e51b8152600401610f7d90615934565b601c546000906001600160a01b0316156135ad57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061355a90309033906004016156c2565b60206040518083038186803b15801561357257600080fd5b505afa158015613586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135aa9190810190614b30565b90505b336000908152601360205260408120546135cd908363ffffffff6127e916565b905060006135e1828963ffffffff61323616565b90506135ef33898989614112565b506135fc33838389613a40565b505050505050919050565b60405161366190859063a9059cbb60e01b9061362990879087906024016157a1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283614237565b50505050565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb0936136a9933093610100900490911691016156a7565b60c06040518083038186803b1580156136c157600080fd5b505afa1580156136d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136f99190810190614cb6565b509196509450925061372c915068056bc75e2d631000009050610dfa61371f8285613236565b859063ffffffff61280e16565b9150509091565b6015546000908061374657600e54610e06565b610e0681610dfa85670de0b6b3a764000063ffffffff61280e16565b60008082156137ab57600f54426001600160581b0390811691161461378d57613789613667565b9150505b600061379b82610de26127b3565b9050808411156137a9578093505b505b610e0683612e1a8361288a565b3390565b60006137c88383613098565b601c549091506137e49084906001600160a01b031683806128c4565b50601c546040516336305cf160e21b81526001600160a01b039091169063d8c173c49061381790869085906004016157a1565b600060405180830381600087803b15801561383157600080fd5b505af115801561319a573d6000803e3d6000fd5b6001600160a01b03811661386b5760405162461bcd60e51b8152600401610f7d906158d4565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806138df6138d985610de2610f9a565b84613278565b600554600654600954600a54600b5494955060009485949392919082881015613906578297505b8188111561397957968190039668056bc75e2d631000008290038089111561392c578098505b61394d68056bc75e2d63100000610dfa85610dee898b63ffffffff6127e916565b965061397187610de283610dfa613964878d613236565b8e9063ffffffff61280e16565b9950506139cf565b61399a85610de268056bc75e2d63100000610dfa8c8963ffffffff61280e16565b985093955085936139b1848663ffffffff6127e916565b9550868910156139c3578698506139cf565b858911156139cf578598505b505050505050505092915050565b600081836139fe5760405162461bcd60e51b8152600401610f7d9190615893565b506000838581613a0a57fe5b0495945050505050565b60008184841115613a385760405162461bcd60e51b8152600401610f7d9190615893565b505050900390565b604051600090613a769086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb69060200161563d565b60405160208183030381529060405280519060200120905060008360001415613aa25760009250613ad3565b8415613ad3576001600160a01b038616600090815260116020526040902054613ad0908390879086906131dc565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b600080613b116301e13380610dfa878763ffffffff61280e16565b90506000613b2e68056bc75e2d631000008363ffffffff61323616565b9050613b4d81610dfa8668056bc75e2d6310000063ffffffff61280e16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b16851415613bad5760405162461bcd60e51b8152600401610f7d90615a04565b3496508715613c0b57613bd185858a60405180602001604052806000815250613607565b87831115613c0657601654604080516020810190915260008152613c069187916001600160a01b03909116908b870390613607565b613c40565b601654604080518082019091526002815261323760f01b6020820152613c409187916001600160a01b03909116908690613607565b8015613d4357856001600160a01b03168b6001600160a01b0316148015613c6657508615155b8015613c725750808710155b15613d0c57856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613cb257600080fd5b505af1158015613cc6573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b6020820152613d0294508f93506001600160a01b0390911691508490613607565b8087039650613d43565b601654604080518082019091526004815263191c16b160e11b6020820152613d43918d9133916001600160a01b03169085906142f5565b8115613d7e57601654604080518082019091526002815261323960f01b6020820152613d7e91879133916001600160a01b03169086906142f5565b505050505050949350505050565b60008082613dac5760405162461bcd60e51b8152600401610f7d906159c4565b613db4612d44565b613dc1611c8b600061288a565b9050613ddf81610dfa85670de0b6b3a764000063ffffffff61280e16565b915034613e2757613e22600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b8152506142f5565b613e91565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e7757600080fd5b505af1158015613e8b573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613ebe5760405162461bcd60e51b8152600401610f7d906158c4565b6001600160a01b038516600090815260136020526040812054613ee7908663ffffffff6127e916565b6001600160a01b0387166000908152601360205260409020819055601554909150613f18908663ffffffff6127e916565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613f5a90889088908890615aa2565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613fa69190615814565b60405180910390a395945050505050565b6000818303818312801590613fcc5750838113155b80613fe15750600083128015613fe157508381135b610d0d5760405162461bcd60e51b8152600401610f7d90615a54565b60008261400c57506000610eff565b826000191480156140205750600160ff1b82145b1561403d5760405162461bcd60e51b8152600401610f7d90615a14565b8282028284828161404a57fe5b0514610d0d5760405162461bcd60e51b8152600401610f7d90615a14565b6000816140875760405162461bcd60e51b8152600401610f7d90615a84565b8160001914801561409b5750600160ff1b83145b156140b85760405162461bcd60e51b8152600401610f7d90615964565b60008284816140c357fe5b05949350505050565b60008282018183128015906140e15750838112155b806140f657506000831280156140f657508381125b610d0d5760405162461bcd60e51b8152600401610f7d906158f4565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b0387166000908152601390915291822054829161415a9190879063ffffffff613a1416565b9050600a811161417b57614174858263ffffffff6127e916565b9450600090505b6001600160a01b03861660009081526013602052604090208190556015546141a9908663ffffffff61323616565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b4644906141eb90889088908890615aa2565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613fa69190615814565b60006060846001600160a01b031684604051614253919061567f565b6000604051808303816000865af19150503d8060008114614290576040519150601f19603f3d011682016040523d82523d6000602084013e614295565b606091505b50915091508183906142ba5760405162461bcd60e51b8152600401610f7d9190615893565b5080511561220657808060200190516142d69190810190614855565b8390610f865760405162461bcd60e51b8152600401610f7d9190615893565b6040516122069086906323b872dd60e01b90613629908890889088906024016156dd565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610eff81615c11565b8051610eff81615c11565b60008083601f84011261437d57600080fd5b5081356001600160401b0381111561439457600080fd5b6020830191508360208202830111156143ac57600080fd5b9250929050565b600082601f8301126143c457600080fd5b81516143d76143d282615af1565b615acb565b915081818352602084019350602081019050838560208402820111156143fc57600080fd5b60005b8381101561319a578161441288826144bd565b84525060209283019291909101906001016143ff565b600082601f83011261443957600080fd5b81356144476143d282615af1565b915081818352602084019350602081019050838561010084028201111561446d57600080fd5b60005b8381101561319a57816144838882614558565b8452506020909201916101009190910190600101614470565b8035610eff81615c25565b8051610eff81615c25565b8035610eff81615c2e565b8051610eff81615c2e565b60008083601f8401126144da57600080fd5b5081356001600160401b038111156144f157600080fd5b6020830191508360018202830111156143ac57600080fd5b600082601f83011261451a57600080fd5b81356145286143d282615b11565b9150808252602083016020830185838301111561454457600080fd5b61454f838284615b97565b50505092915050565b6000610100828403121561456b57600080fd5b614576610100615acb565b9050600061458484846144b2565b82525060206145958484830161449c565b60208301525060406145a984828501614355565b60408301525060606145bd84828501614355565b60608301525060806145d184828501614355565b60808301525060a06145e5848285016144b2565b60a08301525060c06145f9848285016144b2565b60c08301525060e061460d848285016144b2565b60e08301525092915050565b60006020828403121561462b57600080fd5b60006110ea8484614355565b60006020828403121561464957600080fd5b60006110ea8484614360565b6000806040838503121561466857600080fd5b60006146748585614355565b925050602061468585828601614355565b9150509250929050565b6000806000606084860312156146a457600080fd5b60006146b08686614355565b93505060206146c186828701614355565b92505060406146d2868287016144b2565b9150509250925092565b600080604083850312156146ef57600080fd5b60006146fb8585614355565b9250506020614685858286016144b2565b60008060006060848603121561472157600080fd5b600061472d8686614355565b935050602061473e868287016144b2565b92505060406146d28682870161449c565b6000806000806040858703121561476557600080fd5b84356001600160401b0381111561477b57600080fd5b6147878782880161436b565b945094505060208501356001600160401b038111156147a557600080fd5b6147b18782880161436b565b95989497509550505050565b6000602082840312156147cf57600080fd5b81516001600160401b038111156147e557600080fd5b6110ea848285016143b3565b6000806040838503121561480457600080fd5b82356001600160401b0381111561481a57600080fd5b61482685828601614428565b92505060206146858582860161449c565b60006020828403121561484957600080fd5b60006110ea848461449c565b60006020828403121561486757600080fd5b60006110ea84846144a7565b600080600080600080600080610100898b03121561489057600080fd5b600061489c8b8b6144b2565b98505060206148ad8b828c016144b2565b97505060406148be8b828c016144b2565b96505060606148cf8b828c016144b2565b95505060806148e08b828c01614355565b94505060a06148f18b828c01614355565b93505060c06149028b828c01614355565b92505060e08901356001600160401b0381111561491e57600080fd5b61492a8b828c01614509565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561495a57600080fd5b60006149668d8d6144b2565b9a505060206149778d828e016144b2565b99505060406149888d828e016144b2565b98505060606149998d828e016144b2565b97505060806149aa8d828e01614355565b96505060a06149bb8d828e01614355565b95505060c06149cc8d828e016144b2565b94505060e06149dd8d828e01614355565b9350506101008b01356001600160401b038111156149fa57600080fd5b614a068d828e016144c8565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b031215614a3757600080fd5b6000614a438b8b6144b2565b9850506020614a548b828c016144b2565b9750506040614a658b828c016144b2565b9650506060614a768b828c016144b2565b9550506080614a878b828c01614355565b94505060a0614a988b828c01614355565b93505060c06149028b828c016144b2565b600060208284031215614abb57600080fd5b81356001600160401b03811115614ad157600080fd5b6110ea84828501614509565b60008060408385031215614af057600080fd5b82356001600160401b03811115614b0657600080fd5b61482685828601614509565b600060208284031215614b2457600080fd5b60006110ea84846144b2565b600060208284031215614b4257600080fd5b60006110ea84846144bd565b60008060408385031215614b6157600080fd5b60006146fb85856144b2565b60008060408385031215614b8057600080fd5b6000614b8c85856144bd565b9250506020614685858286016144bd565b600080600060608486031215614bb257600080fd5b6000614bbe86866144b2565b9350506020614bcf868287016144b2565b92505060406146d286828701614355565b60008060008060808587031215614bf657600080fd5b6000614c0287876144b2565b9450506020614c13878288016144b2565b9350506040614c24878288016144b2565b9250506060614c3587828801614355565b91505092959194509250565b600080600080600060a08688031215614c5957600080fd5b6000614c6588886144b2565b9550506020614c76888289016144b2565b9450506040614c87888289016144b2565b9350506060614c9888828901614355565b9250506080614ca9888289016144b2565b9150509295509295909350565b60008060008060008060c08789031215614ccf57600080fd5b6000614cdb89896144bd565b9650506020614cec89828a016144bd565b9550506040614cfd89828a016144bd565b9450506060614d0e89828a016144bd565b9350506080614d1f89828a016144bd565b92505060a0614d3089828a016144bd565b9150509295509295509295565b600080600080600080600060e0888a031215614d5857600080fd5b6000614d648a8a6144b2565b9750506020614d758a828b016144b2565b9650506040614d868a828b016144b2565b9550506060614d978a828b016144b2565b9450506080614da88a828b016144b2565b93505060a0614db98a828b016144b2565b92505060c0614dca8a828b016144b2565b91505092959891949750929550565b6000614de58383614e1d565b505060200190565b6000614de58383614f90565b6000614e058383615577565b50506101000190565b614e1781615b86565b82525050565b614e1781615b57565b614e17614e3282615b57565b615bcf565b614e4081615b3e565b614e4a8184610e0a565b9250614e5582610f17565b8060005b83811015610f86578151614e6d8782614dd9565b9650614e7883615b38565b925050600101614e59565b6000614e8e82615b44565b614e988185615b4e565b9350614ea383615b38565b8060005b83811015614ed1578151614ebb8882614ded565b9750614ec683615b38565b925050600101614ea7565b509495945050505050565b6000614ee782615b44565b614ef18185615b4e565b9350614efc83615b38565b8060005b83811015614ed1578151614f148882614df9565b9750614f1f83615b38565b925050600101614f00565b614f3381615b48565b614f3d8184610e0a565b9250614f4882610f17565b8060005b83811015610f86578151614f608782614ded565b9650614f6b83615b38565b925050600101614f4c565b614e1781615b62565b614e17614f8b82615b62565b615bda565b614e1781610f17565b614e17614fa582610f17565b610f17565b614e17614fa582615b67565b6000614fc182615b44565b614fcb8185615b4e565b9350614fdb818560208601615ba3565b614fe481615bfb565b9093019392505050565b6000614ff982615b44565b6150038185610e0a565b9350615013818560208601615ba3565b9290920192915050565b600061502a600c83615b4e565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000615052600283615b4e565b61031360f41b815260200192915050565b6000615070600283615b4e565b61313560f01b815260200192915050565b600061508e602683615b4e565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006150d6601b83615b4e565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061510f602183615b4e565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615152600e83615b4e565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b600061517c600183615b4e565b603760f81b815260200192915050565b6000615199601283615b4e565b716e6f7420656e6f7567682062616c616e636560701b815260200192915050565b60006151c7600283615b4e565b61333760f01b815260200192915050565b60006151e5600283615b4e565b610c8d60f21b815260200192915050565b6000615203600283615b4e565b61313160f01b815260200192915050565b6000615221602183615b4e565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615264601583615b4e565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b6000615295600283615b4e565b61189960f11b815260200192915050565b60006152b3600283615b4e565b61323560f01b815260200192915050565b60006152d1600f83615b4e565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b60006152fc600283615b4e565b61199960f11b815260200192915050565b600061531a600283615b4e565b61313760f01b815260200192915050565b6000615338602183615b4e565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061537b600c83615b4e565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006153a3600283615b4e565b61313960f01b815260200192915050565b60006153c1600283615b4e565b61191b60f11b815260200192915050565b60006153df602783615b4e565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000615428601d83615b4e565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b6000615461600a83615b4e565b6937b7363ca830bab9b2b960b11b815260200192915050565b6000615487600c83615b4e565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b60006154af602483615b4e565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b60006154f5601883615b4e565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b600061552e600183615b4e565b601b60f91b815260200192915050565b600061554b602083615b4e565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b80516101008301906155898482614f90565b50602082015161559c6020850182614f76565b5060408201516155af6040850182614e1d565b5060608201516155c26060850182614e1d565b5060808201516155d56080850182614e1d565b5060a08201516155e860a0850182614f90565b5060c08201516155fb60c0850182614f90565b5060e082015161366160e0850182614f90565b614e1781615b80565b60006156238285614e26565b6014820191506156338284614f7f565b5060010192915050565b60006156498285614e26565b6014820191506156598284614f99565b5060200192915050565b600061566f8285614faa565b6004820191506156598284614f99565b6000610d0d8284614fee565b60208101610eff8284614e1d565b60208101610eff8284614e0e565b604081016156b58285614e1d565b610d0d6020830184614e1d565b604081016156d08285614e1d565b610d0d6020830184614e0e565b606081016156eb8286614e1d565b6156f86020830185614e1d565b6110ea6040830184614f90565b60a081016157138288614e1d565b6157206020830187614e1d565b61572d6040830186614f90565b61573a6060830185614f90565b613b4d6080830184614f76565b60c081016157558289614e1d565b6157626020830188614e1d565b61576f6040830187614f90565b61577c6060830186614f90565b6157896080830185614f90565b61579660a0830184614f90565b979650505050505050565b604081016157af8285614e1d565b610d0d6020830184614f90565b606081016157ca8286614e1d565b6157d76020830185614f90565b6110ea6040830184614e0e565b60208082528101610d0d8184614e83565b60208082528101610d0d8184614edc565b60208101610eff8284614f76565b60208101610eff8284614f90565b6101c08101615831828a614f90565b61583e6020830189614f90565b61584b6040830188614f76565b6158586060830187614f90565b6158656080830186614e37565b615873610100830185614f2a565b8181036101a08301526158868184614fb6565b9998505050505050505050565b60208082528101610d0d8184614fb6565b60208082528101610eff8161501d565b60208082528101610eff81615045565b60208082528101610eff81615063565b60208082528101610eff81615081565b60208082528101610eff816150c9565b60208082528101610eff81615102565b60208082528101610eff81615145565b60208082528101610eff8161516f565b60208082528101610eff8161518c565b60208082528101610eff816151ba565b60208082528101610eff816151d8565b60208082528101610eff816151f6565b60208082528101610eff81615214565b60208082528101610eff81615257565b60208082528101610eff81615288565b60208082528101610eff816152a6565b60208082528101610eff816152c4565b60208082528101610eff816152ef565b60208082528101610eff8161530d565b60208082528101610eff8161532b565b60208082528101610eff8161536e565b60208082528101610eff81615396565b60208082528101610eff816153b4565b60208082528101610eff816153d2565b60208082528101610eff8161541b565b60208082528101610eff81615454565b60208082528101610eff8161547a565b60208082528101610eff816154a2565b60208082528101610eff816154e8565b60208082528101610eff81615521565b60208082528101610eff8161553e565b604081016157af8285614f90565b60608101615ab08286614f90565b6156f86020830185614f90565b60208101610eff828461560e565b6040518181016001600160401b0381118282101715615ae957600080fd5b604052919050565b60006001600160401b03821115615b0757600080fd5b5060209081020190565b60006001600160401b03821115615b2757600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610eff82615b74565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610eff826000610eff82615b57565b82818337506000910152565b60005b83811015615bbe578181015183820152602001615ba6565b838111156136615750506000910152565b6000610eff82615be5565b6000610eff82615bf0565b6000610eff82615c0b565b6000610eff82615c05565b601f01601f191690565b60f81b90565b60601b90565b615c1a81615b57565b811461265357600080fd5b615c1a81615b62565b615c1a81610f1756fea365627a7a72315820c73210bfed5f9dc340d9bb6d509064e47607585d837100b09c7acb22300cc4966c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
