UNPKG

test-contracts-sovryn

Version:

Smart contracts for the Sovryn protocol and external integrations.

1,681 lines 130 kB
{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanTokenLogicLM",
  "sourceName": "contracts/connectors/loantoken/LoanTokenLogicLM.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": "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": [
        {
          "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": "0x6080604052600160009081556200001e6001600160e01b036200007216565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076565b3390565b615b6680620000866000396000f3fe6080604052600436106103d95760003560e01c80637e37c08c116101fd578063ca37e66611610118578063e3cded61116100ab578063ef2b0b391161007a578063ef2b0b3914610aa3578063f2fde38b14610ab8578063f6b69f9914610ad8578063f851a44014610aeb578063ffa1ad7414610b00576103d9565b8063e3cded6114610a23578063e41b07e314610a43578063e697d2ee14610a63578063eebc508114610a83576103d9565b8063d759dbeb116100e7578063d759dbeb146109ae578063d8f06c83146109c3578063d97206a4146109e3578063dd62ed3e14610a03576103d9565b8063ca37e66614610939578063cb926cb31461094e578063d1a1beb41461096e578063d65a50211461098e576103d9565b806395d89b4111610190578063a9059cbb1161015f578063a9059cbb146108c4578063b9fe1a8f146108e4578063ba0e43bf14610904578063be19421714610919576103d9565b806395d89b41146108655780639bda3a981461087a5780639dc29fac1461088f5780639fd0506d146108af576103d9565b80638da5cb5b116101cc5780638da5cb5b146108115780638ee6c4e6146108265780638f32d59b1461083b5780638fb807c514610850576103d9565b80637e37c08c146107b25780637ff9b596146107c7578063829b38f4146107dc5780638325a1c0146107fc576103d9565b80632f6b600d116102f8578063612ef80b1161028b57806370a082311161025a57806370a08231146107285780637288b3441461074857806376fd4fdf14610768578063797bf385146107885780637b7933b41461079d576103d9565b8063612ef80b146106a4578063631a3ef8146106b95780636b40cd40146106d9578063704b6c0214610708576103d9565b806340c10f19116102c757806340c10f191461063a57806344a4a0031461065a57806354198ce91461066f57806356e07d701461068f576103d9565b80632f6b600d146105ce578063313ce567146105e35780633291c11a14610605578063330691ac14610625576103d9565b806318498b1d1161037057806323b872dd1161033f57806323b872dd1461055a57806328a02f191461057a5780632d88af4a1461059b5780632ea295fa146105bb576103d9565b806318498b1d146104f95780631d0806ae1461051b5780631f68f20a1461053057806320f6d07c14610545576103d9565b8063095ea7b3116103ac578063095ea7b31461048257806309ec6b6b146104af57806312416898146104c457806318160ddd146104e4576103d9565b806304797930146103e857806306947a3a1461041e57806306b3efd61461044057806306fdde0314610460575b3480156103e557600080fd5b50005b3480156103f457600080fd5b50610408610403366004614a89565b610b15565b6040516104159190615700565b60405180910390f35b34801561042a57600080fd5b50610433610cbe565b6040516104159190615577565b34801561044c57600080fd5b5061040861045b366004614505565b610ccd565b34801561046c57600080fd5b50610475610db9565b604051610415919061577f565b34801561048e57600080fd5b506104a261049d3660046145c8565b610e44565b60405161041591906156f2565b3480156104bb57600080fd5b50610408610eaf565b3480156104d057600080fd5b506104086104df3660046149fe565b610ec4565b3480156104f057600080fd5b50610408610eef565b34801561050557600080fd5b50610519610514366004614b2d565b610ef5565b005b34801561052757600080fd5b50610408610f38565b34801561053c57600080fd5b50610408610f3e565b34801561055157600080fd5b50610408610f44565b34801561056657600080fd5b506104a261057536600461457b565b610fd3565b61058d610588366004614906565b61109c565b604051610415929190615980565b3480156105a757600080fd5b506105196105b6366004614505565b6112c1565b61058d6105c936600461475f565b611307565b3480156105da57600080fd5b506104336115e7565b3480156105ef57600080fd5b506105f86115f6565b60405161041591906159a9565b34801561061157600080fd5b506104086106203660046149fe565b6115ff565b34801561063157600080fd5b50610408611611565b34801561064657600080fd5b506104086106553660046145c8565b611617565b34801561066657600080fd5b50610408611658565b34801561067b57600080fd5b5061040861068a366004614505565b61166a565b34801561069b57600080fd5b5061040861170b565b3480156106b057600080fd5b50610408611711565b3480156106c557600080fd5b506104086106d4366004614a89565b611742565b3480156106e557600080fd5b506106f96106f4366004614acc565b6118e2565b6040516104159392919061598e565b34801561071457600080fd5b50610519610723366004614505565b6119f3565b34801561073457600080fd5b50610408610743366004614505565b611a39565b34801561075457600080fd5b50610408610763366004614a3a565b611a54565b34801561077457600080fd5b506104086107833660046145f8565b611b37565b34801561079457600080fd5b50610433611be2565b3480156107a957600080fd5b50610408611bf6565b3480156107be57600080fd5b50610408611bfc565b3480156107d357600080fd5b50610408611c02565b3480156107e857600080fd5b506104086107f73660046149fe565b611c40565b34801561080857600080fd5b50610408611cc0565b34801561081d57600080fd5b50610433611ccc565b34801561083257600080fd5b50610433611cdb565b34801561084757600080fd5b506104a2611cea565b34801561085c57600080fd5b50610408611d10565b34801561087157600080fd5b50610475611d40565b34801561088657600080fd5b50610433611d9b565b34801561089b57600080fd5b506104086108aa3660046145c8565b611daa565b3480156108bb57600080fd5b50610433611e1e565b3480156108d057600080fd5b506104a26108df3660046145c8565b611e2d565b3480156108f057600080fd5b506104086108ff3660046149fe565b611e3d565b34801561091057600080fd5b50610408611e48565b34801561092557600080fd5b506104a2610934366004614995565b611e4e565b34801561094557600080fd5b50610433611ed0565b34801561095a57600080fd5b50610519610969366004614505565b611edf565b34801561097a57600080fd5b506104086109893660046145f8565b611f25565b34801561099a57600080fd5b506104086109a93660046149fe565b611f6f565b3480156109ba57600080fd5b50610408611f82565b3480156109cf57600080fd5b506105196109de3660046146dd565b611f88565b3480156109ef57600080fd5b506105196109fe366004614c29565b612157565b348015610a0f57600080fd5b50610408610a1e366004614541565b61225e565b348015610a2f57600080fd5b50610519610a3e3660046149c9565b612289565b348015610a4f57600080fd5b50610408610a5e366004614505565b61232e565b348015610a6f57600080fd5b50610519610a7e36600461463b565b612340565b348015610a8f57600080fd5b50610408610a9e366004614505565b6124f1565b348015610aaf57600080fd5b5061040861250c565b348015610ac457600080fd5b50610519610ad3366004614505565b612512565b61058d610ae6366004614826565b612542565b348015610af757600080fd5b50610433612612565b348015610b0c57600080fd5b50610408612621565b60008315610cb7576001600160a01b038216610b3a576017546001600160a01b031691505b600060106000846001604051602001610b54929190615503565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610bc5918a9101615700565b60206040518083038186803b158015610bdd57600080fd5b505afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c159190810190614a1c565b60016040518663ffffffff1660e01b8152600401610c379594939291906155f1565b60206040518083038186803b158015610c4f57600080fd5b505afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c879190810190614a1c565b9150610c9b82610c95611d10565b86612626565b9350610ca9915061269f9050565b821115610cb557600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610d6857601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d159030908790600401615593565b60206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d659190810190614a1c565b90505b610db0670de0b6b3a7640000610da4610d7f611c02565b610d9885610d8c89611a39565b9063ffffffff6126d516565b9063ffffffff6126fa16565b9063ffffffff61273416565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e3c5780601f10610e1157610100808354040283529160200191610e3c565b820191906000526020600020905b815481529060010190602001808311610e1f57829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e9d908690615700565b60405180910390a35060015b92915050565b6000610ebe6104df6000612776565b90505b90565b600080610ecf610f44565b90508015610ee957610ee18184611a54565b915050610db4565b50919050565b60155490565b6000610f03868686866118e2565b5091505081811015610f305760405162461bcd60e51b8152600401610f2790615790565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610f839330936101009092049091169101615593565b60206040518083038186803b158015610f9b57600080fd5b505afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ebe9190810190614a1c565b60165460405163115dd4b160e01b8152600091611094918691869186916001600160a01b03169063115dd4b19061100e903390600401615585565b60206040518083038186803b15801561102657600080fd5b505afa15801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061105e9190810190614741565b61108b576001600160a01b038816600090815260146020908152604080832033845290915290205461108f565b6000195b6127b0565b949350505050565b6000806001600054146110c15760405162461bcd60e51b8152600401610f2790615930565b60026000556110ce612983565b6110db8989898988610ef5565b6001600160a01b0386166110f8576017546001600160a01b031695505b6004546001600160a01b0387811661010090920416141561112b5760405162461bcd60e51b8152600401610f2790615840565b8915806111405750336001600160a01b038616145b61115c5760405162461bcd60e51b8152600401610f2790615950565b6001600160a01b0386166000908152601260205260409020541561119f576001600160a01b03861660009081526012602052604090205487111561119f57600080fd5b60045461010090046001600160a01b0316600090815260126020526040902054156111f05760045461010090046001600160a01b03166000908152601260205260409020548811156111f057600080fd5b60006111fd87898b612a03565b90508061121c5760405162461bcd60e51b8152600401610f2790615870565b611224614205565b61122c614223565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a9052611264612c30565b6112758c8260016020020151612cd6565b825260208201526112966f4b3b4ca85a86c47a098a2240000000008d612734565b9b506112a88d60008e8c86868c612d25565b6001600055909e909d509b505050505050505050505050565b6112c9611cea565b6112e55760405162461bcd60e51b8152600401610f27906158d0565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008060016000541461132c5760405162461bcd60e51b8152600401610f2790615930565b60026000558861134e5760405162461bcd60e51b8152600401610f2790615960565b611356612983565b6001600160a01b03861660009081526012602052604090205415611399576001600160a01b03861660009081526012602052604090205487111561139957600080fd5b3415806113a557508634145b80156113b95750861515806113b957508915155b80156113e057506001600160a01b0386161515806113d657503415155b806113e057508915155b80156113fc57508915806113fc5750336001600160a01b038616145b6114185760405162461bcd60e51b8152600401610f2790615800565b6001600160a01b038616611435576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114685760405162461bcd60e51b8152600401610f27906157a0565b611470612c30565b611478614205565b611480614223565b3082526001600160a01b03878116602080850191909152908716604084015281018b90526114b88b6114b26000612776565b8c612626565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506115cf8c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e6001604051602001611523929190615503565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b81526004016115679190615700565b60206040518083038186803b15801561157f57600080fd5b505afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115b79190810190614a1c565b8b868660405180602001604052806000815250612d25565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b600060016000541461163b5760405162461bcd60e51b8152600401610f2790615930565b600260005561164a8383612f84565b90505b600160005592915050565b6000610ebe611665610f44565b613090565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116a3929190615529565b604051602081830303815290604052805190602001209050610db08160136000866001600160a01b03166001600160a01b03168152602001908152602001600020546116ed611c02565b6001600160a01b0387166000908152601160205260409020546130c8565b600a5481565b60008061171e6000612776565b9050600061172a610f44565b90508082111561173d5790039050610ec1565b505090565b60008315610cb757600061175885610c95611d10565b9250505061176461269f565b8111610cb5576001600160a01b038316611787576017546001600160a01b031692505b6000601060008560016040516020016117a1929190615503565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506118d993600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d991611817918c9101615700565b60206040518083038186803b15801561182f57600080fd5b505afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118679190810190614a1c565b60016040518663ffffffff1660e01b81526004016118899594939291906155f1565b60206040518083038186803b1580156118a157600080fd5b505afa1580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d8c9190810190614a1c565b92505050610cb7565b600080806001600160a01b038416611903576017546001600160a01b031693505b6000611910858789612a03565b905061191c8882612cd6565b909450915061192961269f565b8411156119405750600092508291508190506119e9565b611950878563ffffffff6126d516565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f7077936119959361010090930416918a918d918d918a918d9101615633565b60206040518083038186803b1580156119ad57600080fd5b505afa1580156119c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119e59190810190614a1c565b9250505b9450945094915050565b6119fb611cea565b611a175760405162461bcd60e51b8152600401610f27906158d0565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611a655750828210155b15610ea957611b30701d6329f1c35ca4bfabb9f5610000000000610da4611b1a68056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611add57600080fd5b505afa158015611af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b159190810190614a1c565b613122565b610d98611b278888613164565b610d9889613090565b9050610ea9565b6000600160005414611b5b5760405162461bcd60e51b8152600401610f2790615930565b60026000558115611b7657611b6f83613196565b9050611b82565b611b7f8361333c565b90505b8015611bd657611bd6600460019054906101000a90046001600160a01b0316858360405180604001604052806015815260200174185cdcd95d081d1c985b9cd9995c8819985a5b1959605a1b8152506134f3565b60016000559392505050565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611c2957611c25613553565b9150505b611c3a611c3582612776565b61361f565b91505090565b600080611c5f61016d610da4601c600b546126fa90919063ffffffff16565b90506000611c7c68056bc75e2d631000008363ffffffff61312216565b90506000611c9968056bc75e2d63100000610da484610d98611711565b9050611cb785610da483670de0b6b3a764000063ffffffff6126fa16565b95945050505050565b6000610ebe600061364e565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611d016136a4565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611d3757611d33613553565b9150505b611c3a81612776565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e3c5780601f10610e1157610100808354040283529160200191610e3c565b6018546001600160a01b031681565b6000600160005414611dce5760405162461bcd60e51b8152600401610f2790615930565b6002600055611ddc8261333c565b9050801561164d5761164d600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b8152506134f3565b601b546001600160a01b031681565b6000610cb73384846000196127b0565b6000610ea98261364e565b60095481565b60008082604051602001611e62919061556b565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611eaf92919061554f565b60408051808303601f19018152919052805160209091012054949350505050565b601a546001600160a01b031681565b611ee7611cea565b611f035760405162461bcd60e51b8152600401610f27906158d0565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600160005414611f495760405162461bcd60e51b8152600401610f2790615930565b60026000558115611f6557611f5e84846136a8565b9050611bd6565b611f5e8484612f84565b6000610ea96104df83610d8c6000612776565b60075481565b611f90611cea565b80611fa557506019546001600160a01b031633145b611fc15760405162461bcd60e51b8152600401610f27906158d0565b60045460609061010090046001600160a01b031660005b845181101561204b5781858281518110611fee57fe5b6020026020010151606001906001600160a01b031690816001600160a01b03168152505083612020576224ea00612023565b60005b62ffffff1685828151811061203457fe5b602090810291909101015160e00152600101611fd8565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e9061207c9087906004016156e1565b600060405180830381600087803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d291908101906146a9565b915060005b8251811015612150578281815181106120ec57fe5b60200260200101516010600087848151811061210457fe5b60200260200101516080015187604051602001612122929190615503565b60408051601f19818403018152918152815160209283012083529082019290925201600020556001016120d7565b5050505050565b61215f611cea565b8061217457506019546001600160a01b031633145b6121905760405162461bcd60e51b8152600401610f27906158d0565b68056bc75e2d631000006121aa878963ffffffff6126d516565b11156121c85760405162461bcd60e51b8152600401610f2790615860565b68056bc75e2d631000006121e2858763ffffffff6126d516565b11156122005760405162461bcd60e51b8152600401610f2790615860565b68056bc75e2d631000008311158015612222575068056bc75e2d631000008211155b61223e5760405162461bcd60e51b8152600401610f2790615890565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146122b35760405162461bcd60e51b8152600401610f2790615920565b6000826040516020016122c6919061556b565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f260405160200161230e92919061554f565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b612348611cea565b8061235d57506019546001600160a01b031633145b6123795760405162461bcd60e51b8152600401610f27906158d0565b8281146123985760405162461bcd60e51b8152600401610f27906157f0565b6040805184815260208086028201019091526060908480156123c4578160200160208202803883390190505b50905060005b848110156124875760008686838181106123e057fe5b90506020020160206123f59190810190614505565b85858481811061240157fe5b90506020020160206124169190810190614723565b604051602001612427929190615503565b6040516020818303038152906040528051906020012060001c9050601060008281526020019081526020016000205483838151811061246257fe5b60209081029190910181019190915260009182526010905260408120556001016123ca565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a906124b89084906004016156d0565b600060405180830381600087803b1580156124d257600080fd5b505af11580156124e6573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b61251a611cea565b6125365760405162461bcd60e51b8152600401610f27906158d0565b61253f81613731565b50565b6000806001600160a01b038516156125b95760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf44890612586908a908990600401615593565b600060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050505b6125ff8c8c8c8c8c8c8c8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109c92505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b600080600061263586866137b3565b925061268261266a670de0b6b3a7640000611b156b0a3098c68eb9427db8000000610da483610d988a8c63ffffffff6126fa16565b610da488670de0b6b3a764000063ffffffff6126fa16565b9050612694818763ffffffff61312216565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610f8391309101615577565b600082820183811015610cb75760405162461bcd60e51b8152600401610f27906157d0565b60008261270957506000610ea9565b8282028284828161271657fe5b0414610cb75760405162461bcd60e51b8152600401610f27906158c0565b6000610cb783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138c9565b6000601554600014610db457600c54806127a05761279d612795610f44565b610d8c61269f565b90505b610ee1818463ffffffff6126d516565b6000600019821461280c576040805180820190915260028152610c4d60f21b60208201526127e7908390859063ffffffff61390016565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166128325760405162461bcd60e51b8152600401610f27906157b0565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b9282019290925290919061287d908390879063ffffffff61390016565b6001600160a01b038089166000908152601360205260408082208490559189168152908120549192506128b6828863ffffffff6126d516565b6001600160a01b03891660009081526013602052604081208290559091506128dc611c02565b601c549091506001600160a01b038b811691161480159061290b5750601c546001600160a01b038a8116911614155b156129285761291c8a86868461392c565b6129288984848461392c565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161296b9190615700565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f26040516020016129c392919061554f565b60405160208183030381529060405280519060200120905060008154905080156129ff5760405162461bcd60e51b8152600401610f27906158d0565b5050565b808215610cb757600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a5b57600080fd5b505afa158015612a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a939190810190614523565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612acc938c936101009091049092169101615593565b604080518083038186803b158015612ae357600080fd5b505afa158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b1b9190810190614a59565b9150915081600014158015612b2f57508015155b612b4b5760405162461bcd60e51b8152600401610f2790615910565b6000612b6182610da4888663ffffffff6126fa16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612ba4936101009004909116918d918891016155c9565b60206040518083038186803b158015612bbc57600080fd5b505afa158015612bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bf49190810190614a1c565b9050868114612c1457612c1187610da4848463ffffffff6126fa16565b91505b612c24828663ffffffff6126d516565b98975050505050505050565b600f5442906001600160581b0380831691161461253f5760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612c809361010090049091169101615577565b600060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612cf6670de0b6b3a7640000610da4868863ffffffff6126fa16565b9050612d0b81612d066000612776565b6137b3565b9150612d1b826224ea00836139e2565b9250509250929050565b600080612d30612983565b612d3861269f565b602085015111801590612d57575060208501516001600160a01b031615155b612d735760405162461bcd60e51b8152600401610f2790615830565b60408501516001600160a01b0316612d995760208501516001600160a01b031660408601525b6000612da78787878c613a43565b60208601516060870151919250612dbe91906126d5565b60608601528815612dde576060850151612dd8908a613122565b60608601525b60008915612dea575060015b6000601060008a84604051602001612e03929190615503565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612e7b979695949392919061570e565b60408051808303818588803b158015612e9357600080fd5b505af1158015612ea7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612ecc9190810190614a59565b608089015260208801819052612ef45760405162461bcd60e51b8152600401610f2790615880565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b91612f2791600401615577565b600060405180830381600087803b158015612f4157600080fd5b505af1158015612f55573d6000803e3d6000fd5b5050505086600160058110612f6657fe5b6020020151608090970151969c969b50959950505050505050505050565b600080612f9083613c78565b601c5491935091506000906001600160a01b03161561302e57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690612fdb9030908990600401615593565b60206040518083038186803b158015612ff357600080fd5b505afa158015613007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061302b9190810190614a1c565b90505b6001600160a01b038516600090815260136020526040812054613057908363ffffffff6126d516565b9050600061306b828663ffffffff6126d516565b905061307987868887613d82565b506130868783838761392c565b5050505092915050565b60008115610db45760006130a2613553565b509050610ee183610da461016d610d988568056bc75e2d6310000063ffffffff6126fa16565b6000816130d757506000611094565b508354611cb781613116670de0b6b3a764000061310a886130fe898963ffffffff613ea316565b9063ffffffff613ee916565b9063ffffffff613f5416565b9063ffffffff613fb816565b6000610cb783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613900565b6000821580159061317457508115155b15610ea957611b3082610da48568056bc75e2d6310000063ffffffff6126fa16565b601c54604051636822955360e11b815260009182916001600160a01b039091169063d0452aa6906131cd90309033906004016155ae565b60206040518083038186803b1580156131e557600080fd5b505afa1580156131f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061321d9190810190614a1c565b90508261323961322c33611a39565b839063ffffffff6126d516565b10156132575760405162461bcd60e51b8152600401610f2790615810565b801561333757828110156132d057601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613299903090859033906004016156a8565b600060405180830381600087803b1580156132b357600080fd5b505af11580156132c7573d6000803e3d6000fd5b50505050613337565b601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613304903090879033906004016156a8565b600060405180830381600087803b15801561331e57600080fd5b505af1158015613332573d6000803e3d6000fd5b505050505b610db0835b60008161335b5760405162461bcd60e51b8152600401610f27906158e0565b61336433611a39565b82111561339857600019821461338c5760405162461bcd60e51b8152600401610f27906158a0565b61339533611a39565b91505b6133a0612c30565b60006133af611c356000612776565b905060006133cf670de0b6b3a7640000610da4868563ffffffff6126fa16565b905060006133db61269f565b9050819350808411156134005760405162461bcd60e51b8152600401610f2790615820565b601c546000906001600160a01b03161561349957601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061344690309033906004016155ae565b60206040518083038186803b15801561345e57600080fd5b505afa158015613472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134969190810190614a1c565b90505b336000908152601360205260408120546134b9908363ffffffff6126d516565b905060006134cd828963ffffffff61312216565b90506134db33898989613ffe565b506134e83383838961392c565b505050505050919050565b60405161354d90859063a9059cbb60e01b90613515908790879060240161568d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283614123565b50505050565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb09361359593309361010090049091169101615593565b60c06040518083038186803b1580156135ad57600080fd5b505afa1580156135c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135e59190810190614ba2565b5091965094509250613618915068056bc75e2d631000009050610da461360b8285613122565b859063ffffffff6126fa16565b9150509091565b6015546000908061363257600e54610db0565b610db081610da485670de0b6b3a764000063ffffffff6126fa16565b600080821561369757600f54426001600160581b0390811691161461367957613675613553565b9150505b600061368782610d8c61269f565b905080841115613695578093505b505b610db083612d0683612776565b3390565b60006136b48383612f84565b601c549091506136d09084906001600160a01b031683806127b0565b50601c546040516336305cf160e21b81526001600160a01b039091169063d8c173c490613703908690859060040161568d565b600060405180830381600087803b15801561371d57600080fd5b505af1158015613086573d6000803e3d6000fd5b6001600160a01b0381166137575760405162461bcd60e51b8152600401610f27906157c0565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806137cb6137c585610d8c610f44565b84613164565b600554600654600954600a54600b54949550600094859493929190828810156137f2578297505b8188111561386557968190039668056bc75e2d6310000082900380891115613818578098505b61383968056bc75e2d63100000610da485610d98898b63ffffffff6126d516565b965061385d87610d8c83610da4613850878d613122565b8e9063ffffffff6126fa16565b9950506138bb565b61388685610d8c68056bc75e2d63100000610da48c8963ffffffff6126fa16565b9850939550859361389d848663ffffffff6126d516565b9550868910156138af578698506138bb565b858911156138bb578598505b505050505050505092915050565b600081836138ea5760405162461bcd60e51b8152600401610f27919061577f565b5060008385816138f657fe5b0495945050505050565b600081848411156139245760405162461bcd60e51b8152600401610f27919061577f565b505050900390565b6040516000906139629086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb690602001615529565b6040516020818303038152906040528051906020012090506000836000141561398e57600092506139bf565b84156139bf576001600160a01b0386166000908152601160205260409020546139bc908390879086906130c8565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b6000806139fd6301e13380610da4878763ffffffff6126fa16565b90506000613a1a68056bc75e2d631000008363ffffffff61312216565b9050613a3981610da48668056bc75e2d6310000063ffffffff6126fa16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b16851415613a995760405162461bcd60e51b8152600401610f27906158f0565b3496508715613af757613abd85858a604051806020016040528060008152506134f3565b87831115613af257601654604080516020810190915260008152613af29187916001600160a01b03909116908b8703906134f3565b613b2c565b601654604080518082019091526002815261323760f01b6020820152613b2c9187916001600160a01b039091169086906134f3565b8015613c2f57856001600160a01b03168b6001600160a01b0316148015613b5257508615155b8015613b5e5750808710155b15613bf857856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b9e57600080fd5b505af1158015613bb2573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b6020820152613bee94508f93506001600160a01b03909116915084906134f3565b8087039650613c2f565b601654604080518082019091526004815263191c16b160e11b6020820152613c2f918d9133916001600160a01b03169085906141e1565b8115613c6a57601654604080518082019091526002815261323960f01b6020820152613c6a91879133916001600160a01b03169086906141e1565b505050505050949350505050565b60008082613c985760405162461bcd60e51b8152600401610f27906158b0565b613ca0612c30565b613cad611c356000612776565b9050613ccb81610da485670de0b6b3a764000063ffffffff6126fa16565b915034613d1357613d0e600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b8152506141e1565b613d7d565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613d6357600080fd5b505af1158015613d77573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613daa5760405162461bcd60e51b8152600401610f27906157b0565b6001600160a01b038516600090815260136020526040812054613dd3908663ffffffff6126d516565b6001600160a01b0387166000908152601360205260409020819055601554909150613e04908663ffffffff6126d516565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613e469088908890889061598e565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613e929190615700565b60405180910390a395945050505050565b6000818303818312801590613eb85750838113155b80613ecd5750600083128015613ecd57508381135b610cb75760405162461bcd60e51b8152600401610f2790615940565b600082613ef857506000610ea9565b82600019148015613f0c5750600160ff1b82145b15613f295760405162461bcd60e51b8152600401610f2790615900565b82820282848281613f3657fe5b0514610cb75760405162461bcd60e51b8152600401610f2790615900565b600081613f735760405162461bcd60e51b8152600401610f2790615970565b81600019148015613f875750600160ff1b83145b15613fa45760405162461bcd60e51b8152600401610f2790615850565b6000828481613faf57fe5b05949350505050565b6000828201818312801590613fcd5750838112155b80613fe25750600083128015613fe257508381125b610cb75760405162461bcd60e51b8152600401610f27906157e0565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b038716600090815260139091529182205482916140469190879063ffffffff61390016565b9050600a811161406757614060858263ffffffff6126d516565b9450600090505b6001600160a01b0386166000908152601360205260409020819055601554614095908663ffffffff61312216565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b4644906140d79088908890889061598e565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613e929190615700565b60006060846001600160a01b03168460405161413f919061556b565b6000604051808303816000865af19150503d806000811461417c576040519150601f19603f3d011682016040523d82523d6000602084013e614181565b606091505b50915091508183906141a65760405162461bcd60e51b8152600401610f27919061577f565b5080511561215057808060200190516141c29190810190614741565b8390610f305760405162461bcd60e51b8152600401610f27919061577f565b6040516121509086906323b872dd60e01b90613515908890889088906024016155c9565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610ea981615afd565b8051610ea981615afd565b60008083601f84011261426957600080fd5b5081356001600160401b0381111561428057600080fd5b60208301915083602082028301111561429857600080fd5b9250929050565b600082601f8301126142b057600080fd5b81516142c36142be826159dd565b6159b7565b915081818352602084019350602081019050838560208402820111156142e857600080fd5b60005b8381101561308657816142fe88826143a9565b84525060209283019291909101906001016142eb565b600082601f83011261432557600080fd5b81356143336142be826159dd565b915081818352602084019350602081019050838561010084028201111561435957600080fd5b60005b83811015613086578161436f8882614444565b845250602090920191610100919091019060010161435c565b8035610ea981615b11565b8051610ea981615b11565b8035610ea981615b1a565b8051610ea981615b1a565b60008083601f8401126143c657600080fd5b5081356001600160401b038111156143dd57600080fd5b60208301915083600182028301111561429857600080fd5b600082601f83011261440657600080fd5b81356144146142be826159fd565b9150808252602083016020830185838301111561443057600080fd5b61443b838284615a83565b50505092915050565b6000610100828403121561445757600080fd5b6144626101006159b7565b90506000614470848461439e565b825250602061448184848301614388565b602083015250604061449584828501614241565b60408301525060606144a984828501614241565b60608301525060806144bd84828501614241565b60808301525060a06144d18482850161439e565b60a08301525060c06144e58482850161439e565b60c08301525060e06144f98482850161439e565b60e08301525092915050565b60006020828403121561451757600080fd5b60006110948484614241565b60006020828403121561453557600080fd5b6000611094848461424c565b6000806040838503121561455457600080fd5b60006145608585614241565b925050602061457185828601614241565b9150509250929050565b60008060006060848603121561459057600080fd5b600061459c8686614241565b93505060206145ad86828701614241565b92505060406145be8682870161439e565b9150509250925092565b600080604083850312156145db57600080fd5b60006145e78585614241565b92505060206145718582860161439e565b60008060006060848603121561460d57600080fd5b60006146198686614241565b935050602061462a8682870161439e565b92505060406145be86828701614388565b6000806000806040858703121561465157600080fd5b84356001600160401b0381111561466757600080fd5b61467387828801614257565b945094505060208501356001600160401b0381111561469157600080fd5b61469d87828801614257565b95989497509550505050565b6000602082840312156146bb57600080fd5b81516001600160401b038111156146d157600080fd5b6110948482850161429f565b600080604083850312156146f057600080fd5b82356001600160401b0381111561470657600080fd5b61471285828601614314565b925050602061457185828601614388565b60006020828403121561473557600080fd5b60006110948484614388565b60006020828403121561475357600080fd5b60006110948484614393565b600080600080600080600080610100898b03121561477c57600080fd5b60006147888b8b61439e565b98505060206147998b828c0161439e565b97505060406147aa8b828c0161439e565b96505060606147bb8b828c0161439e565b95505060806147cc8b828c01614241565b94505060a06147dd8b828c01614241565b93505060c06147ee8b828c01614241565b92505060e08901356001600160401b0381111561480a57600080fd5b6148168b828c016143f5565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561484657600080fd5b60006148528d8d61439e565b9a505060206148638d828e0161439e565b99505060406148748d828e0161439e565b98505060606148858d828e0161439e565b97505060806148968d828e01614241565b96505060a06148a78d828e01614241565b95505060c06148b88d828e0161439e565b94505060e06148c98d828e01614241565b9350506101008b01356001600160401b038111156148e657600080fd5b6148f28d828e016143b4565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b03121561492357600080fd5b600061492f8b8b61439e565b98505060206149408b828c0161439e565b97505060406149518b828c0161439e565b96505060606149628b828c0161439e565b95505060806149738b828c01614241565b94505060a06149848b828c01614241565b93505060c06147ee8b828c0161439e565b6000602082840312156149a757600080fd5b81356001600160401b038111156149bd57600080fd5b611094848285016143f5565b600080604083850312156149dc57600080fd5b82356001600160401b038111156149f257600080fd5b614712858286016143f5565b600060208284031215614a1057600080fd5b6000611094848461439e565b600060208284031215614a2e57600080fd5b600061109484846143a9565b60008060408385031215614a4d57600080fd5b60006145e7858561439e565b60008060408385031215614a6c57600080fd5b6000614a7885856143a9565b9250506020614571858286016143a9565b600080600060608486031215614a9e57600080fd5b6000614aaa868661439e565b9350506020614abb8682870161439e565b92505060406145be86828701614241565b60008060008060808587031215614ae257600080fd5b6000614aee878761439e565b9450506020614aff8782880161439e565b9350506040614b108782880161439e565b9250506060614b2187828801614241565b91505092959194509250565b600080600080600060a08688031215614b4557600080fd5b6000614b51888861439e565b9550506020614b628882890161439e565b9450506040614b738882890161439e565b9350506060614b8488828901614241565b9250506080614b958882890161439e565b9150509295509295909350565b60008060008060008060c08789031215614bbb57600080fd5b6000614bc789896143a9565b9650506020614bd889828a016143a9565b9550506040614be989828a016143a9565b9450506060614bfa89828a016143a9565b9350506080614c0b89828a016143a9565b92505060a0614c1c89828a016143a9565b9150509295509295509295565b600080600080600080600060e0888a031215614c4457600080fd5b6000614c508a8a61439e565b9750506020614c618a828b0161439e565b9650506040614c728a828b0161439e565b9550506060614c838a828b0161439e565b9450506080614c948a828b0161439e565b93505060a0614ca58a828b0161439e565b92505060c0614cb68a828b0161439e565b91505092959891949750929550565b6000614cd18383614d09565b505060200190565b6000614cd18383614e7c565b6000614cf18383615463565b50506101000190565b614d0381615a72565b82525050565b614d0381615a43565b614d03614d1e82615a43565b615abb565b614d2c81615a2a565b614d368184610db4565b9250614d4182610ec1565b8060005b83811015610f30578151614d598782614cc5565b9650614d6483615a24565b925050600101614d45565b6000614d7a82615a30565b614d848185615a3a565b9350614d8f83615a24565b8060005b83811015614dbd578151614da78882614cd9565b9750614db283615a24565b925050600101614d93565b509495945050505050565b6000614dd382615a30565b614ddd8185615a3a565b9350614de883615a24565b8060005b83811015614dbd578151614e008882614ce5565b9750614e0b83615a24565b925050600101614dec565b614e1f81615a34565b614e298184610db4565b9250614e3482610ec1565b8060005b83811015610f30578151614e4c8782614cd9565b9650614e5783615a24565b925050600101614e38565b614d0381615a4e565b614d03614e7782615a4e565b615ac6565b614d0381610ec1565b614d03614e9182610ec1565b610ec1565b614d03614e9182615a53565b6000614ead82615a30565b614eb78185615a3a565b9350614ec7818560208601615a8f565b614ed081615ae7565b9093019392505050565b6000614ee582615a30565b614eef8185610db4565b9350614eff818560208601615a8f565b9290920192915050565b6000614f16600c83615a3a565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000614f3e600283615a3a565b61031360f41b815260200192915050565b6000614f5c600283615a3a565b61313560f01b815260200192915050565b6000614f7a602683615a3a565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614fc2601b83615a3a565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614ffb602183615a3a565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061503e600e83615a3a565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000615068600183615a3a565b603760f81b815260200192915050565b6000615085601283615a3a565b716e6f7420656e6f7567682062616c616e636560701b815260200192915050565b60006150b3600283615a3a565b61333760f01b815260200192915050565b60006150d1600283615a3a565b610c8d60f21b815260200192915050565b60006150ef600283615a3a565b61313160f01b815260200192915050565b600061510d602183615a3a565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615150601583615a3a565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b6000615181600283615a3a565b61189960f11b815260200192915050565b600061519f600283615a3a565b61323560f01b815260200192915050565b60006151bd600f83615a3a565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b60006151e8600283615a3a565b61199960f11b815260200192915050565b6000615206600283615a3a565b61313760f01b815260200192915050565b6000615224602183615a3a565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615267600c83615a3a565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061528f600283615a3a565b61313960f01b815260200192915050565b60006152ad600283615a3a565b61191b60f11b815260200192915050565b60006152cb602783615a3a565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000615314601d83615a3a565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b600061534d600a83615a3a565b6937b7363ca830bab9b2b960b11b815260200192915050565b6000615373600c83615a3a565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b600061539b602483615a3a565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b60006153e1601883615a3a565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b600061541a600183615a3a565b601b60f91b815260200192915050565b6000615437602083615a3a565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b80516101008301906154758482614e7c565b5060208201516154886020850182614e62565b50604082015161549b6040850182614d09565b5060608201516154ae6060850182614d09565b5060808201516154c16080850182614d09565b5060a08201516154d460a0850182614e7c565b5060c08201516154e760c0850182614e7c565b5060e082015161354d60e0850182614e7c565b614d0381615a6c565b600061550f8285614d12565b60148201915061551f8284614e6b565b5060010192915050565b60006155358285614d12565b6014820191506155458284614e85565b5060200192915050565b600061555b8285614e96565b6004820191506155458284614e85565b6000610cb78284614eda565b60208101610ea98284614d09565b60208101610ea98284614cfa565b604081016155a18285614d09565b610cb76020830184614d09565b604081016155bc8285614d09565b610cb76020830184614cfa565b606081016155d78286614d09565b6155e46020830185614d09565b6110946040830184614e7c565b60a081016155ff8288614d09565b61560c6020830187614d09565b6156196040830186614e7c565b6156266060830185614e7c565b613a396080830184614e62565b60c081016156418289614d09565b61564e6020830188614d09565b61565b6040830187614e7c565b6156686060830186614e7c565b6156756080830185614e7c565b61568260a0830184614e7c565b979650505050505050565b6040810161569b8285614d09565b610cb76020830184614e7c565b606081016156b68286614d09565b6156c36020830185614e7c565b6110946040830184614cfa565b60208082528101610cb78184614d6f565b60208082528101610cb78184614dc8565b60208101610ea98284614e62565b60208101610ea98284614e7c565b6101c0810161571d828a614e7c565b61572a6020830189614e7c565b6157376040830188614e62565b6157446060830187614e7c565b6157516080830186614d23565b61575f610100830185614e16565b8181036101a08301526157728184614ea2565b9998505050505050505050565b60208082528101610cb78184614ea2565b60208082528101610ea981614f09565b60208082528101610ea981614f31565b60208082528101610ea981614f4f565b60208082528101610ea981614f6d565b60208082528101610ea981614fb5565b60208082528101610ea981614fee565b60208082528101610ea981615031565b60208082528101610ea98161505b565b60208082528101610ea981615078565b60208082528101610ea9816150a6565b60208082528101610ea9816150c4565b60208082528101610ea9816150e2565b60208082528101610ea981615100565b60208082528101610ea981615143565b60208082528101610ea981615174565b60208082528101610ea981615192565b60208082528101610ea9816151b0565b60208082528101610ea9816151db565b60208082528101610ea9816151f9565b60208082528101610ea981615217565b60208082528101610ea98161525a565b60208082528101610ea981615282565b60208082528101610ea9816152a0565b60208082528101610ea9816152be565b60208082528101610ea981615307565b60208082528101610ea981615340565b60208082528101610ea981615366565b60208082528101610ea98161538e565b60208082528101610ea9816153d4565b60208082528101610ea98161540d565b60208082528101610ea98161542a565b6040810161569b8285614e7c565b6060810161599c8286614e7c565b6155e46020830185614e7c565b60208101610ea982846154fa565b6040518181016001600160401b03811182821017156159d557600080fd5b604052919050565b60006001600160401b038211156159f357600080fd5b5060209081020190565b60006001600160401b03821115615a1357600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610ea982615a60565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610ea9826000610ea982615a43565b82818337506000910152565b60005b83811015615aaa578181015183820152602001615a92565b8381111561354d5750506000910152565b6000610ea982615ad1565b6000610ea982615adc565b6000610ea982615af7565b6000610ea982615af1565b601f01601f191690565b60f81b90565b60601b90565b615b0681615a43565b811461253f57600080fd5b615b0681615a4e565b615b0681610ec156fea365627a7a723158206556ce952bb918dee3ec740a136beee857ddfddbf2cd1a94ff2cac96ca9a45c06c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x6080604052600436106103d95760003560e01c80637e37c08c116101fd578063ca37e66611610118578063e3cded61116100ab578063ef2b0b391161007a578063ef2b0b3914610aa3578063f2fde38b14610ab8578063f6b69f9914610ad8578063f851a44014610aeb578063ffa1ad7414610b00576103d9565b8063e3cded6114610a23578063e41b07e314610a43578063e697d2ee14610a63578063eebc508114610a83576103d9565b8063d759dbeb116100e7578063d759dbeb146109ae578063d8f06c83146109c3578063d97206a4146109e3578063dd62ed3e14610a03576103d9565b8063ca37e66614610939578063cb926cb31461094e578063d1a1beb41461096e578063d65a50211461098e576103d9565b806395d89b4111610190578063a9059cbb1161015f578063a9059cbb146108c4578063b9fe1a8f146108e4578063ba0e43bf14610904578063be19421714610919576103d9565b806395d89b41146108655780639bda3a981461087a5780639dc29fac1461088f5780639fd0506d146108af576103d9565b80638da5cb5b116101cc5780638da5cb5b146108115780638ee6c4e6146108265780638f32d59b1461083b5780638fb807c514610850576103d9565b80637e37c08c146107b25780637ff9b596146107c7578063829b38f4146107dc5780638325a1c0146107fc576103d9565b80632f6b600d116102f8578063612ef80b1161028b57806370a082311161025a57806370a08231146107285780637288b3441461074857806376fd4fdf14610768578063797bf385146107885780637b7933b41461079d576103d9565b8063612ef80b146106a4578063631a3ef8146106b95780636b40cd40146106d9578063704b6c0214610708576103d9565b806340c10f19116102c757806340c10f191461063a57806344a4a0031461065a57806354198ce91461066f57806356e07d701461068f576103d9565b80632f6b600d146105ce578063313ce567146105e35780633291c11a14610605578063330691ac14610625576103d9565b806318498b1d1161037057806323b872dd1161033f57806323b872dd1461055a57806328a02f191461057a5780632d88af4a1461059b5780632ea295fa146105bb576103d9565b806318498b1d146104f95780631d0806ae1461051b5780631f68f20a1461053057806320f6d07c14610545576103d9565b8063095ea7b3116103ac578063095ea7b31461048257806309ec6b6b146104af57806312416898146104c457806318160ddd146104e4576103d9565b806304797930146103e857806306947a3a1461041e57806306b3efd61461044057806306fdde0314610460575b3480156103e557600080fd5b50005b3480156103f457600080fd5b50610408610403366004614a89565b610b15565b6040516104159190615700565b60405180910390f35b34801561042a57600080fd5b50610433610cbe565b6040516104159190615577565b34801561044c57600080fd5b5061040861045b366004614505565b610ccd565b34801561046c57600080fd5b50610475610db9565b604051610415919061577f565b34801561048e57600080fd5b506104a261049d3660046145c8565b610e44565b60405161041591906156f2565b3480156104bb57600080fd5b50610408610eaf565b3480156104d057600080fd5b506104086104df3660046149fe565b610ec4565b3480156104f057600080fd5b50610408610eef565b34801561050557600080fd5b50610519610514366004614b2d565b610ef5565b005b34801561052757600080fd5b50610408610f38565b34801561053c57600080fd5b50610408610f3e565b34801561055157600080fd5b50610408610f44565b34801561056657600080fd5b506104a261057536600461457b565b610fd3565b61058d610588366004614906565b61109c565b604051610415929190615980565b3480156105a757600080fd5b506105196105b6366004614505565b6112c1565b61058d6105c936600461475f565b611307565b3480156105da57600080fd5b506104336115e7565b3480156105ef57600080fd5b506105f86115f6565b60405161041591906159a9565b34801561061157600080fd5b506104086106203660046149fe565b6115ff565b34801561063157600080fd5b50610408611611565b34801561064657600080fd5b506104086106553660046145c8565b611617565b34801561066657600080fd5b50610408611658565b34801561067b57600080fd5b5061040861068a366004614505565b61166a565b34801561069b57600080fd5b5061040861170b565b3480156106b057600080fd5b50610408611711565b3480156106c557600080fd5b506104086106d4366004614a89565b611742565b3480156106e557600080fd5b506106f96106f4366004614acc565b6118e2565b6040516104159392919061598e565b34801561071457600080fd5b50610519610723366004614505565b6119f3565b34801561073457600080fd5b50610408610743366004614505565b611a39565b34801561075457600080fd5b50610408610763366004614a3a565b611a54565b34801561077457600080fd5b506104086107833660046145f8565b611b37565b34801561079457600080fd5b50610433611be2565b3480156107a957600080fd5b50610408611bf6565b3480156107be57600080fd5b50610408611bfc565b3480156107d357600080fd5b50610408611c02565b3480156107e857600080fd5b506104086107f73660046149fe565b611c40565b34801561080857600080fd5b50610408611cc0565b34801561081d57600080fd5b50610433611ccc565b34801561083257600080fd5b50610433611cdb565b34801561084757600080fd5b506104a2611cea565b34801561085c57600080fd5b50610408611d10565b34801561087157600080fd5b50610475611d40565b34801561088657600080fd5b50610433611d9b565b34801561089b57600080fd5b506104086108aa3660046145c8565b611daa565b3480156108bb57600080fd5b50610433611e1e565b3480156108d057600080fd5b506104a26108df3660046145c8565b611e2d565b3480156108f057600080fd5b506104086108ff3660046149fe565b611e3d565b34801561091057600080fd5b50610408611e48565b34801561092557600080fd5b506104a2610934366004614995565b611e4e565b34801561094557600080fd5b50610433611ed0565b34801561095a57600080fd5b50610519610969366004614505565b611edf565b34801561097a57600080fd5b506104086109893660046145f8565b611f25565b34801561099a57600080fd5b506104086109a93660046149fe565b611f6f565b3480156109ba57600080fd5b50610408611f82565b3480156109cf57600080fd5b506105196109de3660046146dd565b611f88565b3480156109ef57600080fd5b506105196109fe366004614c29565b612157565b348015610a0f57600080fd5b50610408610a1e366004614541565b61225e565b348015610a2f57600080fd5b50610519610a3e3660046149c9565b612289565b348015610a4f57600080fd5b50610408610a5e366004614505565b61232e565b348015610a6f57600080fd5b50610519610a7e36600461463b565b612340565b348015610a8f57600080fd5b50610408610a9e366004614505565b6124f1565b348015610aaf57600080fd5b5061040861250c565b348015610ac457600080fd5b50610519610ad3366004614505565b612512565b61058d610ae6366004614826565b612542565b348015610af757600080fd5b50610433612612565b348015610b0c57600080fd5b50610408612621565b60008315610cb7576001600160a01b038216610b3a576017546001600160a01b031691505b600060106000846001604051602001610b54929190615503565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610bc5918a9101615700565b60206040518083038186803b158015610bdd57600080fd5b505afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c159190810190614a1c565b60016040518663ffffffff1660e01b8152600401610c379594939291906155f1565b60206040518083038186803b158015610c4f57600080fd5b505afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c879190810190614a1c565b9150610c9b82610c95611d10565b86612626565b9350610ca9915061269f9050565b821115610cb557600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610d6857601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d159030908790600401615593565b60206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d659190810190614a1c565b90505b610db0670de0b6b3a7640000610da4610d7f611c02565b610d9885610d8c89611a39565b9063ffffffff6126d516565b9063ffffffff6126fa16565b9063ffffffff61273416565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e3c5780601f10610e1157610100808354040283529160200191610e3c565b820191906000526020600020905b815481529060010190602001808311610e1f57829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e9d908690615700565b60405180910390a35060015b92915050565b6000610ebe6104df6000612776565b90505b90565b600080610ecf610f44565b90508015610ee957610ee18184611a54565b915050610db4565b50919050565b60155490565b6000610f03868686866118e2565b5091505081811015610f305760405162461bcd60e51b8152600401610f2790615790565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610f839330936101009092049091169101615593565b60206040518083038186803b158015610f9b57600080fd5b505afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ebe9190810190614a1c565b60165460405163115dd4b160e01b8152600091611094918691869186916001600160a01b03169063115dd4b19061100e903390600401615585565b60206040518083038186803b15801561102657600080fd5b505afa15801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061105e9190810190614741565b61108b576001600160a01b038816600090815260146020908152604080832033845290915290205461108f565b6000195b6127b0565b949350505050565b6000806001600054146110c15760405162461bcd60e51b8152600401610f2790615930565b60026000556110ce612983565b6110db8989898988610ef5565b6001600160a01b0386166110f8576017546001600160a01b031695505b6004546001600160a01b0387811661010090920416141561112b5760405162461bcd60e51b8152600401610f2790615840565b8915806111405750336001600160a01b038616145b61115c5760405162461bcd60e51b8152600401610f2790615950565b6001600160a01b0386166000908152601260205260409020541561119f576001600160a01b03861660009081526012602052604090205487111561119f57600080fd5b60045461010090046001600160a01b0316600090815260126020526040902054156111f05760045461010090046001600160a01b03166000908152601260205260409020548811156111f057600080fd5b60006111fd87898b612a03565b90508061121c5760405162461bcd60e51b8152600401610f2790615870565b611224614205565b61122c614223565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a9052611264612c30565b6112758c8260016020020151612cd6565b825260208201526112966f4b3b4ca85a86c47a098a2240000000008d612734565b9b506112a88d60008e8c86868c612d25565b6001600055909e909d509b505050505050505050505050565b6112c9611cea565b6112e55760405162461bcd60e51b8152600401610f27906158d0565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008060016000541461132c5760405162461bcd60e51b8152600401610f2790615930565b60026000558861134e5760405162461bcd60e51b8152600401610f2790615960565b611356612983565b6001600160a01b03861660009081526012602052604090205415611399576001600160a01b03861660009081526012602052604090205487111561139957600080fd5b3415806113a557508634145b80156113b95750861515806113b957508915155b80156113e057506001600160a01b0386161515806113d657503415155b806113e057508915155b80156113fc57508915806113fc5750336001600160a01b038616145b6114185760405162461bcd60e51b8152600401610f2790615800565b6001600160a01b038616611435576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114685760405162461bcd60e51b8152600401610f27906157a0565b611470612c30565b611478614205565b611480614223565b3082526001600160a01b03878116602080850191909152908716604084015281018b90526114b88b6114b26000612776565b8c612626565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506115cf8c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e6001604051602001611523929190615503565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b81526004016115679190615700565b60206040518083038186803b15801561157f57600080fd5b505afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115b79190810190614a1c565b8b868660405180602001604052806000815250612d25565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b600060016000541461163b5760405162461bcd60e51b8152600401610f2790615930565b600260005561164a8383612f84565b90505b600160005592915050565b6000610ebe611665610f44565b613090565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116a3929190615529565b604051602081830303815290604052805190602001209050610db08160136000866001600160a01b03166001600160a01b03168152602001908152602001600020546116ed611c02565b6001600160a01b0387166000908152601160205260409020546130c8565b600a5481565b60008061171e6000612776565b9050600061172a610f44565b90508082111561173d5790039050610ec1565b505090565b60008315610cb757600061175885610c95611d10565b9250505061176461269f565b8111610cb5576001600160a01b038316611787576017546001600160a01b031692505b6000601060008560016040516020016117a1929190615503565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506118d993600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d991611817918c9101615700565b60206040518083038186803b15801561182f57600080fd5b505afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118679190810190614a1c565b60016040518663ffffffff1660e01b81526004016118899594939291906155f1565b60206040518083038186803b1580156118a157600080fd5b505afa1580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d8c9190810190614a1c565b92505050610cb7565b600080806001600160a01b038416611903576017546001600160a01b031693505b6000611910858789612a03565b905061191c8882612cd6565b909450915061192961269f565b8411156119405750600092508291508190506119e9565b611950878563ffffffff6126d516565b6016546004805460405163d67f707760e01b8152939a506001600160a01b039283169363d67f7077936119959361010090930416918a918d918d918a918d9101615633565b60206040518083038186803b1580156119ad57600080fd5b505afa1580156119c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119e59190810190614a1c565b9250505b9450945094915050565b6119fb611cea565b611a175760405162461bcd60e51b8152600401610f27906158d0565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526013602052604090205490565b60008215801590611a655750828210155b15610ea957611b30701d6329f1c35ca4bfabb9f5610000000000610da4611b1a68056bc75e2d63100000601660009054906101000a90046001600160a01b03166001600160a01b0316634699f8466040518163ffffffff1660e01b815260040160206040518083038186803b158015611add57600080fd5b505afa158015611af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b159190810190614a1c565b613122565b610d98611b278888613164565b610d9889613090565b9050610ea9565b6000600160005414611b5b5760405162461bcd60e51b8152600401610f2790615930565b60026000558115611b7657611b6f83613196565b9050611b82565b611b7f8361333c565b90505b8015611bd657611bd6600460019054906101000a90046001600160a01b0316858360405180604001604052806015815260200174185cdcd95d081d1c985b9cd9995c8819985a5b1959605a1b8152506134f3565b60016000559392505050565b60045461010090046001600160a01b031681565b600d5481565b60085481565b600f546000908190426001600160581b03908116911614611c2957611c25613553565b9150505b611c3a611c3582612776565b61361f565b91505090565b600080611c5f61016d610da4601c600b546126fa90919063ffffffff16565b90506000611c7c68056bc75e2d631000008363ffffffff61312216565b90506000611c9968056bc75e2d63100000610da484610d98611711565b9050611cb785610da483670de0b6b3a764000063ffffffff6126fa16565b95945050505050565b6000610ebe600061364e565b6001546001600160a01b031690565b601c546001600160a01b031681565b6001546000906001600160a01b0316611d016136a4565b6001600160a01b031614905090565b600f546000908190426001600160581b03908116911614611d3757611d33613553565b9150505b611c3a81612776565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e3c5780601f10610e1157610100808354040283529160200191610e3c565b6018546001600160a01b031681565b6000600160005414611dce5760405162461bcd60e51b8152600401610f2790615930565b6002600055611ddc8261333c565b9050801561164d5761164d600460019054906101000a90046001600160a01b03168483604051806040016040528060018152602001603560f81b8152506134f3565b601b546001600160a01b031681565b6000610cb73384846000196127b0565b6000610ea98261364e565b60095481565b60008082604051602001611e62919061556b565b6040516020818303038152906040528051906020012090506000817fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f2604051602001611eaf92919061554f565b60408051808303601f19018152919052805160209091012054949350505050565b601a546001600160a01b031681565b611ee7611cea565b611f035760405162461bcd60e51b8152600401610f27906158d0565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600160005414611f495760405162461bcd60e51b8152600401610f2790615930565b60026000558115611f6557611f5e84846136a8565b9050611bd6565b611f5e8484612f84565b6000610ea96104df83610d8c6000612776565b60075481565b611f90611cea565b80611fa557506019546001600160a01b031633145b611fc15760405162461bcd60e51b8152600401610f27906158d0565b60045460609061010090046001600160a01b031660005b845181101561204b5781858281518110611fee57fe5b6020026020010151606001906001600160a01b031690816001600160a01b03168152505083612020576224ea00612023565b60005b62ffffff1685828151811061203457fe5b602090810291909101015160e00152600101611fd8565b506016546040516350d713af60e11b81526001600160a01b039091169063a1ae275e9061207c9087906004016156e1565b600060405180830381600087803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d291908101906146a9565b915060005b8251811015612150578281815181106120ec57fe5b60200260200101516010600087848151811061210457fe5b60200260200101516080015187604051602001612122929190615503565b60408051601f19818403018152918152815160209283012083529082019290925201600020556001016120d7565b5050505050565b61215f611cea565b8061217457506019546001600160a01b031633145b6121905760405162461bcd60e51b8152600401610f27906158d0565b68056bc75e2d631000006121aa878963ffffffff6126d516565b11156121c85760405162461bcd60e51b8152600401610f2790615860565b68056bc75e2d631000006121e2858763ffffffff6126d516565b11156122005760405162461bcd60e51b8152600401610f2790615860565b68056bc75e2d631000008311158015612222575068056bc75e2d631000008211155b61223e5760405162461bcd60e51b8152600401610f2790615890565b600596909655600694909455600792909255600855600955600a55600b55565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b601b546001600160a01b031633146122b35760405162461bcd60e51b8152600401610f2790615920565b6000826040516020016122c6919061556b565b604051602081830303815290604052805190602001207fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f260405160200161230e92919061554f565b604051602081830303815290604052805190602001209050818155505050565b60126020526000908152604090205481565b612348611cea565b8061235d57506019546001600160a01b031633145b6123795760405162461bcd60e51b8152600401610f27906158d0565b8281146123985760405162461bcd60e51b8152600401610f27906157f0565b6040805184815260208086028201019091526060908480156123c4578160200160208202803883390190505b50905060005b848110156124875760008686838181106123e057fe5b90506020020160206123f59190810190614505565b85858481811061240157fe5b90506020020160206124169190810190614723565b604051602001612427929190615503565b6040516020818303038152906040528051906020012060001c9050601060008281526020019081526020016000205483838151811061246257fe5b60209081029190910181019190915260009182526010905260408120556001016123ca565b50601654604051637f187d3560e11b81526001600160a01b039091169063fe30fa6a906124b89084906004016156d0565b600060405180830381600087803b1580156124d257600080fd5b505af11580156124e6573d6000803e3d6000fd5b505050505050505050565b6001600160a01b031660009081526011602052604090205490565b600b5481565b61251a611cea565b6125365760405162461bcd60e51b8152600401610f27906158d0565b61253f81613731565b50565b6000806001600160a01b038516156125b95760165460405163193bbe8960e31b81526001600160a01b039091169063c9ddf44890612586908a908990600401615593565b600060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050505b6125ff8c8c8c8c8c8c8c8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109c92505050565b915091509a509a98505050505050505050565b6019546001600160a01b031681565b600681565b600080600061263586866137b3565b925061268261266a670de0b6b3a7640000611b156b0a3098c68eb9427db8000000610da483610d988a8c63ffffffff6126fa16565b610da488670de0b6b3a764000063ffffffff6126fa16565b9050612694818763ffffffff61312216565b915093509350939050565b600480546040516370a0823160e01b81526000926101009092046001600160a01b0316916370a0823191610f8391309101615577565b600082820183811015610cb75760405162461bcd60e51b8152600401610f27906157d0565b60008261270957506000610ea9565b8282028284828161271657fe5b0414610cb75760405162461bcd60e51b8152600401610f27906158c0565b6000610cb783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138c9565b6000601554600014610db457600c54806127a05761279d612795610f44565b610d8c61269f565b90505b610ee1818463ffffffff6126d516565b6000600019821461280c576040805180820190915260028152610c4d60f21b60208201526127e7908390859063ffffffff61390016565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b6001600160a01b0384166128325760405162461bcd60e51b8152600401610f27906157b0565b6001600160a01b03851660009081526013602090815260408083205481518083019092526002825261189b60f11b9282019290925290919061287d908390879063ffffffff61390016565b6001600160a01b038089166000908152601360205260408082208490559189168152908120549192506128b6828863ffffffff6126d516565b6001600160a01b03891660009081526013602052604081208290559091506128dc611c02565b601c549091506001600160a01b038b811691161480159061290b5750601c546001600160a01b038a8116911614155b156129285761291c8a86868461392c565b6129288984848461392c565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161296b9190615700565b60405180910390a35060019998505050505050505050565b600080356001600160e01b0319167fd46a704bc285dbd6ff5ad3863506260b1df02812f4f857c8cc852317a6ac64f26040516020016129c392919061554f565b60405160208183030381529060405280519060200120905060008154905080156129ff5760405162461bcd60e51b8152600401610f27906158d0565b5050565b808215610cb757600080601660009054906101000a90046001600160a01b03166001600160a01b03166378d849ed6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a5b57600080fd5b505afa158015612a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a939190810190614523565b60048054604051630a7549df60e21b81526001600160a01b03938416936329d5277c93612acc938c936101009091049092169101615593565b604080518083038186803b158015612ae357600080fd5b505afa158015612af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b1b9190810190614a59565b9150915081600014158015612b2f57508015155b612b4b5760405162461bcd60e51b8152600401610f2790615910565b6000612b6182610da4888663ffffffff6126fa16565b60165460048054604051631a51577760e21b81529394506000936001600160a01b03938416936369455ddc93612ba4936101009004909116918d918891016155c9565b60206040518083038186803b158015612bbc57600080fd5b505afa158015612bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bf49190810190614a1c565b9050868114612c1457612c1187610da4848463ffffffff6126fa16565b91505b612c24828663ffffffff6126d516565b98975050505050505050565b600f5442906001600160581b0380831691161461253f5760165460048054604051630740ff7d60e51b81526001600160a01b039384169363e81fefa093612c809361010090049091169101615577565b600060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b5050600f80546001600160581b0385166affffffffffffffffffffff19909116179055505050565b60008080612cf6670de0b6b3a7640000610da4868863ffffffff6126fa16565b9050612d0b81612d066000612776565b6137b3565b9150612d1b826224ea00836139e2565b9250509250929050565b600080612d30612983565b612d3861269f565b602085015111801590612d57575060208501516001600160a01b031615155b612d735760405162461bcd60e51b8152600401610f2790615830565b60408501516001600160a01b0316612d995760208501516001600160a01b031660408601525b6000612da78787878c613a43565b60208601516060870151919250612dbe91906126d5565b60608601528815612dde576060850151612dd8908a613122565b60608601525b60008915612dea575060015b6000601060008a84604051602001612e03929190615503565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020549050601660009054906101000a90046001600160a01b03166001600160a01b031663585314cf84838f868f8e8e8e6040518963ffffffff1660e01b8152600401612e7b979695949392919061570e565b60408051808303818588803b158015612e9357600080fd5b505af1158015612ea7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250612ecc9190810190614a59565b608089015260208801819052612ef45760405162461bcd60e51b8152600401610f2790615880565b601654602089015160405163f06a9c6b60e01b81526001600160a01b039092169163f06a9c6b91612f2791600401615577565b600060405180830381600087803b158015612f4157600080fd5b505af1158015612f55573d6000803e3d6000fd5b5050505086600160058110612f6657fe5b6020020151608090970151969c969b50959950505050505050505050565b600080612f9083613c78565b601c5491935091506000906001600160a01b03161561302e57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690612fdb9030908990600401615593565b60206040518083038186803b158015612ff357600080fd5b505afa158015613007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061302b9190810190614a1c565b90505b6001600160a01b038516600090815260136020526040812054613057908363ffffffff6126d516565b9050600061306b828663ffffffff6126d516565b905061307987868887613d82565b506130868783838761392c565b5050505092915050565b60008115610db45760006130a2613553565b509050610ee183610da461016d610d988568056bc75e2d6310000063ffffffff6126fa16565b6000816130d757506000611094565b508354611cb781613116670de0b6b3a764000061310a886130fe898963ffffffff613ea316565b9063ffffffff613ee916565b9063ffffffff613f5416565b9063ffffffff613fb816565b6000610cb783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613900565b6000821580159061317457508115155b15610ea957611b3082610da48568056bc75e2d6310000063ffffffff6126fa16565b601c54604051636822955360e11b815260009182916001600160a01b039091169063d0452aa6906131cd90309033906004016155ae565b60206040518083038186803b1580156131e557600080fd5b505afa1580156131f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061321d9190810190614a1c565b90508261323961322c33611a39565b839063ffffffff6126d516565b10156132575760405162461bcd60e51b8152600401610f2790615810565b801561333757828110156132d057601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613299903090859033906004016156a8565b600060405180830381600087803b1580156132b357600080fd5b505af11580156132c7573d6000803e3d6000fd5b50505050613337565b601c54604051631a4ca37b60e21b81526001600160a01b03909116906369328dec90613304903090879033906004016156a8565b600060405180830381600087803b15801561331e57600080fd5b505af1158015613332573d6000803e3d6000fd5b505050505b610db0835b60008161335b5760405162461bcd60e51b8152600401610f27906158e0565b61336433611a39565b82111561339857600019821461338c5760405162461bcd60e51b8152600401610f27906158a0565b61339533611a39565b91505b6133a0612c30565b60006133af611c356000612776565b905060006133cf670de0b6b3a7640000610da4868563ffffffff6126fa16565b905060006133db61269f565b9050819350808411156134005760405162461bcd60e51b8152600401610f2790615820565b601c546000906001600160a01b03161561349957601c54604051636822955360e11b81526001600160a01b039091169063d0452aa69061344690309033906004016155ae565b60206040518083038186803b15801561345e57600080fd5b505afa158015613472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134969190810190614a1c565b90505b336000908152601360205260408120546134b9908363ffffffff6126d516565b905060006134cd828963ffffffff61312216565b90506134db33898989613ffe565b506134e83383838961392c565b505050505050919050565b60405161354d90859063a9059cbb60e01b90613515908790879060240161568d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915283614123565b50505050565b60165460048054604051630d1979fb60e41b8152600093849384936001600160a01b039283169363d1979fb09361359593309361010090049091169101615593565b60c06040518083038186803b1580156135ad57600080fd5b505afa1580156135c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506135e59190810190614ba2565b5091965094509250613618915068056bc75e2d631000009050610da461360b8285613122565b859063ffffffff6126fa16565b9150509091565b6015546000908061363257600e54610db0565b610db081610da485670de0b6b3a764000063ffffffff6126fa16565b600080821561369757600f54426001600160581b0390811691161461367957613675613553565b9150505b600061368782610d8c61269f565b905080841115613695578093505b505b610db083612d0683612776565b3390565b60006136b48383612f84565b601c549091506136d09084906001600160a01b031683806127b0565b50601c546040516336305cf160e21b81526001600160a01b039091169063d8c173c490613703908690859060040161568d565b600060405180830381600087803b15801561371d57600080fd5b505af1158015613086573d6000803e3d6000fd5b6001600160a01b0381166137575760405162461bcd60e51b8152600401610f27906157c0565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806137cb6137c585610d8c610f44565b84613164565b600554600654600954600a54600b54949550600094859493929190828810156137f2578297505b8188111561386557968190039668056bc75e2d6310000082900380891115613818578098505b61383968056bc75e2d63100000610da485610d98898b63ffffffff6126d516565b965061385d87610d8c83610da4613850878d613122565b8e9063ffffffff6126fa16565b9950506138bb565b61388685610d8c68056bc75e2d63100000610da48c8963ffffffff6126fa16565b9850939550859361389d848663ffffffff6126d516565b9550868910156138af578698506138bb565b858911156138bb578598505b505050505050505092915050565b600081836138ea5760405162461bcd60e51b8152600401610f27919061577f565b5060008385816138f657fe5b0495945050505050565b600081848411156139245760405162461bcd60e51b8152600401610f27919061577f565b505050900390565b6040516000906139629086907f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb690602001615529565b6040516020818303038152906040528051906020012090506000836000141561398e57600092506139bf565b84156139bf576001600160a01b0386166000908152601160205260409020546139bc908390879086906130c8565b90505b90556001600160a01b039093166000908152601160205260409020929092555050565b6000806139fd6301e13380610da4878763ffffffff6126fa16565b90506000613a1a68056bc75e2d631000008363ffffffff61312216565b9050613a3981610da48668056bc75e2d6310000063ffffffff6126fa16565b9695505050505050565b60175460045460408501516020850151606086015160808701516000956001600160a01b03908116956101009004811694939291908b16851415613a995760405162461bcd60e51b8152600401610f27906158f0565b3496508715613af757613abd85858a604051806020016040528060008152506134f3565b87831115613af257601654604080516020810190915260008152613af29187916001600160a01b03909116908b8703906134f3565b613b2c565b601654604080518082019091526002815261323760f01b6020820152613b2c9187916001600160a01b039091169086906134f3565b8015613c2f57856001600160a01b03168b6001600160a01b0316148015613b5257508615155b8015613b5e5750808710155b15613bf857856001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b9e57600080fd5b505af1158015613bb2573d6000803e3d6000fd5b505060165460408051808201909152600481526332382d6160e01b6020820152613bee94508f93506001600160a01b03909116915084906134f3565b8087039650613c2f565b601654604080518082019091526004815263191c16b160e11b6020820152613c2f918d9133916001600160a01b03169085906141e1565b8115613c6a57601654604080518082019091526002815261323960f01b6020820152613c6a91879133916001600160a01b03169086906141e1565b505050505050949350505050565b60008082613c985760405162461bcd60e51b8152600401610f27906158b0565b613ca0612c30565b613cad611c356000612776565b9050613ccb81610da485670de0b6b3a764000063ffffffff6126fa16565b915034613d1357613d0e600460019054906101000a90046001600160a01b031633308660405180604001604052806002815260200161062760f31b8152506141e1565b613d7d565b601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613d6357600080fd5b505af1158015613d77573d6000803e3d6000fd5b50505050505b915091565b60006001600160a01b038516613daa5760405162461bcd60e51b8152600401610f27906157b0565b6001600160a01b038516600090815260136020526040812054613dd3908663ffffffff6126d516565b6001600160a01b0387166000908152601360205260409020819055601554909150613e04908663ffffffff6126d516565b6015556040516001600160a01b038716907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90613e469088908890889061598e565b60405180910390a2856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613e929190615700565b60405180910390a395945050505050565b6000818303818312801590613eb85750838113155b80613ecd5750600083128015613ecd57508381135b610cb75760405162461bcd60e51b8152600401610f2790615940565b600082613ef857506000610ea9565b82600019148015613f0c5750600160ff1b82145b15613f295760405162461bcd60e51b8152600401610f2790615900565b82820282848281613f3657fe5b0514610cb75760405162461bcd60e51b8152600401610f2790615900565b600081613f735760405162461bcd60e51b8152600401610f2790615970565b81600019148015613f875750600160ff1b83145b15613fa45760405162461bcd60e51b8152600401610f2790615850565b6000828481613faf57fe5b05949350505050565b6000828201818312801590613fcd5750838112155b80613fe25750600083128015613fe257508381125b610cb75760405162461bcd60e51b8152600401610f27906157e0565b6040805180820182526002815261189b60f11b6020808301919091526001600160a01b038716600090815260139091529182205482916140469190879063ffffffff61390016565b9050600a811161406757614060858263ffffffff6126d516565b9450600090505b6001600160a01b0386166000908152601360205260409020819055601554614095908663ffffffff61312216565b6015556040516001600160a01b038716907f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b4644906140d79088908890889061598e565b60405180910390a260006001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613e929190615700565b60006060846001600160a01b03168460405161413f919061556b565b6000604051808303816000865af19150503d806000811461417c576040519150601f19603f3d011682016040523d82523d6000602084013e614181565b606091505b50915091508183906141a65760405162461bcd60e51b8152600401610f27919061577f565b5080511561215057808060200190516141c29190810190614741565b8390610f305760405162461bcd60e51b8152600401610f27919061577f565b6040516121509086906323b872dd60e01b90613515908890889088906024016155c9565b60405180608001604052806004906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b8035610ea981615afd565b8051610ea981615afd565b60008083601f84011261426957600080fd5b5081356001600160401b0381111561428057600080fd5b60208301915083602082028301111561429857600080fd5b9250929050565b600082601f8301126142b057600080fd5b81516142c36142be826159dd565b6159b7565b915081818352602084019350602081019050838560208402820111156142e857600080fd5b60005b8381101561308657816142fe88826143a9565b84525060209283019291909101906001016142eb565b600082601f83011261432557600080fd5b81356143336142be826159dd565b915081818352602084019350602081019050838561010084028201111561435957600080fd5b60005b83811015613086578161436f8882614444565b845250602090920191610100919091019060010161435c565b8035610ea981615b11565b8051610ea981615b11565b8035610ea981615b1a565b8051610ea981615b1a565b60008083601f8401126143c657600080fd5b5081356001600160401b038111156143dd57600080fd5b60208301915083600182028301111561429857600080fd5b600082601f83011261440657600080fd5b81356144146142be826159fd565b9150808252602083016020830185838301111561443057600080fd5b61443b838284615a83565b50505092915050565b6000610100828403121561445757600080fd5b6144626101006159b7565b90506000614470848461439e565b825250602061448184848301614388565b602083015250604061449584828501614241565b60408301525060606144a984828501614241565b60608301525060806144bd84828501614241565b60808301525060a06144d18482850161439e565b60a08301525060c06144e58482850161439e565b60c08301525060e06144f98482850161439e565b60e08301525092915050565b60006020828403121561451757600080fd5b60006110948484614241565b60006020828403121561453557600080fd5b6000611094848461424c565b6000806040838503121561455457600080fd5b60006145608585614241565b925050602061457185828601614241565b9150509250929050565b60008060006060848603121561459057600080fd5b600061459c8686614241565b93505060206145ad86828701614241565b92505060406145be8682870161439e565b9150509250925092565b600080604083850312156145db57600080fd5b60006145e78585614241565b92505060206145718582860161439e565b60008060006060848603121561460d57600080fd5b60006146198686614241565b935050602061462a8682870161439e565b92505060406145be86828701614388565b6000806000806040858703121561465157600080fd5b84356001600160401b0381111561466757600080fd5b61467387828801614257565b945094505060208501356001600160401b0381111561469157600080fd5b61469d87828801614257565b95989497509550505050565b6000602082840312156146bb57600080fd5b81516001600160401b038111156146d157600080fd5b6110948482850161429f565b600080604083850312156146f057600080fd5b82356001600160401b0381111561470657600080fd5b61471285828601614314565b925050602061457185828601614388565b60006020828403121561473557600080fd5b60006110948484614388565b60006020828403121561475357600080fd5b60006110948484614393565b600080600080600080600080610100898b03121561477c57600080fd5b60006147888b8b61439e565b98505060206147998b828c0161439e565b97505060406147aa8b828c0161439e565b96505060606147bb8b828c0161439e565b95505060806147cc8b828c01614241565b94505060a06147dd8b828c01614241565b93505060c06147ee8b828c01614241565b92505060e08901356001600160401b0381111561480a57600080fd5b6148168b828c016143f5565b9150509295985092959890939650565b6000806000806000806000806000806101208b8d03121561484657600080fd5b60006148528d8d61439e565b9a505060206148638d828e0161439e565b99505060406148748d828e0161439e565b98505060606148858d828e0161439e565b97505060806148968d828e01614241565b96505060a06148a78d828e01614241565b95505060c06148b88d828e0161439e565b94505060e06148c98d828e01614241565b9350506101008b01356001600160401b038111156148e657600080fd5b6148f28d828e016143b4565b92509250509295989b9194979a5092959850565b600080600080600080600080610100898b03121561492357600080fd5b600061492f8b8b61439e565b98505060206149408b828c0161439e565b97505060406149518b828c0161439e565b96505060606149628b828c0161439e565b95505060806149738b828c01614241565b94505060a06149848b828c01614241565b93505060c06147ee8b828c0161439e565b6000602082840312156149a757600080fd5b81356001600160401b038111156149bd57600080fd5b611094848285016143f5565b600080604083850312156149dc57600080fd5b82356001600160401b038111156149f257600080fd5b614712858286016143f5565b600060208284031215614a1057600080fd5b6000611094848461439e565b600060208284031215614a2e57600080fd5b600061109484846143a9565b60008060408385031215614a4d57600080fd5b60006145e7858561439e565b60008060408385031215614a6c57600080fd5b6000614a7885856143a9565b9250506020614571858286016143a9565b600080600060608486031215614a9e57600080fd5b6000614aaa868661439e565b9350506020614abb8682870161439e565b92505060406145be86828701614241565b60008060008060808587031215614ae257600080fd5b6000614aee878761439e565b9450506020614aff8782880161439e565b9350506040614b108782880161439e565b9250506060614b2187828801614241565b91505092959194509250565b600080600080600060a08688031215614b4557600080fd5b6000614b51888861439e565b9550506020614b628882890161439e565b9450506040614b738882890161439e565b9350506060614b8488828901614241565b9250506080614b958882890161439e565b9150509295509295909350565b60008060008060008060c08789031215614bbb57600080fd5b6000614bc789896143a9565b9650506020614bd889828a016143a9565b9550506040614be989828a016143a9565b9450506060614bfa89828a016143a9565b9350506080614c0b89828a016143a9565b92505060a0614c1c89828a016143a9565b9150509295509295509295565b600080600080600080600060e0888a031215614c4457600080fd5b6000614c508a8a61439e565b9750506020614c618a828b0161439e565b9650506040614c728a828b0161439e565b9550506060614c838a828b0161439e565b9450506080614c948a828b0161439e565b93505060a0614ca58a828b0161439e565b92505060c0614cb68a828b0161439e565b91505092959891949750929550565b6000614cd18383614d09565b505060200190565b6000614cd18383614e7c565b6000614cf18383615463565b50506101000190565b614d0381615a72565b82525050565b614d0381615a43565b614d03614d1e82615a43565b615abb565b614d2c81615a2a565b614d368184610db4565b9250614d4182610ec1565b8060005b83811015610f30578151614d598782614cc5565b9650614d6483615a24565b925050600101614d45565b6000614d7a82615a30565b614d848185615a3a565b9350614d8f83615a24565b8060005b83811015614dbd578151614da78882614cd9565b9750614db283615a24565b925050600101614d93565b509495945050505050565b6000614dd382615a30565b614ddd8185615a3a565b9350614de883615a24565b8060005b83811015614dbd578151614e008882614ce5565b9750614e0b83615a24565b925050600101614dec565b614e1f81615a34565b614e298184610db4565b9250614e3482610ec1565b8060005b83811015610f30578151614e4c8782614cd9565b9650614e5783615a24565b925050600101614e38565b614d0381615a4e565b614d03614e7782615a4e565b615ac6565b614d0381610ec1565b614d03614e9182610ec1565b610ec1565b614d03614e9182615a53565b6000614ead82615a30565b614eb78185615a3a565b9350614ec7818560208601615a8f565b614ed081615ae7565b9093019392505050565b6000614ee582615a30565b614eef8185610db4565b9350614eff818560208601615a8f565b9290920192915050565b6000614f16600c83615a3a565b6b636f6c6c20746f6f206c6f7760a01b815260200192915050565b6000614f3e600283615a3a565b61031360f41b815260200192915050565b6000614f5c600283615a3a565b61313560f01b815260200192915050565b6000614f7a602683615a3a565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000614fc2601b83615a3a565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614ffb602183615a3a565b7f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061503e600e83615a3a565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000615068600183615a3a565b603760f81b815260200192915050565b6000615085601283615a3a565b716e6f7420656e6f7567682062616c616e636560701b815260200192915050565b60006150b3600283615a3a565b61333760f01b815260200192915050565b60006150d1600283615a3a565b610c8d60f21b815260200192915050565b60006150ef600283615a3a565b61313160f01b815260200192915050565b600061510d602183615a3a565b7f5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615150601583615a3a565b740c6eae4ecca40e0c2e4c2dae640e8dede40d0d2ced605b1b815260200192915050565b6000615181600283615a3a565b61189960f11b815260200192915050565b600061519f600283615a3a565b61323560f01b815260200192915050565b60006151bd600f83615a3a565b6e0d8caeccad8e640e8dede40d0d2ced608b1b815260200192915050565b60006151e8600283615a3a565b61199960f11b815260200192915050565b6000615206600283615a3a565b61313760f01b815260200192915050565b6000615224602183615a3a565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000615267600c83615a3a565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061528f600283615a3a565b61313960f01b815260200192915050565b60006152ad600283615a3a565b61191b60f11b815260200192915050565b60006152cb602783615a3a565b7f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f815266766572666c6f7760c81b602082015260400192915050565b6000615314601d83615a3a565b7f696e76616c6964207261746520636f6c6c61746572616c20746f6b656e000000815260200192915050565b600061534d600a83615a3a565b6937b7363ca830bab9b2b960b11b815260200192915050565b6000615373600c83615a3a565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b600061539b602483615a3a565b7f5369676e6564536166654d6174683a207375627472616374696f6e206f766572815263666c6f7760e01b602082015260400192915050565b60006153e1601883615a3a565b7f34303120757365206f66206578697374696e67206c6f616e0000000000000000815260200192915050565b600061541a600183615a3a565b601b60f91b815260200192915050565b6000615437602083615a3a565b7f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f815260200192915050565b80516101008301906154758482614e7c565b5060208201516154886020850182614e62565b50604082015161549b6040850182614d09565b5060608201516154ae6060850182614d09565b5060808201516154c16080850182614d09565b5060a08201516154d460a0850182614e7c565b5060c08201516154e760c0850182614e7c565b5060e082015161354d60e0850182614e7c565b614d0381615a6c565b600061550f8285614d12565b60148201915061551f8284614e6b565b5060010192915050565b60006155358285614d12565b6014820191506155458284614e85565b5060200192915050565b600061555b8285614e96565b6004820191506155458284614e85565b6000610cb78284614eda565b60208101610ea98284614d09565b60208101610ea98284614cfa565b604081016155a18285614d09565b610cb76020830184614d09565b604081016155bc8285614d09565b610cb76020830184614cfa565b606081016155d78286614d09565b6155e46020830185614d09565b6110946040830184614e7c565b60a081016155ff8288614d09565b61560c6020830187614d09565b6156196040830186614e7c565b6156266060830185614e7c565b613a396080830184614e62565b60c081016156418289614d09565b61564e6020830188614d09565b61565b6040830187614e7c565b6156686060830186614e7c565b6156756080830185614e7c565b61568260a0830184614e7c565b979650505050505050565b6040810161569b8285614d09565b610cb76020830184614e7c565b606081016156b68286614d09565b6156c36020830185614e7c565b6110946040830184614cfa565b60208082528101610cb78184614d6f565b60208082528101610cb78184614dc8565b60208101610ea98284614e62565b60208101610ea98284614e7c565b6101c0810161571d828a614e7c565b61572a6020830189614e7c565b6157376040830188614e62565b6157446060830187614e7c565b6157516080830186614d23565b61575f610100830185614e16565b8181036101a08301526157728184614ea2565b9998505050505050505050565b60208082528101610cb78184614ea2565b60208082528101610ea981614f09565b60208082528101610ea981614f31565b60208082528101610ea981614f4f565b60208082528101610ea981614f6d565b60208082528101610ea981614fb5565b60208082528101610ea981614fee565b60208082528101610ea981615031565b60208082528101610ea98161505b565b60208082528101610ea981615078565b60208082528101610ea9816150a6565b60208082528101610ea9816150c4565b60208082528101610ea9816150e2565b60208082528101610ea981615100565b60208082528101610ea981615143565b60208082528101610ea981615174565b60208082528101610ea981615192565b60208082528101610ea9816151b0565b60208082528101610ea9816151db565b60208082528101610ea9816151f9565b60208082528101610ea981615217565b60208082528101610ea98161525a565b60208082528101610ea981615282565b60208082528101610ea9816152a0565b60208082528101610ea9816152be565b60208082528101610ea981615307565b60208082528101610ea981615340565b60208082528101610ea981615366565b60208082528101610ea98161538e565b60208082528101610ea9816153d4565b60208082528101610ea98161540d565b60208082528101610ea98161542a565b6040810161569b8285614e7c565b6060810161599c8286614e7c565b6155e46020830185614e7c565b60208101610ea982846154fa565b6040518181016001600160401b03811182821017156159d557600080fd5b604052919050565b60006001600160401b038211156159f357600080fd5b5060209081020190565b60006001600160401b03821115615a1357600080fd5b506020601f91909101601f19160190565b60200190565b50600490565b5190565b50600590565b90815260200190565b6000610ea982615a60565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b6000610ea9826000610ea982615a43565b82818337506000910152565b60005b83811015615aaa578181015183820152602001615a92565b8381111561354d5750506000910152565b6000610ea982615ad1565b6000610ea982615adc565b6000610ea982615af7565b6000610ea982615af1565b601f01601f191690565b60f81b90565b60601b90565b615b0681615a43565b811461253f57600080fd5b615b0681615a4e565b615b0681610ec156fea365627a7a723158206556ce952bb918dee3ec740a136beee857ddfddbf2cd1a94ff2cac96ca9a45c06c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}