{
  "_format": "hh-sol-artifact-1",
  "contractName": "LoanClosingsBase",
  "sourceName": "contracts/modules/LoanClosingsBase.sol",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "closer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralWithdrawAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralToLoanRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentMargin",
          "type": "uint256"
        }
      ],
      "name": "CloseWithDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "closer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "positionCloseSize",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "loanCloseAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "exitPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentLeverage",
          "type": "uint256"
        }
      ],
      "name": "CloseWithSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeRebatePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "basisPoint",
          "type": "uint256"
        }
      ],
      "name": "EarnRewardFail",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "ExternalSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "loanToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralWithdrawAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralToLoanRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentMargin",
          "type": "uint256"
        }
      ],
      "name": "Liquidate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sourceToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "destAmount",
          "type": "uint256"
        }
      ],
      "name": "LoanSwap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayBorrowingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "interestToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "effectiveInterest",
          "type": "uint256"
        }
      ],
      "name": "PayInterestTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayLendingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PayTradingFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "prevModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newModuleContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "module",
          "type": "bytes32"
        }
      ],
      "name": "ProtocolModuleContractReplaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "shouldRefund",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountInRbtc",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "name": "swapExcess",
      "type": "event"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliateRewardsHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "affiliateTradingTokenFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesReferrerBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "affiliatesUserReferrer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowerNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "borrowerOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegatedManagers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeRebatePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feesController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lenderInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "principalTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "paidTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "lenderOrders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxLoanTerm",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lendingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lendingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "closeAmount",
          "type": "uint256"
        }
      ],
      "name": "liquidate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanCloseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "seizedAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "seizedToken",
          "type": "address"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "liquidationIncentivePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "owedPerDay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositTotal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loanParams",
      "outputs": [
        {
          "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"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "loanPoolToUnderlying",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "loans",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "loanParamsId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingTradesId",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "active",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "principal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "collateral",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startMargin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startRate",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "lender",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lockedSOVAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "logicTargets",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxDisagreement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxSwapSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minReferralsToPayout",
      "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": "pause",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paySwapExcessToBorrowerThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "priceFeeds",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "protocolTokenPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "loanId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "rollover",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverBaseReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rolloverFlexFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sourceBuffer",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "sovrynSwapContractRegistryAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "specialRebates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "supportedTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "swapsImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tradingFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensHeld",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tradingFeeTokensPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "underlyingToLoanPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userNotFirstTradeFlag",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wrbtcToken",
      "outputs": [
        {
          "internalType": "contract IWrbtcERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526001600055678ac7230489e80000601555670214e8348c4f000060185567013fbe85edc90000601b55674563918244f40000602055674563918244f40000602155674563918244f400006027556127106028556802b5e3af16b1880000602955650f478e084000602b5567016345785d8a0000602c556802b5e3af16b1880000602f5560036035556801158e460913d00000603955348015620000a657600080fd5b506000620000bc6001600160e01b036200011016565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000114565b3390565b614ead80620001246000396000f3fe60806040526004361061036b5760003560e01c806392d894f8116101c6578063cf0eda84116100f7578063ee54a4ec11610095578063f589a3e71161006f578063f589a3e7146109a5578063f6ddc8b3146109ba578063f706b1f2146109cf578063f851a440146109e45761036b565b8063ee54a4ec1461095b578063f0e085f514610970578063f2fde38b146109855761036b565b8063d485045e116100d1578063d485045e146108ef578063e4f3e7391461090f578063e8f6276414610931578063edab119f146109465761036b565b8063cf0eda84146108a5578063d288208c146108c5578063d473c2da146108da5761036b565b8063b9cffa3e11610164578063c4a908151161013e578063c4a90815146107f7578063c4d66de81461082f578063cb6eacd114610851578063cd5d808d146108855761036b565b8063b9cffa3e146107ad578063ba4861e9146107c2578063bdee453c146107d75761036b565b8063ae0a8530116101a0578063ae0a853014610736578063afe840091461074b578063b30643d91461076d578063b7e152411461078d5761036b565b806392d894f8146106ec578063959083d31461070c578063acc04348146107215761036b565b80634f28cac2116102a0578063742e67981161023e5780638456cb59116102185780638456cb591461068d5780638da5cb5b146106a25780638dc48ba5146106b75780638f32d59b146106d75761036b565b8063742e67981461064e57806378d849ed146106635780637a8faeb8146106785761036b565b806362fff3f61161027a57806362fff3f6146105c857806368c4ac26146105f95780636e663730146106195780637420ca3e146106395761036b565b80634f28cac21461056f578063569fc1fb14610584578063574442cc146105b35761036b565b80632f4707641161030d5780633fca506e116102e75780633fca506e146104fa5780634115a2b61461051a5780634203e3951461053a5780634699f8461461055a5761036b565b80632f470764146104a55780633432423c146104ba5780633452d2d4146104da5761036b565b80631b7bde74116103495780631b7bde7414610416578063218b39c61461044357806324cc5749146104635780632a324027146104905761036b565b8063065d810f146103995780630676c1b7146103d457806317548b79146103f6575b34801561037757600080fd5b5060405162461bcd60e51b815260040161039090614c53565b60405180910390fd5b3480156103a557600080fd5b506103b96103b4366004613eea565b6109f9565b6040516103cb96959493929190614d62565b60405180910390f35b3480156103e057600080fd5b506103e9610a39565b6040516103cb91906147c5565b34801561040257600080fd5b506103e9610411366004614018565b610a48565b34801561042257600080fd5b50610436610431366004613eb0565b610a63565b6040516103cb9190614d03565b34801561044f57600080fd5b506103e961045e366004613e92565b610a80565b34801561046f57600080fd5b5061048361047e366004613e92565b610a9b565b6040516103cb9190614991565b34801561049c57600080fd5b50610436610ab0565b3480156104b157600080fd5b50610436610ab6565b3480156104c657600080fd5b506103b96104d5366004613eea565b610abc565b3480156104e657600080fd5b506104366104f5366004613e92565b610afc565b34801561050657600080fd5b50610436610515366004613e92565b610b0e565b34801561052657600080fd5b50610483610535366004613f56565b610b20565b34801561054657600080fd5b50610436610555366004613e92565b610b40565b34801561056657600080fd5b50610436610b52565b34801561057b57600080fd5b50610436610b58565b34801561059057600080fd5b506105a461059f366004613f38565b610b5e565b6040516103cb93929190614d39565b3480156105bf57600080fd5b50610436610b7f565b3480156105d457600080fd5b506105e86105e3366004613eb0565b610b85565b6040516103cb959493929190614d47565b34801561060557600080fd5b50610483610614366004613e92565b610bbf565b34801561062557600080fd5b506103e9610634366004613e92565b610bd4565b34801561064557600080fd5b506103e9610bef565b34801561065a57600080fd5b50610436610bfe565b34801561066f57600080fd5b506103e9610c04565b34801561068457600080fd5b50610436610c13565b34801561069957600080fd5b50610483610c19565b3480156106ae57600080fd5b506103e9610c22565b3480156106c357600080fd5b506103e96106d2366004613e92565b610c31565b3480156106e357600080fd5b50610483610c4c565b3480156106f857600080fd5b50610436610707366004613e92565b610c72565b34801561071857600080fd5b50610436610c84565b34801561072d57600080fd5b50610436610c8a565b34801561074257600080fd5b50610436610c90565b34801561075757600080fd5b50610760610c96565b6040516103cb9190614ae4565b34801561077957600080fd5b50610436610788366004613e92565b610ca5565b34801561079957600080fd5b506104366107a8366004613e92565b610cb7565b3480156107b957600080fd5b506103e9610cc9565b3480156107ce57600080fd5b506103e9610cd8565b3480156107e357600080fd5b506104366107f2366004613e92565b610ce7565b34801561080357600080fd5b50610817610812366004613f38565b610cf9565b6040516103cb9c9b9a99989796959493929190614a31565b34801561083b57600080fd5b5061084f61084a366004613e92565b610d6b565b005b34801561085d57600080fd5b5061087161086c366004613f38565b610e40565b6040516103cb9897969594939291906149ba565b34801561089157600080fd5b506104366108a0366004613eb0565b610e92565b3480156108b157600080fd5b5061084f6108c0366004613fc2565b610eaf565b3480156108d157600080fd5b506103e9610f3b565b3480156108e657600080fd5b50610436610f4a565b3480156108fb57600080fd5b5061043661090a366004613e92565b610f50565b61092261091d366004613f75565b610f62565b6040516103cb93929190614d11565b34801561093d57600080fd5b506103e9610fd0565b34801561095257600080fd5b50610436610fdf565b34801561096757600080fd5b50610436610fe5565b34801561097c57600080fd5b50610436610fef565b34801561099157600080fd5b5061084f6109a0366004613e92565b610ff5565b3480156109b157600080fd5b50610436611025565b3480156109c657600080fd5b5061043661102b565b3480156109db57600080fd5b506103e9611031565b3480156109f057600080fd5b506103e9611040565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60185481565b601f5481565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316610c6361104f565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b610d73610c4c565b610d8f5760405162461bcd60e51b815260040161039090614c23565b63e4f3e73960e01b600081905260056020527fe1cb396722e7eabe79fbbfe4b479997758c9eb9965437583a97ce608d5a86600546001600160a01b031690610dd79083611053565b610de86333c3b6a160e21b83611053565b6f4c6f616e436c6f73696e67734261736560801b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b600160005414610ed15760405162461bcd60e51b815260040161039090614c93565b6002600055603d5460ff1615610ef95760405162461bcd60e51b815260040161039090614b03565b333214610f185760405162461bcd60e51b815260040161039090614bd3565b610f3183604051806020016040528060008152506110cf565b5050600160005550565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b6000806000600160005414610f895760405162461bcd60e51b815260040161039090614c93565b6002600055603d5460ff1615610fb15760405162461bcd60e51b815260040161039090614b03565b610fbc868686611a2a565b600160005591989097509095509350505050565b6014546001600160a01b031681565b601b5481565b6509184e72a00081565b60285481565b610ffd610c4c565b6110195760405162461bcd60e51b815260040161039090614c23565b61102281612042565b50565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b038316908117909155156110ae576110a8600d6001600160e01b0319841663ffffffff6120c416565b506110cb565b6110c9600d6001600160e01b0319841663ffffffff61210e16565b505b5050565b6000828152600660209081526040808320600181015484526007909252909120600382015460ff166111135760405162461bcd60e51b815260040161039090614c83565b80546111315760405162461bcd60e51b815260040161039090614c43565b600782015461114890610e1063ffffffff6121cf16565b42116111665760405162461bcd60e51b815260040161039090614bc3565b600b8201546001600160a01b03908116600090815260226020526040902054166111a25760405162461bcd60e51b815260040161039090614b83565b600b82015460028201546111c2916001600160a01b039081169116612218565b81546000818152600c60209081526040808320600b808801546001600160a01b039081168652908452828520600288015482168087529452919093206003860154600a8801549495919461121e94879490928116911642612302565b600080856007015442111561127157600786015461124390429063ffffffff6121cf16565b845490925061125990839063ffffffff61235d16565b905061126e816201518063ffffffff61239716565b90505b6006850154156113d05760006113336907baab4146b63dd0000061132789600b0160009054906101000a90046001600160a01b03166001600160a01b0316638325a1c06040518163ffffffff1660e01b815260040160206040518083038186803b1580156112de57600080fd5b505afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113169190810190614036565b60048b01549063ffffffff61235d16565b9063ffffffff61239716565b600185015490915061134b908263ffffffff6123d916565b600185018190558554611364919063ffffffff6121cf16565b6001850155808555600686015483106113ab576113a162015180611395858a600701546123d990919063ffffffff16565b9063ffffffff6123d916565b60078801556113ca565b600686015460078801546113c49163ffffffff6123d916565b60078801555b50611420565b622819a08210611402576113f8620151806113958489600701546123d990919063ffffffff16565b6007870155611420565b600786015461141a90622819a063ffffffff6123d916565b60078701555b6007860154600090611438904263ffffffff6121cf16565b855490915061144e90829063ffffffff61235d16565b9050611463816201518063ffffffff61239716565b600186015490915061147b908263ffffffff6123d916565b60018601556002840154611495908263ffffffff6123d916565b60028501556114aa818363ffffffff6123d916565b905060008061167a89604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508960405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600482015481526020016005820154815260200160068201548152505060008660018f6123fe565b5091509150828211156118af5760028801546116a1906001600160a01b031684840361248e565b1561188c5761186f89604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508960405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508585038d612594565b509092506118859050818363ffffffff6121cf16565b90506118af565b600a89015460028901546118af916001600160a01b0390811691168585036125ed565b60058901546118c4908263ffffffff6121cf16565b60058a015583156118f057600b89015460028901546118f0916001600160a01b0390811691168661267b565b6003880154600289015460048b015460009261191a926001600160a01b0391821692911690612720565b905080156119555760058a0154611937908263ffffffff6121cf16565b60058b01556003890154611955906001600160a01b0316338361287b565b60028054908a015460038b01546004808e015460058f01546040516317f8680960e11b81526000966001600160a01b0390811696632ff0d012966119a296918316959216939192016148f1565b604080518083038186803b1580156119b957600080fd5b505afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f19190810190614054565b5090506729a2241af62c00008111611a1b5760405162461bcd60e51b815260040161039090614c33565b50505050505050505050505050565b60008381526006602090815260408083206001810154845260079092528220600382015483928392909160ff16611a735760405162461bcd60e51b815260040161039090614c83565b8054611a915760405162461bcd60e51b815260040161039090614c43565b6002805490820154600383015460048581015460058701546040516317f8680960e11b815260009687966001600160a01b0391821696632ff0d01296611ae396928416959390911693919291016148f1565b604080518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b329190810190614054565b915091508260050154821115611b5a5760405162461bcd60e51b815260040161039090614bc3565b879650600080611b7986600401548760050154868860050154876128b1565b509150915081891015611ba157611b9a82611327838c63ffffffff61235d16565b9750611bb8565b81891115611bb457819850809750611bb8565b8097505b88611bd55760405162461bcd60e51b815260040161039090614bf3565b6002850154611bee906001600160a01b0316308b6129e5565b6000611dce87604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508760405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508c8a600a0160009054906101000a90046001600160a01b0316612b06565b9050808a1115611dfb576002860154600a880154611dfb916001600160a01b039081169116838d0361287b565b8015611e22576002860154600b880154611e22916001600160a01b03908116911683612b74565b60038601546001600160a01b031697508815611e5d576005870154611e4d908a63ffffffff6121cf16565b6005880155611e5d888d8b61287b565b611e67878b612bd7565b6120328660405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600482015481526020016005820154815260200160068201548152505088604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508c8c888a6002612cae565b5050505050505093509350939050565b6001600160a01b0381166120685760405162461bcd60e51b815260040161039090614b23565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006120d08383612d39565b6121045750600180830180548083018083556000928352602080842090920185905584835290859052604090912055612108565b5060005b92915050565b600061211a8383612d39565b15612104576000828152602084905260409020546001840154600019918201910180821461219257600085600101828154811061215357fe5b906000526020600020015490508086600101848154811061217057fe5b6000918252602080832090910192909255918252869052604090206001830190555b600084815260208690526040812055600185018054806121ae57fe5b60019003818190600052602060002001600090559055600192505050612108565b600061221183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d4e565b9392505050565b6001600160a01b038083166000908152600b6020908152604080832093851683529290529081206001810154909190158015906122585750600482015415155b156122f55761228f6201518061132784600101546122838660040154426121cf90919063ffffffff16565b9063ffffffff61235d16565b42600484015560028301549091508111156122ab575060028101545b80156122f05760038201546122c6908263ffffffff6123d916565b600383015560028201546122e0908263ffffffff6121cf16565b60028301556122f084848361267b565b6122fc565b4260048301555b50505050565b60006123386a07259756a8d619980000006113276015546122838b600001546122838d60020154896121cf90919063ffffffff16565b6002880183905590508015612354576123548387878785612d7a565b50505050505050565b60008261236c57506000612108565b8282028284828161237957fe5b04146122115760405162461bcd60e51b815260040161039090614c13565b600061221183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130c5565b6000828201838110156122115760405162461bcd60e51b815260040161039090614b33565b6000806000612437896000015189608001518a606001518c61014001518b8e60a001518b61242d57600061242f565b8c5b60008c6130fc565b919450925090508583101561245e5760405162461bcd60e51b815260040161039090614c03565b8860a001518211156124825760405162461bcd60e51b815260040161039090614b73565b96509650969350505050565b600254602d54604051630a7549df60e21b8152600092839283926001600160a01b03928316926329d5277c926124cc928a92909116906004016147d3565b604080518083038186803b1580156124e357600080fd5b505afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061251b9190810190614054565b9092509050600061253682611327878663ffffffff61235d16565b90507fe46714304b3de2a7b58afcc0bafe0a6deabd30a647332cb479124142fdb14b0b6509184e72a000821186836509184e72a00060405161257b949392919061499f565b60405180910390a16509184e72a0001095945050505050565b60008060006125bc8760000151876060015188608001518a6101400151898a6000808c6130fc565b91945092509050848211156125e35760405162461bcd60e51b815260040161039090614b73565b9450945094915050565b80156110c9576001600160a01b03821660009081526016602052604090205461261c908263ffffffff6123d916565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af635879061266e908590614d03565b60405180910390a3505050565b600061269f68056bc75e2d631000006113276015548561235d90919063ffffffff16565b90506126ac8484836125ed565b6126c683856126c1858563ffffffff6121cf16565b612b74565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a612705858563ffffffff6121cf16565b6040516127129190614d03565b60405180910390a350505050565b60025460405163d138f9a160e01b815260009182916001600160a01b039091169063d138f9a190612759908790899088906004016148c9565b60206040518083038186803b15801561277157600080fd5b505afa158015612785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127a99190810190614036565b600254602d54602b5460405163d138f9a160e01b81529394506000936001600160a01b039384169363d138f9a1936127e9939116918b91906004016148c9565b60206040518083038186803b15801561280157600080fd5b505afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128399190810190614036565b905061287161286068056bc75e2d63100000611327602c548661235d90919063ffffffff16565b61139583600263ffffffff61235d16565b9695505050505050565b80156110c957602d546001600160a01b03848116911614156128a6576128a1828261325a565b6110c9565b6110c9838383612b74565b6021546000908190848611806128c5575083155b156128cf576129da565b8086116128e35750869150859050846129da565b60006128fd86674563918244f4000063ffffffff6123d916565b905061292068056bc75e2d631000006113278b612283858463ffffffff6123d916565b935061294e612941670de0b6b3a76400006113278b8963ffffffff61235d16565b859063ffffffff6121cf16565b935061297c612963828463ffffffff6121cf16565b6113278668056bc75e2d6310000063ffffffff61235d16565b93508884111561298a578893505b6129b36129a68368056bc75e2d6310000063ffffffff6123d916565b859063ffffffff61235d16565b92506129ca6064611327858863ffffffff61239716565b9250878311156129d8578792505b505b955095509592505050565b8015612ae85734612a01576129fc83338484613323565b6128a1565b602d546001600160a01b03848116911614612a2e5760405162461bcd60e51b815260040161039090614b43565b80341015612a4e5760405162461bcd60e51b815260040161039090614cf3565b602d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9e57600080fd5b505af1158015612ab2573d6000803e3d6000fd5b505050506001600160a01b03831630149050612ad457612ad483308484613323565b803411156128a1576128a13382340361336f565b34156110c95760405162461bcd60e51b815260040161039090614b43565b60008281612b1586888461340b565b90506000818310612b2e57509081900390600090612b4c565b5060009190819003908115612b4c57612b4c8760600151868461287b565b8015612b6657612b66876060015189610160015183612b74565b50909150505b949350505050565b80156110c957612b946001600160a01b038416838363ffffffff6135a916565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a18360405161266e9190614d03565b80612bf45760405162461bcd60e51b815260040161039090614c63565b8160040154811415612c905760006004830181905560038301805460ff1916905542600784015560028301558154612c3490600f9063ffffffff61210e16565b508154600b8301546001600160a01b03166000908152601160205260409020612c629163ffffffff61210e16565b508154600a8301546001600160a01b031660009081526012602052604090206110a89163ffffffff61210e16565b6004820154612ca5908263ffffffff6121cf16565b60048301555050565b6002816002811115612cbc57fe5b1415612354578560000151336001600160a01b03168761014001516001600160a01b03167f46fa03303782eb2f686515f6c0100f9a62dabe587b0d3f5a4fc0c822d6e532d38961016001518b606001518c608001518b8b8b8b604051612d289796959493929190614894565b60405180910390a450505050505050565b60009081526020919091526040902054151590565b60008184841115612d725760405162461bcd60e51b81526004016103909190614af2565b505050900390565b602f546002546001600160a01b038581166000908152603c602090815260408083208885168452909152812054909392919091169015612ddd576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b9116612e1b68056bc75e2d631000006113278c8b63ffffffff61235d16565b604051602401612e2d939291906148c9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612e6b91906147ae565b600060405180830381855afa9150503d8060008114612ea6576040519150601f19603f3d011682016040523d82523d6000602084013e612eab565b606091505b50915091506001821415612ec157602081015194505b84156130b95760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612efd92911690899060040161495b565b602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f4f9190810190613f1a565b50603854603f546040516000926001600160a01b031691612f76918e918a91602401614976565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b17905251612fab91906147ae565b6000604051808303816000865af19150503d8060008114612fe8576040519150601f19603f3d011682016040523d82523d6000602084013e612fed565b606091505b50509050801561306457601f5461300a908763ffffffff6123d916565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db215091613057918b918d91614d39565b60405180910390a46130b7565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e710812916130ae918b918d91614d39565b60405180910390a45b505b50505050505050505050565b600081836130e65760405162461bcd60e51b81526004016103909190614af2565b5060008385816130f257fe5b0495945050505050565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a1660808401528351918201845288825281018790529182018590526000918291829161316191908e888886613602565b90935091506131708b83613827565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d3916131a9918f918f9188918a91600401614919565b60206040518083038186803b1580156131c157600080fd5b505afa1580156131d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131f99190810190614036565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c868860405161324393929190614976565b60405180910390a499509950999650505050505050565b80156110cb57602d546001600160a01b031647808311156132d657604051632e1a7d4d60e01b81526001600160a01b03831690632e1a7d4d906132a39084870390600401614d03565b600060405180830381600087803b1580156132bd57600080fd5b505af11580156132d1573d6000803e3d6000fd5b505050505b6132e0848461336f565b836001600160a01b0316826001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1856040516127129190614d03565b80156122fc576001600160a01b038316301415613354576122f06001600160a01b038516838363ffffffff6135a916565b6122fc6001600160a01b03851684848463ffffffff6138f516565b8047101561338f5760405162461bcd60e51b815260040161039090614ba3565b6000826001600160a01b0316826040516133a8906147ba565b60006040518083038185875af1925050503d80600081146133e5576040519150601f19603f3d011682016040523d82523d6000602084013e6133ea565b606091505b50509050806110c95760405162461bcd60e51b815260040161039090614b93565b60006134208361016001518560600151612218565b82516000908152600c602090815260408083206101608701516001600160a01b039081168552600b845282852060608a0151909116855290925290912060e08501514290811115613472575060e08501515b61349183876000015189606001518a608001518a610140015186612302565b600086608001518610156134c257608087015184546134bb9190611327908963ffffffff61235d16565b90506134c6565b5082545b83546134d8908263ffffffff6121cf16565b845560018301546134ef908263ffffffff6121cf16565b600184015560e087015160009061350c908463ffffffff6121cf16565b905061351e818363ffffffff61235d16565b9050613533816201518063ffffffff61239716565b90508760800151871015613560576001850154613556908263ffffffff6121cf16565b6001860155613568565b600060018601555b835461357a908863ffffffff6121cf16565b8455600284015481811161358f576000613593565b8181035b6002909501949094559450505050509392505050565b6040516110c990849063a9059cbb60e01b906135cb908690869060240161495b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613919565b845160009081901515806136195750602087015115155b6136355760405162461bcd60e51b815260040161039090614c73565b602087015161364657865160208801525b60208701518751111561366b5760405162461bcd60e51b815260040161039090614bb3565b6000806000876137285760408a01516136e757851561369c576136958a60005b60200201516139fe565b90506136b0565b6136ad8a60005b6020020151613a2e565b90505b80156136e25760808b01518b516136d391908b908e60015b602002015185613a52565b89516136df90826121cf565b8a525b613728565b85156136ff576136f88a600261368b565b905061370d565b61370a8a60026136a3565b90505b80156137285760408a015161372290826123d9565b60408b01525b8651156137475760405162461bcd60e51b815260040161039090614ca3565b6137518b8b613ba2565b60408c0151919450925061379d578951821461377f5760405162461bcd60e51b815260040161039090614cd3565b801561379857613795828263ffffffff6123d916565b91505b613817565b60208a01518211156137c15760405162461bcd60e51b815260040161039090614b63565b60408a01518310156137e55760405162461bcd60e51b815260040161039090614b13565b80156138175760808b015160208c015161380491908b908e60006136c8565b613814838263ffffffff6121cf16565b92505b5090999098509650505050505050565b60295480156110c957602d546000906001600160a01b03858116911614156138505750816138d5565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea90613882908790879060040161495b565b60206040518083038186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138d29190810190614036565b90505b818111156122fc5760405162461bcd60e51b815260040161039090614be3565b6040516122fc9085906323b872dd60e01b906135cb908790879087906024016148c9565b61392b826001600160a01b0316613cb4565b6139475760405162461bcd60e51b815260040161039090614ce3565b60006060836001600160a01b03168360405161396391906147ae565b6000604051808303816000865af19150503d80600081146139a0576040519150601f19603f3d011682016040523d82523d6000602084013e6139a5565b606091505b5091509150816139c75760405162461bcd60e51b815260040161039090614b53565b8051156122fc57808060200190516139e29190810190613f1a565b6122fc5760405162461bcd60e51b815260040161039090614cb3565b600061210868056bc75e2d63100000613a22603e548561235d90919063ffffffff16565b9063ffffffff613ced16565b600061210868056bc75e2d63100000613a226018548561235d90919063ffffffff16565b808015613b9a576001600160a01b038681166000908152603360205260409020541615613b08576001600160a01b03808716600090815260336020526040902054613aa09116878684613d2f565b5050613b05613ac768056bc75e2d631000006113276039548561235d90919063ffffffff16565b613af9613aec68056bc75e2d631000006113276020548761235d90919063ffffffff16565b849063ffffffff6121cf16565b9063ffffffff6121cf16565b90505b6001600160a01b038416600090815260196020526040902054613b31908263ffffffff6123d916565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613b85908690614d03565b60405180910390a4613b9a8686868686612d7a565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b97613be99792969195929492939192916024016147ee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b031690613c3b9084906147ae565b600060405180830381855af49150503d8060008114613c76576040519150601f19603f3d011682016040523d82523d6000602084013e613c7b565b606091505b509250905080613c9d5760405162461bcd60e51b815260040161039090614cc3565b602082015193506040820151925050509250929050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612b6c575050151592915050565b600061221183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613dc8565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe90613d6a908990899089908990600401614856565b6040805180830381600087803b158015613d8357600080fd5b505af1158015613d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613dbb9190810190614054565b9097909650945050505050565b60008183613de95760405162461bcd60e51b81526004016103909190614af2565b5083613df757506000612211565b6000836001860381613e0557fe5b0460010195945050505050565b803561210881614e3b565b805161210881614e4f565b803561210881614e58565b803561210881614e61565b60008083601f840112613e5057600080fd5b50813567ffffffffffffffff811115613e6857600080fd5b602083019150836001820283011115613e8057600080fd5b9250929050565b805161210881614e58565b600060208284031215613ea457600080fd5b6000612b6c8484613e12565b60008060408385031215613ec357600080fd5b6000613ecf8585613e12565b9250506020613ee085828601613e12565b9150509250929050565b60008060408385031215613efd57600080fd5b6000613f098585613e12565b9250506020613ee085828601613e28565b600060208284031215613f2c57600080fd5b6000612b6c8484613e1d565b600060208284031215613f4a57600080fd5b6000612b6c8484613e28565b60008060408385031215613f6957600080fd5b6000613ecf8585613e28565b600080600060608486031215613f8a57600080fd5b6000613f968686613e28565b9350506020613fa786828701613e12565b9250506040613fb886828701613e28565b9150509250925092565b600080600060408486031215613fd757600080fd5b6000613fe38686613e28565b935050602084013567ffffffffffffffff81111561400057600080fd5b61400c86828701613e3e565b92509250509250925092565b60006020828403121561402a57600080fd5b6000612b6c8484613e33565b60006020828403121561404857600080fd5b6000612b6c8484613e87565b6000806040838503121561406757600080fd5b60006140738585613e87565b9250506020613ee085828601613e87565b61408d81614dce565b82525050565b61408d81614dd9565b61408d81614dde565b60006140b082614dbc565b6140ba8185614dc0565b93506140ca818560208601614e05565b9290920192915050565b61408d81614dfa565b60006140e882614dbc565b6140f28185614dc5565b9350614102818560208601614e05565b61410b81614e31565b9093019392505050565b6000614122600683614dc5565b6514185d5cd95960d21b815260200192915050565b6000614144601b83614dc5565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b600061417d602683614dc5565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006141c5601b83614dc5565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006141fe601083614dc5565b6f1ddc9bdb99c8185cdcd95d081cd95b9d60821b815260200192915050565b600061422a602083614dc5565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000614263601383614dc5565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b6000614292601783614dc5565b7f65786365737369766520736f7572636520616d6f756e74000000000000000000815260200192915050565b60006142cb600e83614dc5565b6d34b73b30b634b2103632b73232b960911b815260200192915050565b60006142f5603a83614dc5565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b6000614354601d83614dc5565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b600061438d601c83614dc5565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b60006143c6601083614dc5565b6f3432b0b63a343c903837b9b4ba34b7b760811b815260200192915050565b60006143f2601283614dc5565b711bdb9b1e481153d05cc818d85b8818d85b1b60721b815260200192915050565b6000614420600e83614dc5565b6d7377617020746f6f206c6172676560901b815260200192915050565b600061444a601483614dc5565b736e6f7468696e6720746f206c697175696461746560601b815260200192915050565b600061447a601883614dc5565b7f696e73756666696369656e74206465737420616d6f756e740000000000000000815260200192915050565b60006144b3602183614dc5565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006144f6600c83614dc5565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061451e601283614dc5565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b600061454c601583614dc5565b746c6f616e506172616d73206e6f742065786973747360581b815260200192915050565b600061457d601483614dc5565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006145ad601083614dc5565b6f6e6f7468696e6720746f20636c6f736560801b815260200192915050565b60006145d9602e83614dc5565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b6000612108600083614dc0565b6000614636600e83614dc5565b6d1b1bd85b881a5cc818db1bdcd95960921b815260200192915050565b6000614660600c83614dc5565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b6000614688600d83614dc5565b6c696e76616c696420737461746560981b815260200192915050565b60006146b1602a83614dc5565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006146fd600b83614dc5565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b6000614724601683614dc5565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b6000614756601f83614dc5565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b600061478f601083614dc5565b6f3737ba1032b737bab3b41032ba3432b960811b815260200192915050565b600061221182846140a5565b60006121088261461c565b602081016121088284614084565b604081016147e18285614084565b6122116020830184614084565b60e081016147fc828a614084565b6148096020830189614084565b6148166040830188614084565b6148236060830187614084565b614830608083018661409c565b61483d60a083018561409c565b61484a60c083018461409c565b98975050505050505050565b608081016148648287614084565b6148716020830186614084565b61487e6040830185614084565b61488b606083018461409c565b95945050505050565b60e081016148a2828a614084565b6148af6020830189614084565b6148bc6040830188614084565b614823606083018761409c565b606081016148d78286614084565b6148e46020830185614084565b612b6c604083018461409c565b608081016148ff8287614084565b61490c6020830186614084565b61487e604083018561409c565b60a081016149278288614084565b6149346020830187614084565b614941604083018661409c565b61494e606083018561409c565b612871608083018461409c565b604081016149698285614084565b612211602083018461409c565b606081016149848286614084565b6148e4602083018561409c565b602081016121088284614093565b608081016149ad8287614093565b61490c602083018661409c565b61010081016149c9828b61409c565b6149d6602083018a614093565b6149e36040830189614084565b6149f06060830188614084565b6149fd6080830187614084565b614a0a60a083018661409c565b614a1760c083018561409c565b614a2460e083018461409c565b9998505050505050505050565b6101808101614a40828f61409c565b614a4d602083018e61409c565b614a5a604083018d61409c565b614a67606083018c614093565b614a74608083018b61409c565b614a8160a083018a61409c565b614a8e60c083018961409c565b614a9b60e083018861409c565b614aa961010083018761409c565b614ab761012083018661409c565b614ac5610140830185614084565b614ad3610160830184614084565b9d9c50505050505050505050505050565b6020810161210882846140d4565b6020808252810161221181846140dd565b6020808252810161210881614115565b6020808252810161210881614137565b6020808252810161210881614170565b60208082528101612108816141b8565b60208082528101612108816141f1565b602080825281016121088161421d565b6020808252810161210881614256565b6020808252810161210881614285565b60208082528101612108816142be565b60208082528101612108816142e8565b6020808252810161210881614347565b6020808252810161210881614380565b60208082528101612108816143b9565b60208082528101612108816143e5565b6020808252810161210881614413565b602080825281016121088161443d565b602080825281016121088161446d565b60208082528101612108816144a6565b60208082528101612108816144e9565b6020808252810161210881614511565b602080825281016121088161453f565b6020808252810161210881614570565b60208082528101612108816145a0565b60208082528101612108816145cc565b6020808252810161210881614629565b6020808252810161210881614653565b602080825281016121088161467b565b60208082528101612108816146a4565b60208082528101612108816146f0565b6020808252810161210881614717565b6020808252810161210881614749565b6020808252810161210881614782565b60208101612108828461409c565b60608101614d1f828661409c565b614d2c602083018561409c565b612b6c6040830184614084565b60608101614984828661409c565b60a08101614d55828861409c565b614934602083018761409c565b60c08101614d70828961409c565b614d7d602083018861409c565b614d8a604083018761409c565b614d97606083018661409c565b614da4608083018561409c565b614db160a083018461409c565b979650505050505050565b5190565b919050565b90815260200190565b600061210882614dee565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b600061210882614dce565b60005b83811015614e20578181015183820152602001614e08565b838111156122fc5750506000910152565b601f01601f191690565b614e4481614dce565b811461102257600080fd5b614e4481614dd9565b614e4481614dde565b614e4481614de156fea365627a7a723158201a2a2471b762f4ea0583c9a91260c4bd51d329a1a5d388ee674225aee81d5f9a6c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x60806040526004361061036b5760003560e01c806392d894f8116101c6578063cf0eda84116100f7578063ee54a4ec11610095578063f589a3e71161006f578063f589a3e7146109a5578063f6ddc8b3146109ba578063f706b1f2146109cf578063f851a440146109e45761036b565b8063ee54a4ec1461095b578063f0e085f514610970578063f2fde38b146109855761036b565b8063d485045e116100d1578063d485045e146108ef578063e4f3e7391461090f578063e8f6276414610931578063edab119f146109465761036b565b8063cf0eda84146108a5578063d288208c146108c5578063d473c2da146108da5761036b565b8063b9cffa3e11610164578063c4a908151161013e578063c4a90815146107f7578063c4d66de81461082f578063cb6eacd114610851578063cd5d808d146108855761036b565b8063b9cffa3e146107ad578063ba4861e9146107c2578063bdee453c146107d75761036b565b8063ae0a8530116101a0578063ae0a853014610736578063afe840091461074b578063b30643d91461076d578063b7e152411461078d5761036b565b806392d894f8146106ec578063959083d31461070c578063acc04348146107215761036b565b80634f28cac2116102a0578063742e67981161023e5780638456cb59116102185780638456cb591461068d5780638da5cb5b146106a25780638dc48ba5146106b75780638f32d59b146106d75761036b565b8063742e67981461064e57806378d849ed146106635780637a8faeb8146106785761036b565b806362fff3f61161027a57806362fff3f6146105c857806368c4ac26146105f95780636e663730146106195780637420ca3e146106395761036b565b80634f28cac21461056f578063569fc1fb14610584578063574442cc146105b35761036b565b80632f4707641161030d5780633fca506e116102e75780633fca506e146104fa5780634115a2b61461051a5780634203e3951461053a5780634699f8461461055a5761036b565b80632f470764146104a55780633432423c146104ba5780633452d2d4146104da5761036b565b80631b7bde74116103495780631b7bde7414610416578063218b39c61461044357806324cc5749146104635780632a324027146104905761036b565b8063065d810f146103995780630676c1b7146103d457806317548b79146103f6575b34801561037757600080fd5b5060405162461bcd60e51b815260040161039090614c53565b60405180910390fd5b3480156103a557600080fd5b506103b96103b4366004613eea565b6109f9565b6040516103cb96959493929190614d62565b60405180910390f35b3480156103e057600080fd5b506103e9610a39565b6040516103cb91906147c5565b34801561040257600080fd5b506103e9610411366004614018565b610a48565b34801561042257600080fd5b50610436610431366004613eb0565b610a63565b6040516103cb9190614d03565b34801561044f57600080fd5b506103e961045e366004613e92565b610a80565b34801561046f57600080fd5b5061048361047e366004613e92565b610a9b565b6040516103cb9190614991565b34801561049c57600080fd5b50610436610ab0565b3480156104b157600080fd5b50610436610ab6565b3480156104c657600080fd5b506103b96104d5366004613eea565b610abc565b3480156104e657600080fd5b506104366104f5366004613e92565b610afc565b34801561050657600080fd5b50610436610515366004613e92565b610b0e565b34801561052657600080fd5b50610483610535366004613f56565b610b20565b34801561054657600080fd5b50610436610555366004613e92565b610b40565b34801561056657600080fd5b50610436610b52565b34801561057b57600080fd5b50610436610b58565b34801561059057600080fd5b506105a461059f366004613f38565b610b5e565b6040516103cb93929190614d39565b3480156105bf57600080fd5b50610436610b7f565b3480156105d457600080fd5b506105e86105e3366004613eb0565b610b85565b6040516103cb959493929190614d47565b34801561060557600080fd5b50610483610614366004613e92565b610bbf565b34801561062557600080fd5b506103e9610634366004613e92565b610bd4565b34801561064557600080fd5b506103e9610bef565b34801561065a57600080fd5b50610436610bfe565b34801561066f57600080fd5b506103e9610c04565b34801561068457600080fd5b50610436610c13565b34801561069957600080fd5b50610483610c19565b3480156106ae57600080fd5b506103e9610c22565b3480156106c357600080fd5b506103e96106d2366004613e92565b610c31565b3480156106e357600080fd5b50610483610c4c565b3480156106f857600080fd5b50610436610707366004613e92565b610c72565b34801561071857600080fd5b50610436610c84565b34801561072d57600080fd5b50610436610c8a565b34801561074257600080fd5b50610436610c90565b34801561075757600080fd5b50610760610c96565b6040516103cb9190614ae4565b34801561077957600080fd5b50610436610788366004613e92565b610ca5565b34801561079957600080fd5b506104366107a8366004613e92565b610cb7565b3480156107b957600080fd5b506103e9610cc9565b3480156107ce57600080fd5b506103e9610cd8565b3480156107e357600080fd5b506104366107f2366004613e92565b610ce7565b34801561080357600080fd5b50610817610812366004613f38565b610cf9565b6040516103cb9c9b9a99989796959493929190614a31565b34801561083b57600080fd5b5061084f61084a366004613e92565b610d6b565b005b34801561085d57600080fd5b5061087161086c366004613f38565b610e40565b6040516103cb9897969594939291906149ba565b34801561089157600080fd5b506104366108a0366004613eb0565b610e92565b3480156108b157600080fd5b5061084f6108c0366004613fc2565b610eaf565b3480156108d157600080fd5b506103e9610f3b565b3480156108e657600080fd5b50610436610f4a565b3480156108fb57600080fd5b5061043661090a366004613e92565b610f50565b61092261091d366004613f75565b610f62565b6040516103cb93929190614d11565b34801561093d57600080fd5b506103e9610fd0565b34801561095257600080fd5b50610436610fdf565b34801561096757600080fd5b50610436610fe5565b34801561097c57600080fd5b50610436610fef565b34801561099157600080fd5b5061084f6109a0366004613e92565b610ff5565b3480156109b157600080fd5b50610436611025565b3480156109c657600080fd5b5061043661102b565b3480156109db57600080fd5b506103e9611031565b3480156109f057600080fd5b506103e9611040565b6009602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6031546001600160a01b031681565b6005602052600090815260409020546001600160a01b031681565b603b60209081526000928352604080842090915290825290205481565b6023602052600090815260409020546001600160a01b031681565b60326020526000908152604090205460ff1681565b60185481565b601f5481565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b601a6020526000908152604090205481565b602a6020526000908152604090205481565b600a60209081526000928352604080842090915290825290205460ff1681565b60166020526000908152604090205481565b60155481565b60295481565b600c6020526000908152604090208054600182015460029092015490919083565b602b5481565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60266020526000908152604090205460ff1681565b6033602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b60355481565b6002546001600160a01b031681565b601e5481565b603d5460ff1681565b6001546001600160a01b031690565b6022602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b0316610c6361104f565b6001600160a01b031614905090565b60176020526000908152604090205481565b602c5481565b602f5481565b60205481565b602d546001600160a01b031681565b601d6020526000908152604090205481565b601c6020526000908152604090205481565b6037546001600160a01b031681565b6004546001600160a01b031681565b60366020526000908152604090205481565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460088801546009890154600a8a0154600b909a0154989a9799969860ff909616979496949593949293919290916001600160a01b0391821691168c565b610d73610c4c565b610d8f5760405162461bcd60e51b815260040161039090614c23565b63e4f3e73960e01b600081905260056020527fe1cb396722e7eabe79fbbfe4b479997758c9eb9965437583a97ce608d5a86600546001600160a01b031690610dd79083611053565b610de86333c3b6a160e21b83611053565b6f4c6f616e436c6f73696e67734261736560801b826001600160a01b0316826001600160a01b03167f1420e3a2094d671bc2eb897941fa3d94ffa37f0cb6d530651946250a2151cb7f60405160405180910390a45050565b6007602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949560ff8516956101009095046001600160a01b03908116959481169493169288565b603c60209081526000928352604080842090915290825290205481565b600160005414610ed15760405162461bcd60e51b815260040161039090614c93565b6002600055603d5460ff1615610ef95760405162461bcd60e51b815260040161039090614b03565b333214610f185760405162461bcd60e51b815260040161039090614bd3565b610f3183604051806020016040528060008152506110cf565b5050600160005550565b6038546001600160a01b031681565b60275481565b60196020526000908152604090205481565b6000806000600160005414610f895760405162461bcd60e51b815260040161039090614c93565b6002600055603d5460ff1615610fb15760405162461bcd60e51b815260040161039090614b03565b610fbc868686611a2a565b600160005591989097509095509350505050565b6014546001600160a01b031681565b601b5481565b6509184e72a00081565b60285481565b610ffd610c4c565b6110195760405162461bcd60e51b815260040161039090614c23565b61102281612042565b50565b60395481565b60215481565b602e546001600160a01b031681565b6030546001600160a01b031681565b3390565b6001600160e01b03198216600090815260056020526040902080546001600160a01b0319166001600160a01b038316908117909155156110ae576110a8600d6001600160e01b0319841663ffffffff6120c416565b506110cb565b6110c9600d6001600160e01b0319841663ffffffff61210e16565b505b5050565b6000828152600660209081526040808320600181015484526007909252909120600382015460ff166111135760405162461bcd60e51b815260040161039090614c83565b80546111315760405162461bcd60e51b815260040161039090614c43565b600782015461114890610e1063ffffffff6121cf16565b42116111665760405162461bcd60e51b815260040161039090614bc3565b600b8201546001600160a01b03908116600090815260226020526040902054166111a25760405162461bcd60e51b815260040161039090614b83565b600b82015460028201546111c2916001600160a01b039081169116612218565b81546000818152600c60209081526040808320600b808801546001600160a01b039081168652908452828520600288015482168087529452919093206003860154600a8801549495919461121e94879490928116911642612302565b600080856007015442111561127157600786015461124390429063ffffffff6121cf16565b845490925061125990839063ffffffff61235d16565b905061126e816201518063ffffffff61239716565b90505b6006850154156113d05760006113336907baab4146b63dd0000061132789600b0160009054906101000a90046001600160a01b03166001600160a01b0316638325a1c06040518163ffffffff1660e01b815260040160206040518083038186803b1580156112de57600080fd5b505afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113169190810190614036565b60048b01549063ffffffff61235d16565b9063ffffffff61239716565b600185015490915061134b908263ffffffff6123d916565b600185018190558554611364919063ffffffff6121cf16565b6001850155808555600686015483106113ab576113a162015180611395858a600701546123d990919063ffffffff16565b9063ffffffff6123d916565b60078801556113ca565b600686015460078801546113c49163ffffffff6123d916565b60078801555b50611420565b622819a08210611402576113f8620151806113958489600701546123d990919063ffffffff16565b6007870155611420565b600786015461141a90622819a063ffffffff6123d916565b60078701555b6007860154600090611438904263ffffffff6121cf16565b855490915061144e90829063ffffffff61235d16565b9050611463816201518063ffffffff61239716565b600186015490915061147b908263ffffffff6123d916565b60018601556002840154611495908263ffffffff6123d916565b60028501556114aa818363ffffffff6123d916565b905060008061167a89604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508960405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600482015481526020016005820154815260200160068201548152505060008660018f6123fe565b5091509150828211156118af5760028801546116a1906001600160a01b031684840361248e565b1561188c5761186f89604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508960405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508585038d612594565b509092506118859050818363ffffffff6121cf16565b90506118af565b600a89015460028901546118af916001600160a01b0390811691168585036125ed565b60058901546118c4908263ffffffff6121cf16565b60058a015583156118f057600b89015460028901546118f0916001600160a01b0390811691168661267b565b6003880154600289015460048b015460009261191a926001600160a01b0391821692911690612720565b905080156119555760058a0154611937908263ffffffff6121cf16565b60058b01556003890154611955906001600160a01b0316338361287b565b60028054908a015460038b01546004808e015460058f01546040516317f8680960e11b81526000966001600160a01b0390811696632ff0d012966119a296918316959216939192016148f1565b604080518083038186803b1580156119b957600080fd5b505afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f19190810190614054565b5090506729a2241af62c00008111611a1b5760405162461bcd60e51b815260040161039090614c33565b50505050505050505050505050565b60008381526006602090815260408083206001810154845260079092528220600382015483928392909160ff16611a735760405162461bcd60e51b815260040161039090614c83565b8054611a915760405162461bcd60e51b815260040161039090614c43565b6002805490820154600383015460048581015460058701546040516317f8680960e11b815260009687966001600160a01b0391821696632ff0d01296611ae396928416959390911693919291016148f1565b604080518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b329190810190614054565b915091508260050154821115611b5a5760405162461bcd60e51b815260040161039090614bc3565b879650600080611b7986600401548760050154868860050154876128b1565b509150915081891015611ba157611b9a82611327838c63ffffffff61235d16565b9750611bb8565b81891115611bb457819850809750611bb8565b8097505b88611bd55760405162461bcd60e51b815260040161039090614bf3565b6002850154611bee906001600160a01b0316308b6129e5565b6000611dce87604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508760405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820154815250508c8a600a0160009054906101000a90046001600160a01b0316612b06565b9050808a1115611dfb576002860154600a880154611dfb916001600160a01b039081169116838d0361287b565b8015611e22576002860154600b880154611e22916001600160a01b03908116911683612b74565b60038601546001600160a01b031697508815611e5d576005870154611e4d908a63ffffffff6121cf16565b6005880155611e5d888d8b61287b565b611e67878b612bd7565b6120328660405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600482015481526020016005820154815260200160068201548152505088604051806101800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600b820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508c8c888a6002612cae565b5050505050505093509350939050565b6001600160a01b0381166120685760405162461bcd60e51b815260040161039090614b23565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006120d08383612d39565b6121045750600180830180548083018083556000928352602080842090920185905584835290859052604090912055612108565b5060005b92915050565b600061211a8383612d39565b15612104576000828152602084905260409020546001840154600019918201910180821461219257600085600101828154811061215357fe5b906000526020600020015490508086600101848154811061217057fe5b6000918252602080832090910192909255918252869052604090206001830190555b600084815260208690526040812055600185018054806121ae57fe5b60019003818190600052602060002001600090559055600192505050612108565b600061221183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d4e565b9392505050565b6001600160a01b038083166000908152600b6020908152604080832093851683529290529081206001810154909190158015906122585750600482015415155b156122f55761228f6201518061132784600101546122838660040154426121cf90919063ffffffff16565b9063ffffffff61235d16565b42600484015560028301549091508111156122ab575060028101545b80156122f05760038201546122c6908263ffffffff6123d916565b600383015560028201546122e0908263ffffffff6121cf16565b60028301556122f084848361267b565b6122fc565b4260048301555b50505050565b60006123386a07259756a8d619980000006113276015546122838b600001546122838d60020154896121cf90919063ffffffff16565b6002880183905590508015612354576123548387878785612d7a565b50505050505050565b60008261236c57506000612108565b8282028284828161237957fe5b04146122115760405162461bcd60e51b815260040161039090614c13565b600061221183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130c5565b6000828201838110156122115760405162461bcd60e51b815260040161039090614b33565b6000806000612437896000015189608001518a606001518c61014001518b8e60a001518b61242d57600061242f565b8c5b60008c6130fc565b919450925090508583101561245e5760405162461bcd60e51b815260040161039090614c03565b8860a001518211156124825760405162461bcd60e51b815260040161039090614b73565b96509650969350505050565b600254602d54604051630a7549df60e21b8152600092839283926001600160a01b03928316926329d5277c926124cc928a92909116906004016147d3565b604080518083038186803b1580156124e357600080fd5b505afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061251b9190810190614054565b9092509050600061253682611327878663ffffffff61235d16565b90507fe46714304b3de2a7b58afcc0bafe0a6deabd30a647332cb479124142fdb14b0b6509184e72a000821186836509184e72a00060405161257b949392919061499f565b60405180910390a16509184e72a0001095945050505050565b60008060006125bc8760000151876060015188608001518a6101400151898a6000808c6130fc565b91945092509050848211156125e35760405162461bcd60e51b815260040161039090614b73565b9450945094915050565b80156110c9576001600160a01b03821660009081526016602052604090205461261c908263ffffffff6123d916565b6001600160a01b0380841660008181526016602052604090819020939093559151908516907f40a75ae5f7a5336e75f7c7977e12c4b46a9ac0f30de01a2d5b6c1a4f4af635879061266e908590614d03565b60405180910390a3505050565b600061269f68056bc75e2d631000006113276015548561235d90919063ffffffff16565b90506126ac8484836125ed565b6126c683856126c1858563ffffffff6121cf16565b612b74565b6001600160a01b038085169084167f220e66e3e759e1382aa86cd8af5abca05ebf3ad564f223ae62d977678337272a612705858563ffffffff6121cf16565b6040516127129190614d03565b60405180910390a350505050565b60025460405163d138f9a160e01b815260009182916001600160a01b039091169063d138f9a190612759908790899088906004016148c9565b60206040518083038186803b15801561277157600080fd5b505afa158015612785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127a99190810190614036565b600254602d54602b5460405163d138f9a160e01b81529394506000936001600160a01b039384169363d138f9a1936127e9939116918b91906004016148c9565b60206040518083038186803b15801561280157600080fd5b505afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128399190810190614036565b905061287161286068056bc75e2d63100000611327602c548661235d90919063ffffffff16565b61139583600263ffffffff61235d16565b9695505050505050565b80156110c957602d546001600160a01b03848116911614156128a6576128a1828261325a565b6110c9565b6110c9838383612b74565b6021546000908190848611806128c5575083155b156128cf576129da565b8086116128e35750869150859050846129da565b60006128fd86674563918244f4000063ffffffff6123d916565b905061292068056bc75e2d631000006113278b612283858463ffffffff6123d916565b935061294e612941670de0b6b3a76400006113278b8963ffffffff61235d16565b859063ffffffff6121cf16565b935061297c612963828463ffffffff6121cf16565b6113278668056bc75e2d6310000063ffffffff61235d16565b93508884111561298a578893505b6129b36129a68368056bc75e2d6310000063ffffffff6123d916565b859063ffffffff61235d16565b92506129ca6064611327858863ffffffff61239716565b9250878311156129d8578792505b505b955095509592505050565b8015612ae85734612a01576129fc83338484613323565b6128a1565b602d546001600160a01b03848116911614612a2e5760405162461bcd60e51b815260040161039090614b43565b80341015612a4e5760405162461bcd60e51b815260040161039090614cf3565b602d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9e57600080fd5b505af1158015612ab2573d6000803e3d6000fd5b505050506001600160a01b03831630149050612ad457612ad483308484613323565b803411156128a1576128a13382340361336f565b34156110c95760405162461bcd60e51b815260040161039090614b43565b60008281612b1586888461340b565b90506000818310612b2e57509081900390600090612b4c565b5060009190819003908115612b4c57612b4c8760600151868461287b565b8015612b6657612b66876060015189610160015183612b74565b50909150505b949350505050565b80156110c957612b946001600160a01b038416838363ffffffff6135a916565b816001600160a01b0316836001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a18360405161266e9190614d03565b80612bf45760405162461bcd60e51b815260040161039090614c63565b8160040154811415612c905760006004830181905560038301805460ff1916905542600784015560028301558154612c3490600f9063ffffffff61210e16565b508154600b8301546001600160a01b03166000908152601160205260409020612c629163ffffffff61210e16565b508154600a8301546001600160a01b031660009081526012602052604090206110a89163ffffffff61210e16565b6004820154612ca5908263ffffffff6121cf16565b60048301555050565b6002816002811115612cbc57fe5b1415612354578560000151336001600160a01b03168761014001516001600160a01b03167f46fa03303782eb2f686515f6c0100f9a62dabe587b0d3f5a4fc0c822d6e532d38961016001518b606001518c608001518b8b8b8b604051612d289796959493929190614894565b60405180910390a450505050505050565b60009081526020919091526040902054151590565b60008184841115612d725760405162461bcd60e51b81526004016103909190614af2565b505050900390565b602f546002546001600160a01b038581166000908152603c602090815260408083208885168452909152812054909392919091169015612ddd576001600160a01b038087166000908152603c602090815260408083209389168352929052205491505b6037546000906060906001600160a01b038085169163d138f9a160e01b918b9116612e1b68056bc75e2d631000006113278c8b63ffffffff61235d16565b604051602401612e2d939291906148c9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612e6b91906147ae565b600060405180830381855afa9150503d8060008114612ea6576040519150601f19603f3d011682016040523d82523d6000602084013e612eab565b606091505b50915091506001821415612ec157602081015194505b84156130b95760375460385460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612efd92911690899060040161495b565b602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f4f9190810190613f1a565b50603854603f546040516000926001600160a01b031691612f76918e918a91602401614976565b60408051601f198184030181529181526020820180516001600160e01b0316630efe6a8b60e01b17905251612fab91906147ae565b6000604051808303816000865af19150503d8060008114612fe8576040519150601f19603f3d011682016040523d82523d6000602084013e612fed565b606091505b50509050801561306457601f5461300a908763ffffffff6123d916565b601f55603754603f546040518c926001600160a01b0390811692908f16917ff41c644671512f1cda76abfe6038e3d7d526c1377a5a8c692f81703901db215091613057918b918d91614d39565b60405180910390a46130b7565b603754603f546040518c926001600160a01b0390811692908f16917f483f67ea49f76ac15e15bbad68b52788ca47d50aef1e4acfe95e5e307e710812916130ae918b918d91614d39565b60405180910390a45b505b50505050505050505050565b600081836130e65760405162461bcd60e51b81526004016103909190614af2565b5060008385816130f257fe5b0495945050505050565b6040805160a0810182526001600160a01b03808b16825289811660208084019190915230838501819052606080850191909152918a1660808401528351918201845288825281018790529182018590526000918291829161316191908e888886613602565b90935091506131708b83613827565b600254602754604051631e2c62d360e01b81526001600160a01b0390921691631e2c62d3916131a9918f918f9188918a91600401614919565b60206040518083038186803b1580156131c157600080fd5b505afa1580156131d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131f99190810190614036565b9050896001600160a01b03168b6001600160a01b03168d7fb4eb3c9b62efcce7021cba5fd9cd0c44df91c2272806ccc5e57df7c912e8d7168c868860405161324393929190614976565b60405180910390a499509950999650505050505050565b80156110cb57602d546001600160a01b031647808311156132d657604051632e1a7d4d60e01b81526001600160a01b03831690632e1a7d4d906132a39084870390600401614d03565b600060405180830381600087803b1580156132bd57600080fd5b505af11580156132d1573d6000803e3d6000fd5b505050505b6132e0848461336f565b836001600160a01b0316826001600160a01b03167fc44aeefa68e8b9c1ad5f7be4b0dd194580f81f5c362862e72196503a320eb7a1856040516127129190614d03565b80156122fc576001600160a01b038316301415613354576122f06001600160a01b038516838363ffffffff6135a916565b6122fc6001600160a01b03851684848463ffffffff6138f516565b8047101561338f5760405162461bcd60e51b815260040161039090614ba3565b6000826001600160a01b0316826040516133a8906147ba565b60006040518083038185875af1925050503d80600081146133e5576040519150601f19603f3d011682016040523d82523d6000602084013e6133ea565b606091505b50509050806110c95760405162461bcd60e51b815260040161039090614b93565b60006134208361016001518560600151612218565b82516000908152600c602090815260408083206101608701516001600160a01b039081168552600b845282852060608a0151909116855290925290912060e08501514290811115613472575060e08501515b61349183876000015189606001518a608001518a610140015186612302565b600086608001518610156134c257608087015184546134bb9190611327908963ffffffff61235d16565b90506134c6565b5082545b83546134d8908263ffffffff6121cf16565b845560018301546134ef908263ffffffff6121cf16565b600184015560e087015160009061350c908463ffffffff6121cf16565b905061351e818363ffffffff61235d16565b9050613533816201518063ffffffff61239716565b90508760800151871015613560576001850154613556908263ffffffff6121cf16565b6001860155613568565b600060018601555b835461357a908863ffffffff6121cf16565b8455600284015481811161358f576000613593565b8181035b6002909501949094559450505050509392505050565b6040516110c990849063a9059cbb60e01b906135cb908690869060240161495b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613919565b845160009081901515806136195750602087015115155b6136355760405162461bcd60e51b815260040161039090614c73565b602087015161364657865160208801525b60208701518751111561366b5760405162461bcd60e51b815260040161039090614bb3565b6000806000876137285760408a01516136e757851561369c576136958a60005b60200201516139fe565b90506136b0565b6136ad8a60005b6020020151613a2e565b90505b80156136e25760808b01518b516136d391908b908e60015b602002015185613a52565b89516136df90826121cf565b8a525b613728565b85156136ff576136f88a600261368b565b905061370d565b61370a8a60026136a3565b90505b80156137285760408a015161372290826123d9565b60408b01525b8651156137475760405162461bcd60e51b815260040161039090614ca3565b6137518b8b613ba2565b60408c0151919450925061379d578951821461377f5760405162461bcd60e51b815260040161039090614cd3565b801561379857613795828263ffffffff6123d916565b91505b613817565b60208a01518211156137c15760405162461bcd60e51b815260040161039090614b63565b60408a01518310156137e55760405162461bcd60e51b815260040161039090614b13565b80156138175760808b015160208c015161380491908b908e60006136c8565b613814838263ffffffff6121cf16565b92505b5090999098509650505050505050565b60295480156110c957602d546000906001600160a01b03858116911614156138505750816138d5565b600254604051635967aa7560e11b81526001600160a01b039091169063b2cf54ea90613882908790879060040161495b565b60206040518083038186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138d29190810190614036565b90505b818111156122fc5760405162461bcd60e51b815260040161039090614be3565b6040516122fc9085906323b872dd60e01b906135cb908790879087906024016148c9565b61392b826001600160a01b0316613cb4565b6139475760405162461bcd60e51b815260040161039090614ce3565b60006060836001600160a01b03168360405161396391906147ae565b6000604051808303816000865af19150503d80600081146139a0576040519150601f19603f3d011682016040523d82523d6000602084013e6139a5565b606091505b5091509150816139c75760405162461bcd60e51b815260040161039090614b53565b8051156122fc57808060200190516139e29190810190613f1a565b6122fc5760405162461bcd60e51b815260040161039090614cb3565b600061210868056bc75e2d63100000613a22603e548561235d90919063ffffffff16565b9063ffffffff613ced16565b600061210868056bc75e2d63100000613a226018548561235d90919063ffffffff16565b808015613b9a576001600160a01b038681166000908152603360205260409020541615613b08576001600160a01b03808716600090815260336020526040902054613aa09116878684613d2f565b5050613b05613ac768056bc75e2d631000006113276039548561235d90919063ffffffff16565b613af9613aec68056bc75e2d631000006113276020548761235d90919063ffffffff16565b849063ffffffff6121cf16565b9063ffffffff6121cf16565b90505b6001600160a01b038416600090815260196020526040902054613b31908263ffffffff6123d916565b6001600160a01b03808616600081815260196020526040908190209390935591518792918916907fb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed90613b85908690614d03565b60405180910390a4613b9a8686868686612d7a565b505050505050565b815160208084015160408086015160608781015187519588015188850151945160009889989497630957ba1160e21b97613be99792969195929492939192916024016147ee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491519092506000916001600160a01b031690613c3b9084906147ae565b600060405180830381855af49150503d8060008114613c76576040519150601f19603f3d011682016040523d82523d6000602084013e613c7b565b606091505b509250905080613c9d5760405162461bcd60e51b815260040161039090614cc3565b602082015193506040820151925050509250929050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612b6c575050151592915050565b600061221183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613dc8565b6031546040516306a688ff60e11b815260009182916001600160a01b0390911690630d4d11fe90613d6a908990899089908990600401614856565b6040805180830381600087803b158015613d8357600080fd5b505af1158015613d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613dbb9190810190614054565b9097909650945050505050565b60008183613de95760405162461bcd60e51b81526004016103909190614af2565b5083613df757506000612211565b6000836001860381613e0557fe5b0460010195945050505050565b803561210881614e3b565b805161210881614e4f565b803561210881614e58565b803561210881614e61565b60008083601f840112613e5057600080fd5b50813567ffffffffffffffff811115613e6857600080fd5b602083019150836001820283011115613e8057600080fd5b9250929050565b805161210881614e58565b600060208284031215613ea457600080fd5b6000612b6c8484613e12565b60008060408385031215613ec357600080fd5b6000613ecf8585613e12565b9250506020613ee085828601613e12565b9150509250929050565b60008060408385031215613efd57600080fd5b6000613f098585613e12565b9250506020613ee085828601613e28565b600060208284031215613f2c57600080fd5b6000612b6c8484613e1d565b600060208284031215613f4a57600080fd5b6000612b6c8484613e28565b60008060408385031215613f6957600080fd5b6000613ecf8585613e28565b600080600060608486031215613f8a57600080fd5b6000613f968686613e28565b9350506020613fa786828701613e12565b9250506040613fb886828701613e28565b9150509250925092565b600080600060408486031215613fd757600080fd5b6000613fe38686613e28565b935050602084013567ffffffffffffffff81111561400057600080fd5b61400c86828701613e3e565b92509250509250925092565b60006020828403121561402a57600080fd5b6000612b6c8484613e33565b60006020828403121561404857600080fd5b6000612b6c8484613e87565b6000806040838503121561406757600080fd5b60006140738585613e87565b9250506020613ee085828601613e87565b61408d81614dce565b82525050565b61408d81614dd9565b61408d81614dde565b60006140b082614dbc565b6140ba8185614dc0565b93506140ca818560208601614e05565b9290920192915050565b61408d81614dfa565b60006140e882614dbc565b6140f28185614dc5565b9350614102818560208601614e05565b61410b81614e31565b9093019392505050565b6000614122600683614dc5565b6514185d5cd95960d21b815260200192915050565b6000614144601b83614dc5565b7f696e73756666696369656e742073776170206c69717569646974790000000000815260200192915050565b600061417d602683614dc5565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006141c5601b83614dc5565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006141fe601083614dc5565b6f1ddc9bdb99c8185cdcd95d081cd95b9d60821b815260200192915050565b600061422a602083614dc5565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000614263601383614dc5565b72737761702066696c6c20746f6f206c6172676560681b815260200192915050565b6000614292601783614dc5565b7f65786365737369766520736f7572636520616d6f756e74000000000000000000815260200192915050565b60006142cb600e83614dc5565b6d34b73b30b634b2103632b73232b960911b815260200192915050565b60006142f5603a83614dc5565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b6000614354601d83614dc5565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b600061438d601c83614dc5565b7f736f75726365416d6f756e74206c6172676572207468616e206d617800000000815260200192915050565b60006143c6601083614dc5565b6f3432b0b63a343c903837b9b4ba34b7b760811b815260200192915050565b60006143f2601283614dc5565b711bdb9b1e481153d05cc818d85b8818d85b1b60721b815260200192915050565b6000614420600e83614dc5565b6d7377617020746f6f206c6172676560901b815260200192915050565b600061444a601483614dc5565b736e6f7468696e6720746f206c697175696461746560601b815260200192915050565b600061447a601883614dc5565b7f696e73756666696369656e74206465737420616d6f756e740000000000000000815260200192915050565b60006144b3602183614dc5565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b60006144f6600c83614dc5565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061451e601283614dc5565b713ab73432b0b63a343c903837b9b4ba34b7b760711b815260200192915050565b600061454c601583614dc5565b746c6f616e506172616d73206e6f742065786973747360581b815260200192915050565b600061457d601483614dc5565b7319985b1b189858dac81b9bdd08185b1b1bddd95960621b815260200192915050565b60006145ad601083614dc5565b6f6e6f7468696e6720746f20636c6f736560801b815260200192915050565b60006145d9602e83614dc5565b7f6d696e206f72206d617820736f7572636520746f6b656e20616d6f756e74206e81526d1959591cc81d1bc81899481cd95d60921b602082015260400192915050565b6000612108600083614dc0565b6000614636600e83614dc5565b6d1b1bd85b881a5cc818db1bdcd95960921b815260200192915050565b6000614660600c83614dc5565b6b1b9bdb9499595b9d1c985b9d60a21b815260200192915050565b6000614688600d83614dc5565b6c696e76616c696420737461746560981b815260200192915050565b60006146b1602a83614dc5565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006146fd600b83614dc5565b6a1cddd85c0819985a5b195960aa1b815260200192915050565b6000614724601683614dc5565b751cddd85c081d1bdbc81b185c99d9481d1bc8199a5b1b60521b815260200192915050565b6000614756601f83614dc5565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b600061478f601083614dc5565b6f3737ba1032b737bab3b41032ba3432b960811b815260200192915050565b600061221182846140a5565b60006121088261461c565b602081016121088284614084565b604081016147e18285614084565b6122116020830184614084565b60e081016147fc828a614084565b6148096020830189614084565b6148166040830188614084565b6148236060830187614084565b614830608083018661409c565b61483d60a083018561409c565b61484a60c083018461409c565b98975050505050505050565b608081016148648287614084565b6148716020830186614084565b61487e6040830185614084565b61488b606083018461409c565b95945050505050565b60e081016148a2828a614084565b6148af6020830189614084565b6148bc6040830188614084565b614823606083018761409c565b606081016148d78286614084565b6148e46020830185614084565b612b6c604083018461409c565b608081016148ff8287614084565b61490c6020830186614084565b61487e604083018561409c565b60a081016149278288614084565b6149346020830187614084565b614941604083018661409c565b61494e606083018561409c565b612871608083018461409c565b604081016149698285614084565b612211602083018461409c565b606081016149848286614084565b6148e4602083018561409c565b602081016121088284614093565b608081016149ad8287614093565b61490c602083018661409c565b61010081016149c9828b61409c565b6149d6602083018a614093565b6149e36040830189614084565b6149f06060830188614084565b6149fd6080830187614084565b614a0a60a083018661409c565b614a1760c083018561409c565b614a2460e083018461409c565b9998505050505050505050565b6101808101614a40828f61409c565b614a4d602083018e61409c565b614a5a604083018d61409c565b614a67606083018c614093565b614a74608083018b61409c565b614a8160a083018a61409c565b614a8e60c083018961409c565b614a9b60e083018861409c565b614aa961010083018761409c565b614ab761012083018661409c565b614ac5610140830185614084565b614ad3610160830184614084565b9d9c50505050505050505050505050565b6020810161210882846140d4565b6020808252810161221181846140dd565b6020808252810161210881614115565b6020808252810161210881614137565b6020808252810161210881614170565b60208082528101612108816141b8565b60208082528101612108816141f1565b602080825281016121088161421d565b6020808252810161210881614256565b6020808252810161210881614285565b60208082528101612108816142be565b60208082528101612108816142e8565b6020808252810161210881614347565b6020808252810161210881614380565b60208082528101612108816143b9565b60208082528101612108816143e5565b6020808252810161210881614413565b602080825281016121088161443d565b602080825281016121088161446d565b60208082528101612108816144a6565b60208082528101612108816144e9565b6020808252810161210881614511565b602080825281016121088161453f565b6020808252810161210881614570565b60208082528101612108816145a0565b60208082528101612108816145cc565b6020808252810161210881614629565b6020808252810161210881614653565b602080825281016121088161467b565b60208082528101612108816146a4565b60208082528101612108816146f0565b6020808252810161210881614717565b6020808252810161210881614749565b6020808252810161210881614782565b60208101612108828461409c565b60608101614d1f828661409c565b614d2c602083018561409c565b612b6c6040830184614084565b60608101614984828661409c565b60a08101614d55828861409c565b614934602083018761409c565b60c08101614d70828961409c565b614d7d602083018861409c565b614d8a604083018761409c565b614d97606083018661409c565b614da4608083018561409c565b614db160a083018461409c565b979650505050505050565b5190565b919050565b90815260200190565b600061210882614dee565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b600061210882614dce565b60005b83811015614e20578181015183820152602001614e08565b838111156122fc5750506000910152565b601f01601f191690565b614e4481614dce565b811461102257600080fd5b614e4481614dd9565b614e4481614dde565b614e4481614de156fea365627a7a723158201a2a2471b762f4ea0583c9a91260c4bd51d329a1a5d388ee674225aee81d5f9a6c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
