{
  "contractName": "IDolomiteMargin",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "getMarginRatio",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getMarginRatioForAccount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLiquidationSpread",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "heldMarketId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedMarketId",
          "type": "uint256"
        }
      ],
      "name": "getLiquidationSpreadForPair",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "heldMarketId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "owedMarketId",
          "type": "uint256"
        }
      ],
      "name": "getLiquidationSpreadForAccountAndPair",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEarningsRate",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getMinBorrowedValue",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Value",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAccountMaxNumberOfMarketsWithBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getOracleSentinel",
      "outputs": [
        {
          "internalType": "contract IOracleSentinel",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getIsBorrowAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getIsLiquidationAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCallbackGasLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDefaultAccountRiskOverrideSetter",
      "outputs": [
        {
          "internalType": "contract IAccountRiskOverrideSetter",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "accountOwner",
          "type": "address"
        }
      ],
      "name": "getAccountRiskOverrideSetterByAccountOwner",
      "outputs": [
        {
          "internalType": "contract IAccountRiskOverrideSetter",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountRiskOverrideByAccount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "marginRatioOverride",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "liquidationSpreadOverride",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getMarginRatioOverrideByAccount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getLiquidationSpreadOverrideByAccount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRiskLimits",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint64",
              "name": "marginRatioMax",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "liquidationSpreadMax",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "earningsRateMax",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "marginPremiumMax",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "liquidationSpreadPremiumMax",
              "type": "uint64"
            },
            {
              "internalType": "uint96",
              "name": "interestRateMax",
              "type": "uint96"
            },
            {
              "internalType": "uint128",
              "name": "minBorrowedValueMax",
              "type": "uint128"
            }
          ],
          "internalType": "struct Storage.RiskLimits",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getNumMarkets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getMarketIdByTokenAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketIsClosing",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketPrice",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Price",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketTotalPar",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "borrow",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "supply",
              "type": "uint128"
            }
          ],
          "internalType": "struct Types.TotalPar",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketTotalWei",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "borrow",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "supply",
              "type": "uint128"
            }
          ],
          "internalType": "struct Types.TotalWei",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketCachedIndex",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint112",
              "name": "borrow",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "supply",
              "type": "uint112"
            },
            {
              "internalType": "uint32",
              "name": "lastUpdate",
              "type": "uint32"
            }
          ],
          "internalType": "struct Interest.Index",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketCurrentIndex",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint112",
              "name": "borrow",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "supply",
              "type": "uint112"
            },
            {
              "internalType": "uint32",
              "name": "lastUpdate",
              "type": "uint32"
            }
          ],
          "internalType": "struct Interest.Index",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketPriceOracle",
      "outputs": [
        {
          "internalType": "contract IPriceOracle",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketInterestSetter",
      "outputs": [
        {
          "internalType": "contract IInterestSetter",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketMarginPremium",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketLiquidationSpreadPremium",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketSpreadPremium",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketMaxWei",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.Wei",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketMaxSupplyWei",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.Wei",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketMaxBorrowWei",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.Wei",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketEarningsRateOverride",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketBorrowInterestRatePerSecond",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Interest.Rate",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketInterestRate",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Interest.Rate",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketBorrowInterestRateApr",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Interest.Rate",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketSupplyInterestRateApr",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Interest.Rate",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarket",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isClosing",
              "type": "bool"
            },
            {
              "components": [
                {
                  "internalType": "uint128",
                  "name": "borrow",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "supply",
                  "type": "uint128"
                }
              ],
              "internalType": "struct Types.TotalPar",
              "name": "totalPar",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint112",
                  "name": "borrow",
                  "type": "uint112"
                },
                {
                  "internalType": "uint112",
                  "name": "supply",
                  "type": "uint112"
                },
                {
                  "internalType": "uint32",
                  "name": "lastUpdate",
                  "type": "uint32"
                }
              ],
              "internalType": "struct Interest.Index",
              "name": "index",
              "type": "tuple"
            },
            {
              "internalType": "contract IPriceOracle",
              "name": "priceOracle",
              "type": "address"
            },
            {
              "internalType": "contract IInterestSetter",
              "name": "interestSetter",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Decimal.D256",
              "name": "marginPremium",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Decimal.D256",
              "name": "liquidationSpreadPremium",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "sign",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Types.Wei",
              "name": "maxSupplyWei",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "sign",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Types.Wei",
              "name": "maxBorrowWei",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Decimal.D256",
              "name": "earningsRateOverride",
              "type": "tuple"
            }
          ],
          "internalType": "struct Storage.Market",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getMarketWithInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isClosing",
              "type": "bool"
            },
            {
              "components": [
                {
                  "internalType": "uint128",
                  "name": "borrow",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "supply",
                  "type": "uint128"
                }
              ],
              "internalType": "struct Types.TotalPar",
              "name": "totalPar",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint112",
                  "name": "borrow",
                  "type": "uint112"
                },
                {
                  "internalType": "uint112",
                  "name": "supply",
                  "type": "uint112"
                },
                {
                  "internalType": "uint32",
                  "name": "lastUpdate",
                  "type": "uint32"
                }
              ],
              "internalType": "struct Interest.Index",
              "name": "index",
              "type": "tuple"
            },
            {
              "internalType": "contract IPriceOracle",
              "name": "priceOracle",
              "type": "address"
            },
            {
              "internalType": "contract IInterestSetter",
              "name": "interestSetter",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Decimal.D256",
              "name": "marginPremium",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Decimal.D256",
              "name": "liquidationSpreadPremium",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "sign",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Types.Wei",
              "name": "maxSupplyWei",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "sign",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Types.Wei",
              "name": "maxBorrowWei",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Decimal.D256",
              "name": "earningsRateOverride",
              "type": "tuple"
            }
          ],
          "internalType": "struct Storage.Market",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint112",
              "name": "borrow",
              "type": "uint112"
            },
            {
              "internalType": "uint112",
              "name": "supply",
              "type": "uint112"
            },
            {
              "internalType": "uint32",
              "name": "lastUpdate",
              "type": "uint32"
            }
          ],
          "internalType": "struct Interest.Index",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Price",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Interest.Rate",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getNumExcessTokens",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.Wei",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getAccountPar",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "value",
              "type": "uint128"
            }
          ],
          "internalType": "struct Types.Par",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        }
      ],
      "name": "getAccountWei",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.Wei",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountStatus",
      "outputs": [
        {
          "internalType": "enum Account.Status",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountMarketsWithBalances",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountNumberOfMarketsWithBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getAccountMarketWithBalanceAtIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountNumberOfMarketsWithDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountValues",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Value",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Value",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAdjustedAccountValues",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Value",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Value",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info",
          "name": "account",
          "type": "tuple"
        }
      ],
      "name": "getAccountBalances",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "value",
              "type": "uint128"
            }
          ],
          "internalType": "struct Types.Par[]",
          "name": "",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "sign",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.Wei[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "getIsLocalOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "getIsGlobalOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "autoTrader",
          "type": "address"
        }
      ],
      "name": "getIsAutoTraderSpecial",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "number",
              "type": "uint256"
            }
          ],
          "internalType": "struct Account.Info[]",
          "name": "accounts",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "enum Actions.ActionType",
              "name": "actionType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "accountId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "bool",
                  "name": "sign",
                  "type": "bool"
                },
                {
                  "internalType": "enum Types.AssetDenomination",
                  "name": "denomination",
                  "type": "uint8"
                },
                {
                  "internalType": "enum Types.AssetReference",
                  "name": "ref",
                  "type": "uint8"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Types.AssetAmount",
              "name": "amount",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "primaryMarketId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "secondaryMarketId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "otherAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "otherAccountId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct Actions.ActionArgs[]",
          "name": "actions",
          "type": "tuple[]"
        }
      ],
      "name": "operate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "trusted",
              "type": "bool"
            }
          ],
          "internalType": "struct Types.OperatorArg[]",
          "name": "args",
          "type": "tuple[]"
        }
      ],
      "name": "setOperators",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ownerWithdrawExcessTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ownerWithdrawUnsupportedTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "contract IPriceOracle",
          "name": "priceOracle",
          "type": "address"
        },
        {
          "internalType": "contract IInterestSetter",
          "name": "interestSetter",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "marginPremium",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "spreadPremium",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "maxSupplyWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxBorrowWei",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "earningsRateOverride",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "isClosing",
          "type": "bool"
        }
      ],
      "name": "ownerAddMarket",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isClosing",
          "type": "bool"
        }
      ],
      "name": "ownerSetIsClosing",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "internalType": "contract IPriceOracle",
          "name": "priceOracle",
          "type": "address"
        }
      ],
      "name": "ownerSetPriceOracle",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "internalType": "contract IInterestSetter",
          "name": "interestSetter",
          "type": "address"
        }
      ],
      "name": "ownerSetInterestSetter",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "marginPremium",
          "type": "tuple"
        }
      ],
      "name": "ownerSetMarginPremium",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "liquidationSpreadPremium",
          "type": "tuple"
        }
      ],
      "name": "ownerSetLiquidationSpreadPremium",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSupplyWei",
          "type": "uint256"
        }
      ],
      "name": "ownerSetMaxSupplyWei",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxBorrowWei",
          "type": "uint256"
        }
      ],
      "name": "ownerSetMaxBorrowWei",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "marketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "earningsRateOverride",
          "type": "tuple"
        }
      ],
      "name": "ownerSetEarningsRateOverride",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "ratio",
          "type": "tuple"
        }
      ],
      "name": "ownerSetMarginRatio",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "spread",
          "type": "tuple"
        }
      ],
      "name": "ownerSetLiquidationSpread",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Decimal.D256",
          "name": "earningsRate",
          "type": "tuple"
        }
      ],
      "name": "ownerSetEarningsRate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "internalType": "struct Monetary.Value",
          "name": "minBorrowedValue",
          "type": "tuple"
        }
      ],
      "name": "ownerSetMinBorrowedValue",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "accountMaxNumberOfMarketsWithBalances",
          "type": "uint256"
        }
      ],
      "name": "ownerSetAccountMaxNumberOfMarketsWithBalances",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IOracleSentinel",
          "name": "oracleSentinel",
          "type": "address"
        }
      ],
      "name": "ownerSetOracleSentinel",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "callbackGasLimit",
          "type": "uint256"
        }
      ],
      "name": "ownerSetCallbackGasLimit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IAccountRiskOverrideSetter",
          "name": "accountRiskOverrideSetter",
          "type": "address"
        }
      ],
      "name": "ownerSetDefaultAccountRiskOverride",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "accountOwner",
          "type": "address"
        },
        {
          "internalType": "contract IAccountRiskOverrideSetter",
          "name": "accountRiskOverrideSetter",
          "type": "address"
        }
      ],
      "name": "ownerSetAccountRiskOverride",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ownerSetGlobalOperator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "autoTrader",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "special",
          "type": "bool"
        }
      ],
      "name": "ownerSetAutoTraderSpecial",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getAccountMarketWithBalanceAtIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountMarketsWithBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAccountMaxNumberOfMarketsWithBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountNumberOfMarketsWithBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountNumberOfMarketsWithDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getAccountPar\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountRiskOverrideByAccount\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"marginRatioOverride\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"liquidationSpreadOverride\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"}],\"name\":\"getAccountRiskOverrideSetterByAccountOwner\",\"outputs\":[{\"internalType\":\"contract IAccountRiskOverrideSetter\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountStatus\",\"outputs\":[{\"internalType\":\"enum Account.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAccountValues\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Value\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Value\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getAccountWei\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getAdjustedAccountValues\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Value\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Value\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCallbackGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getDefaultAccountRiskOverrideSetter\",\"outputs\":[{\"internalType\":\"contract IAccountRiskOverrideSetter\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getEarningsRate\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"autoTrader\",\"type\":\"address\"}],\"name\":\"getIsAutoTraderSpecial\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getIsBorrowAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getIsGlobalOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getIsLiquidationAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getIsLocalOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLiquidationSpread\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"heldMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"owedMarketId\",\"type\":\"uint256\"}],\"name\":\"getLiquidationSpreadForAccountAndPair\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"heldMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"owedMarketId\",\"type\":\"uint256\"}],\"name\":\"getLiquidationSpreadForPair\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getLiquidationSpreadOverrideByAccount\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMarginRatio\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getMarginRatioForAccount\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"getMarginRatioOverrideByAccount\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarket\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isClosing\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"borrow\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"supply\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.TotalPar\",\"name\":\"totalPar\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint112\",\"name\":\"borrow\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"supply\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdate\",\"type\":\"uint32\"}],\"internalType\":\"struct Interest.Index\",\"name\":\"index\",\"type\":\"tuple\"},{\"internalType\":\"contract IPriceOracle\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"contract IInterestSetter\",\"name\":\"interestSetter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"marginPremium\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"liquidationSpreadPremium\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"maxSupplyWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"maxBorrowWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRateOverride\",\"type\":\"tuple\"}],\"internalType\":\"struct Storage.Market\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketBorrowInterestRateApr\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Interest.Rate\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketBorrowInterestRatePerSecond\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Interest.Rate\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketCachedIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint112\",\"name\":\"borrow\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"supply\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdate\",\"type\":\"uint32\"}],\"internalType\":\"struct Interest.Index\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketCurrentIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint112\",\"name\":\"borrow\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"supply\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdate\",\"type\":\"uint32\"}],\"internalType\":\"struct Interest.Index\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketEarningsRateOverride\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMarketIdByTokenAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketInterestRate\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Interest.Rate\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketInterestSetter\",\"outputs\":[{\"internalType\":\"contract IInterestSetter\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketIsClosing\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketLiquidationSpreadPremium\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketMarginPremium\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketMaxBorrowWei\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketMaxSupplyWei\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketMaxWei\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Price\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketPriceOracle\",\"outputs\":[{\"internalType\":\"contract IPriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketSpreadPremium\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketSupplyInterestRateApr\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Interest.Rate\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketTotalPar\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"borrow\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"supply\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.TotalPar\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketTotalWei\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"borrow\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"supply\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.TotalWei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getMarketWithInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isClosing\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"borrow\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"supply\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.TotalPar\",\"name\":\"totalPar\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint112\",\"name\":\"borrow\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"supply\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdate\",\"type\":\"uint32\"}],\"internalType\":\"struct Interest.Index\",\"name\":\"index\",\"type\":\"tuple\"},{\"internalType\":\"contract IPriceOracle\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"contract IInterestSetter\",\"name\":\"interestSetter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"marginPremium\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"liquidationSpreadPremium\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"maxSupplyWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"maxBorrowWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRateOverride\",\"type\":\"tuple\"}],\"internalType\":\"struct Storage.Market\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint112\",\"name\":\"borrow\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"supply\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdate\",\"type\":\"uint32\"}],\"internalType\":\"struct Interest.Index\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Price\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Interest.Rate\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMinBorrowedValue\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Value\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getNumExcessTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getNumMarkets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOracleSentinel\",\"outputs\":[{\"internalType\":\"contract IOracleSentinel\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRiskLimits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"marginRatioMax\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationSpreadMax\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"earningsRateMax\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"marginPremiumMax\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"liquidationSpreadPremiumMax\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"interestRateMax\",\"type\":\"uint96\"},{\"internalType\":\"uint128\",\"name\":\"minBorrowedValueMax\",\"type\":\"uint128\"}],\"internalType\":\"struct Storage.RiskLimits\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"accounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"actions\",\"type\":\"tuple[]\"}],\"name\":\"operate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"contract IPriceOracle\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"contract IInterestSetter\",\"name\":\"interestSetter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"marginPremium\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"spreadPremium\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"maxSupplyWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxBorrowWei\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRateOverride\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isClosing\",\"type\":\"bool\"}],\"name\":\"ownerAddMarket\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountMaxNumberOfMarketsWithBalances\",\"type\":\"uint256\"}],\"name\":\"ownerSetAccountMaxNumberOfMarketsWithBalances\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"internalType\":\"contract IAccountRiskOverrideSetter\",\"name\":\"accountRiskOverrideSetter\",\"type\":\"address\"}],\"name\":\"ownerSetAccountRiskOverride\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"autoTrader\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"special\",\"type\":\"bool\"}],\"name\":\"ownerSetAutoTraderSpecial\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"callbackGasLimit\",\"type\":\"uint256\"}],\"name\":\"ownerSetCallbackGasLimit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IAccountRiskOverrideSetter\",\"name\":\"accountRiskOverrideSetter\",\"type\":\"address\"}],\"name\":\"ownerSetDefaultAccountRiskOverride\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRate\",\"type\":\"tuple\"}],\"name\":\"ownerSetEarningsRate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"earningsRateOverride\",\"type\":\"tuple\"}],\"name\":\"ownerSetEarningsRateOverride\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ownerSetGlobalOperator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"contract IInterestSetter\",\"name\":\"interestSetter\",\"type\":\"address\"}],\"name\":\"ownerSetInterestSetter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isClosing\",\"type\":\"bool\"}],\"name\":\"ownerSetIsClosing\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"spread\",\"type\":\"tuple\"}],\"name\":\"ownerSetLiquidationSpread\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"liquidationSpreadPremium\",\"type\":\"tuple\"}],\"name\":\"ownerSetLiquidationSpreadPremium\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"marginPremium\",\"type\":\"tuple\"}],\"name\":\"ownerSetMarginPremium\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"ratio\",\"type\":\"tuple\"}],\"name\":\"ownerSetMarginRatio\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxBorrowWei\",\"type\":\"uint256\"}],\"name\":\"ownerSetMaxBorrowWei\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSupplyWei\",\"type\":\"uint256\"}],\"name\":\"ownerSetMaxSupplyWei\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Value\",\"name\":\"minBorrowedValue\",\"type\":\"tuple\"}],\"name\":\"ownerSetMinBorrowedValue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IOracleSentinel\",\"name\":\"oracleSentinel\",\"type\":\"address\"}],\"name\":\"ownerSetOracleSentinel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"contract IPriceOracle\",\"name\":\"priceOracle\",\"type\":\"address\"}],\"name\":\"ownerSetPriceOracle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ownerWithdrawExcessTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ownerWithdrawUnsupportedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"trusted\",\"type\":\"bool\"}],\"internalType\":\"struct Types.OperatorArg[]\",\"name\":\"args\",\"type\":\"tuple[]\"}],\"name\":\"setOperators\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"getAccountBalances((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The following values:                  - The market IDs for each market                  - The ERC20 token address for each market                  - The account's principal value for each market                  - The account's (supplied or borrowed) number of tokens for each market\"},\"getAccountMarketWithBalanceAtIndex((address,uint256),uint256)\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The market ID in the provided index for the account.\"},\"getAccountMarketsWithBalances((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The non-sorted marketIds with non-zero balance for the account.\"},\"getAccountMaxNumberOfMarketsWithBalances()\":{\"return\":\"The maximum number of assets an account owner can hold in an account number.\"},\"getAccountNumberOfMarketsWithBalances((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The number of markets with a non-zero balance for the account.\"},\"getAccountNumberOfMarketsWithDebt((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The number of markets with a negative balance for this account.\"},\"getAccountPar((address,uint256),uint256)\":{\"params\":{\"account\":\"The account to query\",\"marketId\":\"The market to query\"},\"return\":\"The principal value\"},\"getAccountRiskOverrideByAccount((address,uint256))\":{\"params\":{\"account\":\"The account to check if there is a risk override.\"},\"return\":\"marginRatioOverride          The margin ratio override for an account owner. Defaults to 0 if there's no                                     override in place.liquidationSpreadOverride    The margin ratio override for an account owner. Defaults to 0 if there's no                                     override in place.\"},\"getAccountRiskOverrideSetterByAccountOwner(address)\":{\"params\":{\"accountOwner\":\"The address of the account to check if there is a margin ratio override.\"},\"return\":\"The contract that contains risk override information for this account.\"},\"getAccountStatus((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The account's status\"},\"getAccountValues((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The following values:                  - The supplied value of the account                  - The borrowed value of the account\"},\"getAccountWei((address,uint256),uint256)\":{\"params\":{\"account\":\"The account to query\",\"marketId\":\"The market to query\"},\"return\":\"The token amount\"},\"getAdjustedAccountValues((address,uint256))\":{\"params\":{\"account\":\"The account to query\"},\"return\":\"The following values:                  - The supplied value of the account (adjusted for marginPremium)                  - The borrowed value of the account (adjusted for marginPremium)\"},\"getCallbackGasLimit()\":{\"return\":\"The gas limit used for making callbacks via `IExternalCallback::onInternalBalanceChange` to smart         contract wallets.\"},\"getDefaultAccountRiskOverrideSetter()\":{\"return\":\"The contract that contains risk override information for any account that does NOT have an account-         specific override.\"},\"getEarningsRate()\":{\"return\":\"The global earnings rate\"},\"getIsAutoTraderSpecial(address)\":{\"params\":{\"autoTrader\":\"The trader that should be checked for special call privileges.\"}},\"getIsBorrowAllowed()\":{\"return\":\"True if borrowing is globally allowed according to the Oracle Sentinel or false if it is not\"},\"getIsGlobalOperator(address)\":{\"params\":{\"operator\":\"The address to query\"},\"return\":\"True if operator is a global operator\"},\"getIsLiquidationAllowed()\":{\"return\":\"True if liquidations are globally allowed according to the Oracle Sentinel or false if they are not\"},\"getIsLocalOperator(address,address)\":{\"params\":{\"operator\":\"The possible operator\",\"owner\":\"The owner of the accounts\"},\"return\":\"True if operator is approved for owner's accounts\"},\"getLiquidationSpread()\":{\"return\":\"The global liquidation spread\"},\"getLiquidationSpreadForAccountAndPair((address,uint256),uint256,uint256)\":{\"params\":{\"account\":\"The account whose liquidation spread is being queried. This is used to determine if there is                     an override in place.\",\"heldMarketId\":\"The market for which the account has collateral\",\"owedMarketId\":\"The market for which the account has borrowed tokens\"},\"return\":\"The adjusted liquidation spread\"},\"getLiquidationSpreadForPair(uint256,uint256)\":{\"params\":{\"heldMarketId\":\"The market for which the account has collateral\",\"owedMarketId\":\"The market for which the account has borrowed tokens\"},\"return\":\"The adjusted liquidation spread\"},\"getLiquidationSpreadOverrideByAccount((address,uint256))\":{\"params\":{\"account\":\"The account to check if there is a liquidation spread override.\"},\"return\":\"The liquidation spread override for an account owner. Defaults to 0 if there's no override in place.\"},\"getMarginRatio()\":{\"return\":\"The global margin-ratio\"},\"getMarginRatioForAccount((address,uint256))\":{\"params\":{\"account\":\"The account whose margin ratio is being queried. This is used to determine if there is an                     override that supersedes the global minimum.\"},\"return\":\"The margin ratio for this account\"},\"getMarginRatioOverrideByAccount((address,uint256))\":{\"params\":{\"account\":\"The account to check if there is a margin ratio override.\"},\"return\":\"The margin ratio override for an account owner. Defaults to 0 if there's no override in place.\"},\"getMarket(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"A Storage.Market struct with the current state of the market\"},\"getMarketBorrowInterestRateApr(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The current supply interest rate\"},\"getMarketBorrowInterestRatePerSecond(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The current borrow interest rate\"},\"getMarketCachedIndex(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The most recent index\"},\"getMarketCurrentIndex(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The estimated current index\"},\"getMarketEarningsRateOverride(uint256)\":{\"return\":\"The market-specific earnings rate\"},\"getMarketIdByTokenAddress(address)\":{\"params\":{\"token\":\"The token to query\"},\"return\":\"The token's marketId if the token is valid\"},\"getMarketInterestRate(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The current borrow interest rate\"},\"getMarketInterestSetter(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The interest-setter address\"},\"getMarketIsClosing(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"True if the market is closing\"},\"getMarketLiquidationSpreadPremium(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The market's spread premium\"},\"getMarketMarginPremium(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The market's margin premium\"},\"getMarketMaxBorrowWei(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The market's max borrow amount. Always negative or 0.\"},\"getMarketMaxSupplyWei(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The market's max supply amount. Always 0 or positive.\"},\"getMarketMaxWei(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The max amount of the market that can be supplied. Always 0 or positive.\"},\"getMarketPrice(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The price of each atomic unit of the token\"},\"getMarketPriceOracle(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The price oracle address\"},\"getMarketSpreadPremium(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The market's spread premium\"},\"getMarketSupplyInterestRateApr(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The current supply interest rate\"},\"getMarketTokenAddress(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The token address\"},\"getMarketTotalPar(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The total principal amounts\"},\"getMarketTotalWei(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The total principal amounts\"},\"getMarketWithInfo(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"A tuple containing the values:                   - A Storage.Market struct with the current state of the market                   - The current estimated interest index                   - The current token price                   - The current market borrow interest rate per second\"},\"getMinBorrowedValue()\":{\"return\":\"The global minimum borrow value\"},\"getNumExcessTokens(uint256)\":{\"params\":{\"marketId\":\"The market to query\"},\"return\":\"The number of excess tokens\"},\"getNumMarkets()\":{\"return\":\"The number of markets\"},\"getOracleSentinel()\":{\"return\":\"The oracle sentinel for DolomiteMargin\"},\"getRiskLimits()\":{\"return\":\"All global risk parameter limits\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[])\":{\"params\":{\"accounts\":\"A list of all accounts that will be used in this operation. Cannot contain                  duplicates. In each action, the relevant account will be referred-to by its                  index in the list.\",\"actions\":\"An ordered list of all actions that will be taken in this operation. The                  actions will be processed in order.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setOperators((address,bool)[])\":{\"params\":{\"args\":\"A list of OperatorArgs which have an address and a boolean. The boolean value              denotes whether to approve (true) or revoke approval (false) for that address.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{\"getAccountBalances((address,uint256))\":{\"notice\":\"Get an account's summary for each market.\"},\"getAccountMarketWithBalanceAtIndex((address,uint256),uint256)\":{\"notice\":\"Get the marketId for an account's market with a non-zero balance at the given index\"},\"getAccountMarketsWithBalances((address,uint256))\":{\"notice\":\"Get a list of markets that have a non-zero balance for an account\"},\"getAccountMaxNumberOfMarketsWithBalances()\":{\"notice\":\"Get the maximum number of assets an account owner can hold in an account number.\"},\"getAccountNumberOfMarketsWithBalances((address,uint256))\":{\"notice\":\"Get the number of markets that have a non-zero balance for an account\"},\"getAccountNumberOfMarketsWithDebt((address,uint256))\":{\"notice\":\"Get the number of markets with which an account has a negative balance.\"},\"getAccountPar((address,uint256),uint256)\":{\"notice\":\"Get the principal value for a particular account and market.\"},\"getAccountRiskOverrideByAccount((address,uint256))\":{\"notice\":\"Get the margin ratio override for an account owner. Used to enable e-mode for certain isolation mode vaults.\"},\"getAccountRiskOverrideSetterByAccountOwner(address)\":{\"notice\":\"Get the account risk override getter for an account owner. This contract enables e-mode for certain isolation mode vaults.\"},\"getAccountStatus((address,uint256))\":{\"notice\":\"Get the status of an account (Normal, Liquidating, or Vaporizing).\"},\"getAccountValues((address,uint256))\":{\"notice\":\"Get the total supplied and total borrowed value of an account.\"},\"getAccountWei((address,uint256),uint256)\":{\"notice\":\"Get the token balance for a particular account and market.\"},\"getAdjustedAccountValues((address,uint256))\":{\"notice\":\"Get the total supplied and total borrowed values of an account adjusted by the marginPremium of each market. Supplied values are divided by (1 + marginPremium) for each market and borrowed values are multiplied by (1 + marginPremium) for each market. Comparing these adjusted values gives the margin-ratio of the account which will be compared to the global margin-ratio when determining if the account can be liquidated.\"},\"getDefaultAccountRiskOverrideSetter()\":{\"notice\":\"Get the account risk override getter for global use. This contract enables e-mode based on the assets held in a position.\"},\"getEarningsRate()\":{\"notice\":\"Get the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets passed-on to suppliers.\"},\"getIsAutoTraderSpecial(address)\":{\"notice\":\"Checks if the autoTrader can only be called invoked by a global operator\"},\"getIsGlobalOperator(address)\":{\"notice\":\"Return true if a particular address is approved as a global operator. Such an address can act on any account as if it were the operator's own.\"},\"getIsLocalOperator(address,address)\":{\"notice\":\"Return true if a particular address is approved as an operator for an owner's accounts. Approved operators can act on the accounts of the owner as if it were the operator's own.\"},\"getLiquidationSpread()\":{\"notice\":\"Get the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of risky positions.\"},\"getLiquidationSpreadForAccountAndPair((address,uint256),uint256,uint256)\":{\"notice\":\"Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread multiplied by (1 + spreadPremium) for each of the two markets.     * If the pair is in e-mode and has a liquidation spread override, then the override is used instead.\"},\"getLiquidationSpreadForPair(uint256,uint256)\":{\"notice\":\"Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread multiplied by (1 + spreadPremium) for each of the two markets.     * Assumes the pair is not in e-mode. Backwards compatible with V1.\"},\"getLiquidationSpreadOverrideByAccount((address,uint256))\":{\"notice\":\"Get the liquidation reward override for an account owner. Used to enable e-mode for certain isolation mode vaults.\"},\"getMarginRatio()\":{\"notice\":\"Get the global minimum margin-ratio that every position must maintain to prevent being liquidated.\"},\"getMarginRatioForAccount((address,uint256))\":{\"notice\":\"Get the global minimum margin-ratio that every position must maintain to prevent being liquidated.\"},\"getMarginRatioOverrideByAccount((address,uint256))\":{\"notice\":\"Get the margin ratio override for an account. Used to enable e-mode for certain accounts/positions.\"},\"getMarket(uint256)\":{\"notice\":\"Get basic information about a particular market.\"},\"getMarketBorrowInterestRateApr(uint256)\":{\"notice\":\"Get the current borrow interest rate for a market. The value is denominated as interest paid per year, and the number is scaled to have 18 decimals.\"},\"getMarketBorrowInterestRatePerSecond(uint256)\":{\"notice\":\"Get the current borrow interest rate for a market. The value is denominated as interest paid per second, and the number is scaled to have 18 decimals. To get APR, multiply the number returned by 31536000 (seconds in a year).\"},\"getMarketCachedIndex(uint256)\":{\"notice\":\"Get the most recently cached interest index for a market.\"},\"getMarketCurrentIndex(uint256)\":{\"notice\":\"Get the interest index for a market if it were to be updated right now.\"},\"getMarketEarningsRateOverride(uint256)\":{\"notice\":\"Get the market-specific earnings that determines what percentage of the interest paid by borrowers gets passed-on to suppliers. If the value is set to 0, the override is not set.\"},\"getMarketIdByTokenAddress(address)\":{\"notice\":\"Get the ERC20 token address for a market.\"},\"getMarketInterestRate(uint256)\":{\"notice\":\"Same as getMarketBorrowInterestRatePerSecond. Added for backwards-compatibility.\"},\"getMarketInterestSetter(uint256)\":{\"notice\":\"Get the interest-setter address for a market.\"},\"getMarketIsClosing(uint256)\":{\"notice\":\"Return true if a particular market is in closing mode. Additional borrows cannot be taken from a market that is closing.\"},\"getMarketLiquidationSpreadPremium(uint256)\":{\"notice\":\"Get the spread premium for a market. A spread premium makes it so that any liquidations that include the market have a higher spread than the global default.\"},\"getMarketMarginPremium(uint256)\":{\"notice\":\"Get the margin premium for a market. A margin premium makes it so that any positions that include the market require a higher collateralization to avoid being liquidated.\"},\"getMarketMaxBorrowWei(uint256)\":{\"notice\":\"Get the max borrow amount for a a market.\"},\"getMarketMaxSupplyWei(uint256)\":{\"notice\":\"Get the max supply amount for a a market.\"},\"getMarketMaxWei(uint256)\":{\"notice\":\"Same as getMarketMaxSupplyWei. Added for backwards-compatibility.\"},\"getMarketPrice(uint256)\":{\"notice\":\"Get the price of the token for a market.\"},\"getMarketPriceOracle(uint256)\":{\"notice\":\"Get the price oracle address for a market.\"},\"getMarketSpreadPremium(uint256)\":{\"notice\":\"Same as getMarketLiquidationSpreadPremium. Added for backwards-compatibility.\"},\"getMarketSupplyInterestRateApr(uint256)\":{\"notice\":\"Get the current supply interest rate for a market.\"},\"getMarketTokenAddress(uint256)\":{\"notice\":\"Get the ERC20 token address for a market.\"},\"getMarketTotalPar(uint256)\":{\"notice\":\"Get the total principal amounts (borrowed and supplied) for a market.\"},\"getMarketTotalWei(uint256)\":{\"notice\":\"Get the total principal amounts (borrowed and supplied) for a market.\"},\"getMarketWithInfo(uint256)\":{\"notice\":\"Get comprehensive information about a particular market.\"},\"getMinBorrowedValue()\":{\"notice\":\"Get the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.\"},\"getNumExcessTokens(uint256)\":{\"notice\":\"Get the number of tokens that are owed to the `owner` of DolomiteMargin. The number of excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin.\"},\"getNumMarkets()\":{\"notice\":\"Get the total number of markets.\"},\"getOracleSentinel()\":{\"notice\":\"Gets the oracle sentinel, which is responsible for checking if the Blockchain or L2 is alive, if liquidations should be processed, and if markets should are in size-down only mode.\"},\"getRiskLimits()\":{\"notice\":\"Get all risk parameter limits in a single struct. These are the maximum limits at which the risk parameters can be set by the admin of DolomiteMargin.\"},\"operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[])\":{\"notice\":\"The main entry-point to DolomiteMargin that allows users and contracts to manage accounts. Take one or more actions on one or more accounts. The msg.sender must be the owner or operator of all accounts except for those being liquidated, vaporized, or traded with. One call to operate() is considered a singular \\\"operation\\\". Account collateralization is ensured only after the completion of the entire operation.\"},\"ownerAddMarket(address,address,address,(uint256),(uint256),uint256,uint256,(uint256),bool)\":{\"notice\":\"Add a new market to DolomiteMargin. Must be for a previously-unsupported ERC20 token.\"},\"ownerSetAccountMaxNumberOfMarketsWithBalances(uint256)\":{\"notice\":\"Sets the number of non-zero balances an account may have within the same `accountIndex`. This ensures a user cannot DOS the system by filling their account with non-zero balances (which linearly increases gas costs when checking collateralization) and disallowing themselves to close the position, because the number of gas units needed to process their transaction exceed the block's gas limit. In turn, this would  prevent the user from also being liquidated, causing the all of the capital to be \\\"stuck\\\" in the position.     * Lowering this number does not \\\"freeze\\\" user accounts that have more than the new limit of balances, because this variable is enforced by checking the users number of non-zero balances against the max or if it sizes down before each transaction finishes.\"},\"ownerSetAccountRiskOverride(address,address)\":{\"notice\":\"Sets the account risk override setter for a given wallet\"},\"ownerSetAutoTraderSpecial(address,bool)\":{\"notice\":\"Approve (or disapprove) an auto trader that can only be called by a global operator. IE for expirations\"},\"ownerSetCallbackGasLimit(uint256)\":{\"notice\":\"Sets the gas limit that's passed to any of the callback functions\"},\"ownerSetDefaultAccountRiskOverride(address)\":{\"notice\":\"Sets the account risk override setter by default for any account\"},\"ownerSetEarningsRate((uint256))\":{\"notice\":\"Set the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets passed-on to suppliers.\"},\"ownerSetEarningsRateOverride(uint256,(uint256))\":{\"notice\":\"Sets the earnings rate override for a given `marketId`. Set it to 0 unset the override.\"},\"ownerSetGlobalOperator(address,bool)\":{\"notice\":\"Approve (or disapprove) an address that is permissioned to be an operator for all accounts in DolomiteMargin. Intended only to approve smart-contracts.\"},\"ownerSetInterestSetter(uint256,address)\":{\"notice\":\"Set the interest-setter for a market.\"},\"ownerSetIsClosing(uint256,bool)\":{\"notice\":\"Set (or unset) the status of a market to \\\"closing\\\". The borrowedValue of a market cannot increase while its status is \\\"closing\\\".\"},\"ownerSetLiquidationSpread((uint256))\":{\"notice\":\"Set the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of risky positions.\"},\"ownerSetLiquidationSpreadPremium(uint256,(uint256))\":{\"notice\":\"Set a premium on the liquidation spread for a market. This makes it so that any liquidations that include this market have a higher spread than the global default.\"},\"ownerSetMarginPremium(uint256,(uint256))\":{\"notice\":\"Set a premium on the minimum margin-ratio for a market. This makes it so that any positions that include this market require a higher collateralization to avoid being liquidated.\"},\"ownerSetMarginRatio((uint256))\":{\"notice\":\"Set the global minimum margin-ratio that every position must maintain to prevent being liquidated.\"},\"ownerSetMaxBorrowWei(uint256,uint256)\":{\"notice\":\"Sets the maximum borrow wei for a given `marketId`.\"},\"ownerSetMaxSupplyWei(uint256,uint256)\":{\"notice\":\"Sets the maximum supply wei for a given `marketId`.\"},\"ownerSetMinBorrowedValue((uint256))\":{\"notice\":\"Set the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.\"},\"ownerSetOracleSentinel(address)\":{\"notice\":\"Sets the current oracle sentinel used to report if borrowing and liquidations are enabled.\"},\"ownerSetPriceOracle(uint256,address)\":{\"notice\":\"Set the price oracle for a market.\"},\"ownerWithdrawExcessTokens(uint256,address)\":{\"notice\":\"Withdraw an ERC20 token for which there is an associated market. Only excess tokens can be withdrawn. The number of excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin.\"},\"ownerWithdrawUnsupportedTokens(address,address)\":{\"notice\":\"Withdraw an ERC20 token for which there is no associated market.\"},\"setOperators((address,bool)[])\":{\"notice\":\"Approves/disapproves any number of operators. An operator is an external address that has the same permissions to manipulate an account as the owner of the account. Operators are simply addresses and therefore may either be externally-owned Ethereum accounts OR smart contracts.     * Operators are also able to act as AutoTrader contracts on behalf of the account owner if the operator is a smart contract and implements the IAutoTrader interface.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":\"IDolomiteMargin\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "/*\n\n    Copyright 2021 Dolomite.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\npragma solidity >=0.5.0;\npragma experimental ABIEncoderV2;\n\nimport { IAccountRiskOverrideSetter } from \"../interfaces/IAccountRiskOverrideSetter.sol\";\nimport { IInterestSetter } from \"../interfaces/IInterestSetter.sol\";\nimport { IOracleSentinel } from \"../interfaces/IOracleSentinel.sol\";\nimport { IPriceOracle } from \"../interfaces/IPriceOracle.sol\";\n\nimport { Account } from \"../lib/Account.sol\";\nimport { Actions } from \"../lib/Actions.sol\";\nimport { Decimal } from \"../lib/Decimal.sol\";\nimport { Interest } from \"../lib/Interest.sol\";\nimport { Monetary } from \"../lib/Monetary.sol\";\nimport { Storage } from \"../lib/Storage.sol\";\nimport { Types } from \"../lib/Types.sol\";\n\ninterface IDolomiteMargin {\n\n    // ============ Getters for Risk Params ============\n\n    /**\n     * Get the global minimum margin-ratio that every position must maintain to prevent being\n     * liquidated.\n     *\n     * @return  The global margin-ratio\n     */\n    function getMarginRatio() external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the global minimum margin-ratio that every position must maintain to prevent being\n     * liquidated.\n     *\n     * @param account       The account whose margin ratio is being queried. This is used to determine if there is an\n     *                      override that supersedes the global minimum.\n     * @return  The margin ratio for this account\n     */\n    function getMarginRatioForAccount(Account.Info calldata account) external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the global liquidation spread. This is the spread between oracle prices that incentivizes\n     * the liquidation of risky positions.\n     *\n     * @return  The global liquidation spread\n     */\n    function getLiquidationSpread() external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread\n     * multiplied by (1 + spreadPremium) for each of the two markets.\n     *\n     * Assumes the pair is not in e-mode. Backwards compatible with V1.\n     *\n     * @param  heldMarketId     The market for which the account has collateral\n     * @param  owedMarketId     The market for which the account has borrowed tokens\n     * @return                  The adjusted liquidation spread\n     */\n    function getLiquidationSpreadForPair(\n        uint256 heldMarketId,\n        uint256 owedMarketId\n    ) external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread\n     * multiplied by (1 + spreadPremium) for each of the two markets.\n     *\n     * If the pair is in e-mode and has a liquidation spread override, then the override is used instead.\n     *\n     * @param  account      The account whose liquidation spread is being queried. This is used to determine if there is\n     *                      an override in place.\n     * @param  heldMarketId The market for which the account has collateral\n     * @param  owedMarketId The market for which the account has borrowed tokens\n     * @return              The adjusted liquidation spread\n     */\n    function getLiquidationSpreadForAccountAndPair(\n        Account.Info calldata account,\n        uint256 heldMarketId,\n        uint256 owedMarketId\n    ) external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the global earnings-rate variable that determines what percentage of the interest paid\n     * by borrowers gets passed-on to suppliers.\n     *\n     * @return  The global earnings rate\n     */\n    function getEarningsRate() external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.\n     *\n     * @return  The global minimum borrow value\n     */\n    function getMinBorrowedValue() external view returns (Monetary.Value memory);\n\n    /**\n     * Get the maximum number of assets an account owner can hold in an account number.\n     *\n     * @return  The maximum number of assets an account owner can hold in an account number.\n     */\n    function getAccountMaxNumberOfMarketsWithBalances() external view returns (uint256);\n\n    /**\n     * Gets the oracle sentinel, which is responsible for checking if the Blockchain or L2 is alive, if liquidations\n     * should be processed, and if markets should are in size-down only mode.\n     *\n     * @return The oracle sentinel for DolomiteMargin\n     */\n    function getOracleSentinel() external view returns (IOracleSentinel);\n\n    /**\n     * @return True if borrowing is globally allowed according to the Oracle Sentinel or false if it is not\n     */\n    function getIsBorrowAllowed() external view returns (bool);\n\n    /**\n     * @return True if liquidations are globally allowed according to the Oracle Sentinel or false if they are not\n     */\n    function getIsLiquidationAllowed() external view returns (bool);\n\n    /**\n     * @return  The gas limit used for making callbacks via `IExternalCallback::onInternalBalanceChange` to smart\n     *          contract wallets.\n     */\n    function getCallbackGasLimit() external view returns (uint256);\n\n    /**\n     * Get the account risk override getter for global use. This contract enables e-mode based on the assets held in a\n     * position.\n     *\n     * @return  The contract that contains risk override information for any account that does NOT have an account-\n     *          specific override.\n     */\n    function getDefaultAccountRiskOverrideSetter() external view returns (IAccountRiskOverrideSetter);\n\n    /**\n     * Get the account risk override getter for an account owner. This contract enables e-mode for certain isolation\n     * mode vaults.\n     *\n     * @param accountOwner  The address of the account to check if there is a margin ratio override.\n     * @return  The contract that contains risk override information for this account.\n     */\n    function getAccountRiskOverrideSetterByAccountOwner(\n        address accountOwner\n    ) external view returns (IAccountRiskOverrideSetter);\n\n    /**\n     * Get the margin ratio override for an account owner. Used to enable e-mode for certain isolation mode vaults.\n     *\n     * @param account                       The account to check if there is a risk override.\n     * @return marginRatioOverride          The margin ratio override for an account owner. Defaults to 0 if there's no\n     *                                      override in place.\n     * @return liquidationSpreadOverride    The margin ratio override for an account owner. Defaults to 0 if there's no\n     *                                      override in place.\n     */\n    function getAccountRiskOverrideByAccount(\n        Account.Info calldata account\n    )\n    external\n    view\n    returns (Decimal.D256 memory marginRatioOverride, Decimal.D256 memory liquidationSpreadOverride);\n\n    /**\n     * Get the margin ratio override for an account. Used to enable e-mode for certain accounts/positions.\n     *\n     * @param account   The account to check if there is a margin ratio override.\n     * @return  The margin ratio override for an account owner. Defaults to 0 if there's no override in place.\n     */\n    function getMarginRatioOverrideByAccount(Account.Info calldata account) external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the liquidation reward override for an account owner. Used to enable e-mode for certain isolation mode\n     * vaults.\n     *\n     * @param account   The account to check if there is a liquidation spread override.\n     * @return  The liquidation spread override for an account owner. Defaults to 0 if there's no override in place.\n     */\n    function getLiquidationSpreadOverrideByAccount(\n        Account.Info calldata account\n    ) external view returns (Decimal.D256 memory);\n\n    /**\n     * Get all risk parameter limits in a single struct. These are the maximum limits at which the\n     * risk parameters can be set by the admin of DolomiteMargin.\n     *\n     * @return  All global risk parameter limits\n     */\n    function getRiskLimits() external view returns (Storage.RiskLimits memory);\n\n    // ============ Getters for Markets ============\n\n    /**\n     * Get the total number of markets.\n     *\n     * @return  The number of markets\n     */\n    function getNumMarkets() external view returns (uint256);\n\n    /**\n     * Get the ERC20 token address for a market.\n     *\n     * @param  token    The token to query\n     * @return          The token's marketId if the token is valid\n     */\n    function getMarketIdByTokenAddress(\n        address token\n    ) external view returns (uint256);\n\n    /**\n     * Get the ERC20 token address for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The token address\n     */\n    function getMarketTokenAddress(\n        uint256 marketId\n    ) external view returns (address);\n\n    /**\n     * Return true if a particular market is in closing mode. Additional borrows cannot be taken\n     * from a market that is closing.\n     *\n     * @param  marketId  The market to query\n     * @return           True if the market is closing\n     */\n    function getMarketIsClosing(\n        uint256 marketId\n    )\n    external\n    view\n    returns (bool);\n\n    /**\n     * Get the price of the token for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The price of each atomic unit of the token\n     */\n    function getMarketPrice(\n        uint256 marketId\n    ) external view returns (Monetary.Price memory);\n\n    /**\n     * Get the total principal amounts (borrowed and supplied) for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The total principal amounts\n     */\n    function getMarketTotalPar(\n        uint256 marketId\n    ) external view returns (Types.TotalPar memory);\n\n    /**\n     * Get the total principal amounts (borrowed and supplied) for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The total principal amounts\n     */\n    function getMarketTotalWei(\n        uint256 marketId\n    ) external view returns (Types.TotalWei memory);\n\n    /**\n     * Get the most recently cached interest index for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The most recent index\n     */\n    function getMarketCachedIndex(\n        uint256 marketId\n    ) external view returns (Interest.Index memory);\n\n    /**\n     * Get the interest index for a market if it were to be updated right now.\n     *\n     * @param  marketId  The market to query\n     * @return           The estimated current index\n     */\n    function getMarketCurrentIndex(\n        uint256 marketId\n    ) external view returns (Interest.Index memory);\n\n    /**\n     * Get the price oracle address for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The price oracle address\n     */\n    function getMarketPriceOracle(\n        uint256 marketId\n    ) external view returns (IPriceOracle);\n\n    /**\n     * Get the interest-setter address for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The interest-setter address\n     */\n    function getMarketInterestSetter(\n        uint256 marketId\n    ) external view returns (IInterestSetter);\n\n    /**\n     * Get the margin premium for a market. A margin premium makes it so that any positions that\n     * include the market require a higher collateralization to avoid being liquidated.\n     *\n     * @param  marketId  The market to query\n     * @return           The market's margin premium\n     */\n    function getMarketMarginPremium(\n        uint256 marketId\n    ) external view returns (Decimal.D256 memory);\n\n    /**\n     * Get the spread premium for a market. A spread premium makes it so that any liquidations\n     * that include the market have a higher spread than the global default.\n     *\n     * @param  marketId  The market to query\n     * @return           The market's spread premium\n     */\n    function getMarketLiquidationSpreadPremium(\n        uint256 marketId\n    ) external view returns (Decimal.D256 memory);\n\n    /**\n     * Same as getMarketLiquidationSpreadPremium. Added for backwards-compatibility.\n     *\n     * @param  marketId  The market to query\n     * @return           The market's spread premium\n     */\n    function getMarketSpreadPremium(\n        uint256 marketId\n    ) external view returns (Decimal.D256 memory);\n\n    /**\n     * Same as getMarketMaxSupplyWei. Added for backwards-compatibility.\n     *\n     * @param  marketId  The market to query\n     * @return           The max amount of the market that can be supplied. Always 0 or positive.\n     */\n    function getMarketMaxWei(\n        uint256 marketId\n    )\n    external\n    view\n    returns (Types.Wei memory);\n\n    /**\n     * Get the max supply amount for a a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The market's max supply amount. Always 0 or positive.\n     */\n    function getMarketMaxSupplyWei(\n        uint256 marketId\n    )\n    external\n    view\n    returns (Types.Wei memory);\n\n    /**\n     * Get the max borrow amount for a a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The market's max borrow amount. Always negative or 0.\n     */\n    function getMarketMaxBorrowWei(\n        uint256 marketId\n    )\n    external\n    view\n    returns (Types.Wei memory);\n\n    /**\n     * Get the market-specific earnings that determines what percentage of the interest paid by borrowers gets passed-on\n     * to suppliers. If the value is set to 0, the override is not set.\n     *\n     * @return  The market-specific earnings rate\n     */\n    function getMarketEarningsRateOverride(\n        uint256 marketId\n    )\n    external\n    view\n    returns (Decimal.D256 memory);\n\n    /**\n     * Get the current borrow interest rate for a market. The value is denominated as interest paid per second, and the\n     * number is scaled to have 18 decimals. To get APR, multiply the number returned by 31536000 (seconds in a year).\n     *\n     * @param  marketId  The market to query\n     * @return           The current borrow interest rate\n     */\n    function getMarketBorrowInterestRatePerSecond(\n        uint256 marketId\n    ) external view returns (Interest.Rate memory);\n\n    /**\n     * Same as getMarketBorrowInterestRatePerSecond. Added for backwards-compatibility.\n     *\n     * @param  marketId  The market to query\n     * @return           The current borrow interest rate\n     */\n    function getMarketInterestRate(\n        uint256 marketId\n    ) external view returns (Interest.Rate memory);\n\n    /**\n     * Get the current borrow interest rate for a market. The value is denominated as interest paid per year, and the\n     * number is scaled to have 18 decimals.\n     *\n     * @param  marketId  The market to query\n     * @return           The current supply interest rate\n     */\n    function getMarketBorrowInterestRateApr(\n        uint256 marketId\n    ) external view returns (Interest.Rate memory);\n\n    /**\n     * Get the current supply interest rate for a market.\n     *\n     * @param  marketId  The market to query\n     * @return           The current supply interest rate\n     */\n    function getMarketSupplyInterestRateApr(\n        uint256 marketId\n    ) external view returns (Interest.Rate memory);\n\n    /**\n     * Get basic information about a particular market.\n     *\n     * @param  marketId  The market to query\n     * @return           A Storage.Market struct with the current state of the market\n     */\n    function getMarket(\n        uint256 marketId\n    ) external view returns (Storage.Market memory);\n\n    /**\n     * Get comprehensive information about a particular market.\n     *\n     * @param  marketId  The market to query\n     * @return           A tuple containing the values:\n     *                    - A Storage.Market struct with the current state of the market\n     *                    - The current estimated interest index\n     *                    - The current token price\n     *                    - The current market borrow interest rate per second\n     */\n    function getMarketWithInfo(\n        uint256 marketId\n    )\n    external\n    view\n    returns (\n        Storage.Market memory,\n        Interest.Index memory,\n        Monetary.Price memory,\n        Interest.Rate memory\n    );\n\n    /**\n     * Get the number of tokens that are owed to the `owner` of DolomiteMargin. The number of excess tokens is\n     * calculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to\n     * DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin.\n     *\n     * @param  marketId  The market to query\n     * @return           The number of excess tokens\n     */\n    function getNumExcessTokens(\n        uint256 marketId\n    ) external view returns (Types.Wei memory);\n\n    // ============ Getters for Accounts ============\n\n    /**\n     * Get the principal value for a particular account and market.\n     *\n     * @param  account   The account to query\n     * @param  marketId  The market to query\n     * @return           The principal value\n     */\n    function getAccountPar(\n        Account.Info calldata account,\n        uint256 marketId\n    ) external view returns (Types.Par memory);\n\n    /**\n     * Get the token balance for a particular account and market.\n     *\n     * @param  account   The account to query\n     * @param  marketId  The market to query\n     * @return           The token amount\n     */\n    function getAccountWei(\n        Account.Info calldata account,\n        uint256 marketId\n    ) external view returns (Types.Wei memory);\n\n    /**\n     * Get the status of an account (Normal, Liquidating, or Vaporizing).\n     *\n     * @param  account  The account to query\n     * @return          The account's status\n     */\n    function getAccountStatus(\n        Account.Info calldata account\n    ) external view returns (Account.Status);\n\n    /**\n     * Get a list of markets that have a non-zero balance for an account\n     *\n     * @param  account  The account to query\n     * @return          The non-sorted marketIds with non-zero balance for the account.\n     */\n    function getAccountMarketsWithBalances(\n        Account.Info calldata account\n    ) external view returns (uint256[] memory);\n\n    /**\n     * Get the number of markets that have a non-zero balance for an account\n     *\n     * @param  account  The account to query\n     * @return          The number of markets with a non-zero balance for the account.\n     */\n    function getAccountNumberOfMarketsWithBalances(\n        Account.Info calldata account\n    ) external view returns (uint256);\n\n    /**\n     * Get the marketId for an account's market with a non-zero balance at the given index\n     *\n     * @param  account  The account to query\n     * @return          The market ID in the provided index for the account.\n     */\n    function getAccountMarketWithBalanceAtIndex(\n        Account.Info calldata account,\n        uint256 index\n    ) external view returns (uint256);\n\n    /**\n     * Get the number of markets with which an account has a negative balance.\n     *\n     * @param  account  The account to query\n     * @return          The number of markets with a negative balance for this account.\n     */\n    function getAccountNumberOfMarketsWithDebt(\n        Account.Info calldata account\n    ) external view returns (uint256);\n\n    /**\n     * Get the total supplied and total borrowed value of an account.\n     *\n     * @param  account  The account to query\n     * @return          The following values:\n     *                   - The supplied value of the account\n     *                   - The borrowed value of the account\n     */\n    function getAccountValues(\n        Account.Info calldata account\n    ) external view returns (Monetary.Value memory, Monetary.Value memory);\n\n    /**\n     * Get the total supplied and total borrowed values of an account adjusted by the marginPremium\n     * of each market. Supplied values are divided by (1 + marginPremium) for each market and\n     * borrowed values are multiplied by (1 + marginPremium) for each market. Comparing these\n     * adjusted values gives the margin-ratio of the account which will be compared to the global\n     * margin-ratio when determining if the account can be liquidated.\n     *\n     * @param  account  The account to query\n     * @return          The following values:\n     *                   - The supplied value of the account (adjusted for marginPremium)\n     *                   - The borrowed value of the account (adjusted for marginPremium)\n     */\n    function getAdjustedAccountValues(\n        Account.Info calldata account\n    ) external view returns (Monetary.Value memory, Monetary.Value memory);\n\n    /**\n     * Get an account's summary for each market.\n     *\n     * @param  account  The account to query\n     * @return          The following values:\n     *                   - The market IDs for each market\n     *                   - The ERC20 token address for each market\n     *                   - The account's principal value for each market\n     *                   - The account's (supplied or borrowed) number of tokens for each market\n     */\n    function getAccountBalances(\n        Account.Info calldata account\n    ) external view returns (uint[] memory, address[] memory, Types.Par[] memory, Types.Wei[] memory);\n\n    // ============ Getters for Account Permissions ============\n\n    /**\n     * Return true if a particular address is approved as an operator for an owner's accounts.\n     * Approved operators can act on the accounts of the owner as if it were the operator's own.\n     *\n     * @param  owner     The owner of the accounts\n     * @param  operator  The possible operator\n     * @return           True if operator is approved for owner's accounts\n     */\n    function getIsLocalOperator(\n        address owner,\n        address operator\n    ) external view returns (bool);\n\n    /**\n     * Return true if a particular address is approved as a global operator. Such an address can\n     * act on any account as if it were the operator's own.\n     *\n     * @param  operator  The address to query\n     * @return           True if operator is a global operator\n     */\n    function getIsGlobalOperator(\n        address operator\n    ) external view returns (bool);\n\n    /**\n     * Checks if the autoTrader can only be called invoked by a global operator\n     *\n     * @param autoTrader    The trader that should be checked for special call privileges.\n     */\n    function getIsAutoTraderSpecial(address autoTrader) external view returns (bool);\n\n    // ============ Write Functions ============\n\n    /**\n     * The main entry-point to DolomiteMargin that allows users and contracts to manage accounts.\n     * Take one or more actions on one or more accounts. The msg.sender must be the owner or\n     * operator of all accounts except for those being liquidated, vaporized, or traded with.\n     * One call to operate() is considered a singular \"operation\". Account collateralization is\n     * ensured only after the completion of the entire operation.\n     *\n     * @param  accounts  A list of all accounts that will be used in this operation. Cannot contain\n     *                   duplicates. In each action, the relevant account will be referred-to by its\n     *                   index in the list.\n     * @param  actions   An ordered list of all actions that will be taken in this operation. The\n     *                   actions will be processed in order.\n     */\n    function operate(\n        Account.Info[] calldata accounts,\n        Actions.ActionArgs[] calldata actions\n    ) external;\n\n    /**\n     * Approves/disapproves any number of operators. An operator is an external address that has the\n     * same permissions to manipulate an account as the owner of the account. Operators are simply\n     * addresses and therefore may either be externally-owned Ethereum accounts OR smart contracts.\n     *\n     * Operators are also able to act as AutoTrader contracts on behalf of the account owner if the\n     * operator is a smart contract and implements the IAutoTrader interface.\n     *\n     * @param  args  A list of OperatorArgs which have an address and a boolean. The boolean value\n     *               denotes whether to approve (true) or revoke approval (false) for that address.\n     */\n    function setOperators(\n        Types.OperatorArg[] calldata args\n    ) external;\n\n    // =========================================\n    // ============ Owner Functions ============\n    // =========================================\n\n    // ============ Token Functions ============\n\n    /**\n     * Withdraw an ERC20 token for which there is an associated market. Only excess tokens can be withdrawn. The number\n     * of excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number\n     * of tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by\n     * DolomiteMargin.\n     */\n    function ownerWithdrawExcessTokens(\n        uint256 marketId,\n        address recipient\n    )\n    external\n    returns (uint256);\n\n    /**\n     * Withdraw an ERC20 token for which there is no associated market.\n     */\n    function ownerWithdrawUnsupportedTokens(\n        address token,\n        address recipient\n    )\n    external\n    returns (uint256);\n\n    // ============ Market Functions ============\n\n    /**\n     * Add a new market to DolomiteMargin. Must be for a previously-unsupported ERC20 token.\n     */\n    function ownerAddMarket(\n        address token,\n        IPriceOracle priceOracle,\n        IInterestSetter interestSetter,\n        Decimal.D256 calldata marginPremium,\n        Decimal.D256 calldata spreadPremium,\n        uint256 maxSupplyWei,\n        uint256 maxBorrowWei,\n        Decimal.D256 calldata earningsRateOverride,\n        bool isClosing\n    )\n    external;\n\n    /**\n     * Set (or unset) the status of a market to \"closing\". The borrowedValue of a market cannot increase while its\n     * status is \"closing\".\n     */\n    function ownerSetIsClosing(\n        uint256 marketId,\n        bool isClosing\n    )\n    external;\n\n    /**\n     * Set the price oracle for a market.\n     */\n    function ownerSetPriceOracle(\n        uint256 marketId,\n        IPriceOracle priceOracle\n    )\n    external;\n\n    /**\n     * Set the interest-setter for a market.\n     */\n    function ownerSetInterestSetter(\n        uint256 marketId,\n        IInterestSetter interestSetter\n    )\n    external;\n\n    /**\n     * Set a premium on the minimum margin-ratio for a market. This makes it so that any positions that include this\n     * market require a higher collateralization to avoid being liquidated.\n     */\n    function ownerSetMarginPremium(\n        uint256 marketId,\n        Decimal.D256 calldata marginPremium\n    )\n    external;\n\n    /**\n     * Set a premium on the liquidation spread for a market. This makes it so that any liquidations that include this\n     * market have a higher spread than the global default.\n     */\n    function ownerSetLiquidationSpreadPremium(\n        uint256 marketId,\n        Decimal.D256 calldata liquidationSpreadPremium\n    )\n    external;\n\n    /**\n     * Sets the maximum supply wei for a given `marketId`.\n     */\n    function ownerSetMaxSupplyWei(\n        uint256 marketId,\n        uint256 maxSupplyWei\n    )\n    external;\n\n    /**\n     * Sets the maximum borrow wei for a given `marketId`.\n     */\n    function ownerSetMaxBorrowWei(\n        uint256 marketId,\n        uint256 maxBorrowWei\n    )\n    external;\n\n    /**\n     * Sets the earnings rate override for a given `marketId`. Set it to 0 unset the override.\n     */\n    function ownerSetEarningsRateOverride(\n        uint256 marketId,\n        Decimal.D256 calldata earningsRateOverride\n    )\n    external;\n\n    // ============ Risk Functions ============\n\n    /**\n     * Set the global minimum margin-ratio that every position must maintain to prevent being liquidated.\n     */\n    function ownerSetMarginRatio(\n        Decimal.D256 calldata ratio\n    )\n    external;\n\n    /**\n     * Set the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of\n     * risky positions.\n     */\n    function ownerSetLiquidationSpread(\n        Decimal.D256 calldata spread\n    )\n    external;\n\n    /**\n     * Set the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets\n     * passed-on to suppliers.\n     */\n    function ownerSetEarningsRate(\n        Decimal.D256 calldata earningsRate\n    )\n    external;\n\n    /**\n     * Set the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.\n     */\n    function ownerSetMinBorrowedValue(\n        Monetary.Value calldata minBorrowedValue\n    )\n    external;\n\n    /**\n     * Sets the number of non-zero balances an account may have within the same `accountIndex`. This ensures a user\n     * cannot DOS the system by filling their account with non-zero balances (which linearly increases gas costs when\n     * checking collateralization) and disallowing themselves to close the position, because the number of gas units\n     * needed to process their transaction exceed the block's gas limit. In turn, this would  prevent the user from also\n     * being liquidated, causing the all of the capital to be \"stuck\" in the position.\n     *\n     * Lowering this number does not \"freeze\" user accounts that have more than the new limit of balances, because this\n     * variable is enforced by checking the users number of non-zero balances against the max or if it sizes down before\n     * each transaction finishes.\n     */\n    function ownerSetAccountMaxNumberOfMarketsWithBalances(\n        uint256 accountMaxNumberOfMarketsWithBalances\n    )\n    external;\n\n    /**\n     * Sets the current oracle sentinel used to report if borrowing and liquidations are enabled.\n     */\n    function ownerSetOracleSentinel(\n        IOracleSentinel oracleSentinel\n    )\n    external;\n\n    /**\n     * Sets the gas limit that's passed to any of the callback functions\n     */\n    function ownerSetCallbackGasLimit(\n        uint256 callbackGasLimit\n    )\n    external;\n\n    /**\n     * Sets the account risk override setter by default for any account\n     */\n    function ownerSetDefaultAccountRiskOverride(\n        IAccountRiskOverrideSetter accountRiskOverrideSetter\n    )\n    external;\n\n    /**\n     * Sets the account risk override setter for a given wallet\n     */\n    function ownerSetAccountRiskOverride(\n        address accountOwner,\n        IAccountRiskOverrideSetter accountRiskOverrideSetter\n    )\n    external;\n\n    // ============ Global Operator Functions ============\n\n    /**\n     * Approve (or disapprove) an address that is permissioned to be an operator for all accounts in DolomiteMargin.\n     * Intended only to approve smart-contracts.\n     */\n    function ownerSetGlobalOperator(\n        address operator,\n        bool approved\n    )\n    external;\n\n    /**\n     * Approve (or disapprove) an auto trader that can only be called by a global operator. IE for expirations\n     */\n    function ownerSetAutoTraderSpecial(\n        address autoTrader,\n        bool special\n    )\n    external;\n\n    // ============ Owner Functions ============\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() external view returns (address);\n\n    /**\n     * @dev Returns true if the caller is the current owner.\n     */\n    function isOwner() external view returns (bool);\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() external;\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) external;\n}\n",
  "sourcePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
  "ast": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
    "exportedSymbols": {
      "IDolomiteMargin": [
        24693
      ]
    },
    "id": 24694,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24075,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "595:24:80"
      },
      {
        "id": 24076,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "620:33:80"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol",
        "file": "../interfaces/IAccountRiskOverrideSetter.sol",
        "id": 24078,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24030,
        "src": "655:90:80",
        "symbolAliases": [
          {
            "foreign": 24077,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol",
        "file": "../interfaces/IInterestSetter.sol",
        "id": 24080,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24790,
        "src": "746:68:80",
        "symbolAliases": [
          {
            "foreign": 24079,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol",
        "file": "../interfaces/IOracleSentinel.sol",
        "id": 24082,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24818,
        "src": "815:68:80",
        "symbolAliases": [
          {
            "foreign": 24081,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol",
        "file": "../interfaces/IPriceOracle.sol",
        "id": 24084,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24836,
        "src": "884:62:80",
        "symbolAliases": [
          {
            "foreign": 24083,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
        "file": "../lib/Account.sol",
        "id": 24086,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24886,
        "src": "948:45:80",
        "symbolAliases": [
          {
            "foreign": 24085,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol",
        "file": "../lib/Actions.sol",
        "id": 24088,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 25370,
        "src": "994:45:80",
        "symbolAliases": [
          {
            "foreign": 24087,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol",
        "file": "../lib/Decimal.sol",
        "id": 24090,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 26024,
        "src": "1040:45:80",
        "symbolAliases": [
          {
            "foreign": 24089,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol",
        "file": "../lib/Interest.sol",
        "id": 24092,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 27751,
        "src": "1086:47:80",
        "symbolAliases": [
          {
            "foreign": 24091,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol",
        "file": "../lib/Monetary.sol",
        "id": 24094,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 27761,
        "src": "1134:47:80",
        "symbolAliases": [
          {
            "foreign": 24093,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol",
        "file": "../lib/Storage.sol",
        "id": 24096,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 30712,
        "src": "1182:45:80",
        "symbolAliases": [
          {
            "foreign": 24095,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
        "file": "../lib/Types.sol",
        "id": 24098,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 31362,
        "src": "1228:41:80",
        "symbolAliases": [
          {
            "foreign": 24097,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 24693,
        "linearizedBaseContracts": [
          24693
        ],
        "name": "IDolomiteMargin",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": "Get the global minimum margin-ratio that every position must maintain to prevent being\nliquidated.\n     * @return  The global margin-ratio",
            "id": 24103,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarginRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24099,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1561:2:80"
            },
            "returnParameters": {
              "id": 24102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24101,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24103,
                  "src": "1587:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24100,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "1587:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1586:21:80"
            },
            "scope": 24693,
            "src": "1538:70:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global minimum margin-ratio that every position must maintain to prevent being\nliquidated.\n     * @param account       The account whose margin ratio is being queried. This is used to determine if there is an\n                     override that supersedes the global minimum.\n@return  The margin ratio for this account",
            "id": 24110,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarginRatioForAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24105,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24110,
                  "src": "2025:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24104,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "2025:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2024:31:80"
            },
            "returnParameters": {
              "id": 24109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24108,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24110,
                  "src": "2079:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24107,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2079:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2078:21:80"
            },
            "scope": 24693,
            "src": "1991:109:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global liquidation spread. This is the spread between oracle prices that incentivizes\nthe liquidation of risky positions.\n     * @return  The global liquidation spread",
            "id": 24115,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpread",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2348:2:80"
            },
            "returnParameters": {
              "id": 24114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24113,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24115,
                  "src": "2374:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24112,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2374:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2373:21:80"
            },
            "scope": 24693,
            "src": "2319:76:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread\nmultiplied by (1 + spreadPremium) for each of the two markets.\n     * Assumes the pair is not in e-mode. Backwards compatible with V1.\n     * @param  heldMarketId     The market for which the account has collateral\n@param  owedMarketId     The market for which the account has borrowed tokens\n@return                  The adjusted liquidation spread",
            "id": 24124,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpreadForPair",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24117,
                  "name": "heldMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24124,
                  "src": "2960:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2960:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24119,
                  "name": "owedMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24124,
                  "src": "2990:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24118,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2950:66:80"
            },
            "returnParameters": {
              "id": 24123,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24122,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24124,
                  "src": "3040:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24121,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3040:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3039:21:80"
            },
            "scope": 24693,
            "src": "2914:147:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread\nmultiplied by (1 + spreadPremium) for each of the two markets.\n     * If the pair is in e-mode and has a liquidation spread override, then the override is used instead.\n     * @param  account      The account whose liquidation spread is being queried. This is used to determine if there is\n                     an override in place.\n@param  heldMarketId The market for which the account has collateral\n@param  owedMarketId The market for which the account has borrowed tokens\n@return              The adjusted liquidation spread",
            "id": 24135,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpreadForAccountAndPair",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24126,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3829:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24125,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "3829:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24128,
                  "name": "heldMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3868:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3868:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24130,
                  "name": "owedMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3898:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3898:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3819:105:80"
            },
            "returnParameters": {
              "id": 24134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24133,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3948:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24132,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3948:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3947:21:80"
            },
            "scope": 24693,
            "src": "3773:196:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global earnings-rate variable that determines what percentage of the interest paid\nby borrowers gets passed-on to suppliers.\n     * @return  The global earnings rate",
            "id": 24140,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getEarningsRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4210:2:80"
            },
            "returnParameters": {
              "id": 24139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24138,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24140,
                  "src": "4236:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24137,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "4236:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4235:21:80"
            },
            "scope": 24693,
            "src": "4186:71:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.\n     * @return  The global minimum borrow value",
            "id": 24145,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMinBorrowedValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4469:2:80"
            },
            "returnParameters": {
              "id": 24144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24145,
                  "src": "4495:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24142,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "4495:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4494:23:80"
            },
            "scope": 24693,
            "src": "4441:77:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the maximum number of assets an account owner can hold in an account number.\n     * @return  The maximum number of assets an account owner can hold in an account number.",
            "id": 24150,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4777:2:80"
            },
            "returnParameters": {
              "id": 24149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24148,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24150,
                  "src": "4803:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24147,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4803:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4802:9:80"
            },
            "scope": 24693,
            "src": "4728:84:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Gets the oracle sentinel, which is responsible for checking if the Blockchain or L2 is alive, if liquidations\nshould be processed, and if markets should are in size-down only mode.\n     * @return The oracle sentinel for DolomiteMargin",
            "id": 24155,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getOracleSentinel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5116:2:80"
            },
            "returnParameters": {
              "id": 24154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24153,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24155,
                  "src": "5142:15:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24152,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "5142:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5141:17:80"
            },
            "scope": 24693,
            "src": "5090:69:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return True if borrowing is globally allowed according to the Oracle Sentinel or false if it is not",
            "id": 24160,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsBorrowAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5316:2:80"
            },
            "returnParameters": {
              "id": 24159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24158,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24160,
                  "src": "5342:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24157,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5342:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5341:6:80"
            },
            "scope": 24693,
            "src": "5289:59:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return True if liquidations are globally allowed according to the Oracle Sentinel or false if they are not",
            "id": 24165,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsLiquidationAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5517:2:80"
            },
            "returnParameters": {
              "id": 24164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24163,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24165,
                  "src": "5543:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24162,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5543:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5542:6:80"
            },
            "scope": 24693,
            "src": "5485:64:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return  The gas limit used for making callbacks via `IExternalCallback::onInternalBalanceChange` to smart\n         contract wallets.",
            "id": 24170,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getCallbackGasLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5747:2:80"
            },
            "returnParameters": {
              "id": 24169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24168,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24170,
                  "src": "5773:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24167,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5773:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5772:9:80"
            },
            "scope": 24693,
            "src": "5719:63:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the account risk override getter for global use. This contract enables e-mode based on the assets held in a\nposition.\n     * @return  The contract that contains risk override information for any account that does NOT have an account-\n         specific override.",
            "id": 24175,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getDefaultAccountRiskOverrideSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24171,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6142:2:80"
            },
            "returnParameters": {
              "id": 24174,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24173,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24175,
                  "src": "6168:26:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24172,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "6168:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6167:28:80"
            },
            "scope": 24693,
            "src": "6098:98:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the account risk override getter for an account owner. This contract enables e-mode for certain isolation\nmode vaults.\n     * @param accountOwner  The address of the account to check if there is a margin ratio override.\n@return  The contract that contains risk override information for this account.",
            "id": 24182,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountRiskOverrideSetterByAccountOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24178,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24177,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24182,
                  "src": "6611:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24176,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6611:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6601:36:80"
            },
            "returnParameters": {
              "id": 24181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24180,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24182,
                  "src": "6661:26:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24179,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "6661:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6660:28:80"
            },
            "scope": 24693,
            "src": "6550:139:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the margin ratio override for an account owner. Used to enable e-mode for certain isolation mode vaults.\n     * @param account                       The account to check if there is a risk override.\n@return marginRatioOverride          The margin ratio override for an account owner. Defaults to 0 if there's no\n                                     override in place.\n@return liquidationSpreadOverride    The margin ratio override for an account owner. Defaults to 0 if there's no\n                                     override in place.",
            "id": 24191,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountRiskOverrideByAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24184,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24191,
                  "src": "7344:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24183,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "7344:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7334:45:80"
            },
            "returnParameters": {
              "id": 24190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24187,
                  "name": "marginRatioOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24191,
                  "src": "7415:39:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24186,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7415:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24189,
                  "name": "liquidationSpreadOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24191,
                  "src": "7456:45:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24188,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7456:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7414:88:80"
            },
            "scope": 24693,
            "src": "7294:209:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the margin ratio override for an account. Used to enable e-mode for certain accounts/positions.\n     * @param account   The account to check if there is a margin ratio override.\n@return  The margin ratio override for an account owner. Defaults to 0 if there's no override in place.",
            "id": 24198,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarginRatioOverrideByAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24193,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24198,
                  "src": "7873:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24192,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "7873:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7872:31:80"
            },
            "returnParameters": {
              "id": 24197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24196,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24198,
                  "src": "7927:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24195,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7927:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7926:21:80"
            },
            "scope": 24693,
            "src": "7832:116:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the liquidation reward override for an account owner. Used to enable e-mode for certain isolation mode\nvaults.\n     * @param account   The account to check if there is a liquidation spread override.\n@return  The liquidation spread override for an account owner. Defaults to 0 if there's no override in place.",
            "id": 24205,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpreadOverrideByAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24200,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24205,
                  "src": "8367:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24199,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "8367:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8357:45:80"
            },
            "returnParameters": {
              "id": 24204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24203,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24205,
                  "src": "8426:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24202,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "8426:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8425:21:80"
            },
            "scope": 24693,
            "src": "8311:136:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get all risk parameter limits in a single struct. These are the maximum limits at which the\nrisk parameters can be set by the admin of DolomiteMargin.\n     * @return  All global risk parameter limits",
            "id": 24210,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getRiskLimits",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24206,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8712:2:80"
            },
            "returnParameters": {
              "id": 24209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24208,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24210,
                  "src": "8738:25:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RiskLimits_$28725_memory_ptr",
                    "typeString": "struct Storage.RiskLimits"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24207,
                    "name": "Storage.RiskLimits",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28725,
                    "src": "8738:18:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RiskLimits_$28725_storage_ptr",
                      "typeString": "struct Storage.RiskLimits"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8737:27:80"
            },
            "scope": 24693,
            "src": "8690:75:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total number of markets.\n     * @return  The number of markets",
            "id": 24215,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getNumMarkets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24211,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8948:2:80"
            },
            "returnParameters": {
              "id": 24214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24213,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24215,
                  "src": "8974:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8974:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8973:9:80"
            },
            "scope": 24693,
            "src": "8926:57:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the ERC20 token address for a market.\n     * @param  token    The token to query\n@return          The token's marketId if the token is valid",
            "id": 24222,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketIdByTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24217,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 24222,
                  "src": "9215:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24216,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9215:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9205:29:80"
            },
            "returnParameters": {
              "id": 24221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24220,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24222,
                  "src": "9258:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9258:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9257:9:80"
            },
            "scope": 24693,
            "src": "9171:96:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the ERC20 token address for a market.\n     * @param  marketId  The market to query\n@return           The token address",
            "id": 24229,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24224,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24229,
                  "src": "9473:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9473:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9463:32:80"
            },
            "returnParameters": {
              "id": 24228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24227,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24229,
                  "src": "9519:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9519:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9518:9:80"
            },
            "scope": 24693,
            "src": "9433:95:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Return true if a particular market is in closing mode. Additional borrows cannot be taken\nfrom a market that is closing.\n     * @param  marketId  The market to query\n@return           True if the market is closing",
            "id": 24236,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketIsClosing",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24231,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24236,
                  "src": "9829:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24230,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9829:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9819:32:80"
            },
            "returnParameters": {
              "id": 24235,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24234,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24236,
                  "src": "9887:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24233,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9887:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9886:6:80"
            },
            "scope": 24693,
            "src": "9792:101:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the price of the token for a market.\n     * @param  marketId  The market to query\n@return           The price of each atomic unit of the token",
            "id": 24243,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24238,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24243,
                  "src": "10116:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24237,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10116:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10106:32:80"
            },
            "returnParameters": {
              "id": 24242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24241,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24243,
                  "src": "10162:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Price_$27756_memory_ptr",
                    "typeString": "struct Monetary.Price"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24240,
                    "name": "Monetary.Price",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27756,
                    "src": "10162:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$27756_storage_ptr",
                      "typeString": "struct Monetary.Price"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10161:23:80"
            },
            "scope": 24693,
            "src": "10083:102:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total principal amounts (borrowed and supplied) for a market.\n     * @param  marketId  The market to query\n@return           The total principal amounts",
            "id": 24250,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketTotalPar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24245,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24250,
                  "src": "10425:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10425:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10415:32:80"
            },
            "returnParameters": {
              "id": 24249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24248,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24250,
                  "src": "10471:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TotalPar_$30885_memory_ptr",
                    "typeString": "struct Types.TotalPar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24247,
                    "name": "Types.TotalPar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 30885,
                    "src": "10471:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TotalPar_$30885_storage_ptr",
                      "typeString": "struct Types.TotalPar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10470:23:80"
            },
            "scope": 24693,
            "src": "10389:105:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total principal amounts (borrowed and supplied) for a market.\n     * @param  marketId  The market to query\n@return           The total principal amounts",
            "id": 24257,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketTotalWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24252,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24257,
                  "src": "10734:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10734:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10724:32:80"
            },
            "returnParameters": {
              "id": 24256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24255,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24257,
                  "src": "10780:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TotalWei_$31144_memory_ptr",
                    "typeString": "struct Types.TotalWei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24254,
                    "name": "Types.TotalWei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31144,
                    "src": "10780:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TotalWei_$31144_storage_ptr",
                      "typeString": "struct Types.TotalWei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10779:23:80"
            },
            "scope": 24693,
            "src": "10698:105:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the most recently cached interest index for a market.\n     * @param  marketId  The market to query\n@return           The most recent index",
            "id": 24264,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketCachedIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24259,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24264,
                  "src": "11028:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11028:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11018:32:80"
            },
            "returnParameters": {
              "id": 24263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24262,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24264,
                  "src": "11074:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                    "typeString": "struct Interest.Index"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24261,
                    "name": "Interest.Index",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27471,
                    "src": "11074:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage_ptr",
                      "typeString": "struct Interest.Index"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11073:23:80"
            },
            "scope": 24693,
            "src": "10989:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the interest index for a market if it were to be updated right now.\n     * @param  marketId  The market to query\n@return           The estimated current index",
            "id": 24271,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketCurrentIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24266,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24271,
                  "src": "11343:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11343:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11333:32:80"
            },
            "returnParameters": {
              "id": 24270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24269,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24271,
                  "src": "11389:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                    "typeString": "struct Interest.Index"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24268,
                    "name": "Interest.Index",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27471,
                    "src": "11389:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage_ptr",
                      "typeString": "struct Interest.Index"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11388:23:80"
            },
            "scope": 24693,
            "src": "11303:109:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the price oracle address for a market.\n     * @param  marketId  The market to query\n@return           The price oracle address",
            "id": 24278,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24273,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24278,
                  "src": "11625:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24272,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11625:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11615:32:80"
            },
            "returnParameters": {
              "id": 24277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24276,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24278,
                  "src": "11671:12:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24275,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "11671:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11670:14:80"
            },
            "scope": 24693,
            "src": "11586:99:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the interest-setter address for a market.\n     * @param  marketId  The market to query\n@return           The interest-setter address",
            "id": 24285,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24280,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24285,
                  "src": "11907:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11907:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11897:32:80"
            },
            "returnParameters": {
              "id": 24284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24283,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24285,
                  "src": "11953:15:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24282,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "11953:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11952:17:80"
            },
            "scope": 24693,
            "src": "11865:105:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the margin premium for a market. A margin premium makes it so that any positions that\ninclude the market require a higher collateralization to avoid being liquidated.\n     * @param  marketId  The market to query\n@return           The market's margin premium",
            "id": 24292,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24287,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24292,
                  "src": "12323:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12323:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12313:32:80"
            },
            "returnParameters": {
              "id": 24291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24290,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24292,
                  "src": "12369:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24289,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "12369:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12368:21:80"
            },
            "scope": 24693,
            "src": "12282:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the spread premium for a market. A spread premium makes it so that any liquidations\nthat include the market have a higher spread than the global default.\n     * @param  marketId  The market to query\n@return           The market's spread premium",
            "id": 24299,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24294,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24299,
                  "src": "12741:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12741:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12731:32:80"
            },
            "returnParameters": {
              "id": 24298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24297,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24299,
                  "src": "12787:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24296,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "12787:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12786:21:80"
            },
            "scope": 24693,
            "src": "12689:119:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Same as getMarketLiquidationSpreadPremium. Added for backwards-compatibility.\n     * @param  marketId  The market to query\n@return           The market's spread premium",
            "id": 24306,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24302,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24301,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24306,
                  "src": "13061:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24300,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13061:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13051:32:80"
            },
            "returnParameters": {
              "id": 24305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24304,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24306,
                  "src": "13107:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24303,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "13107:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13106:21:80"
            },
            "scope": 24693,
            "src": "13020:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Same as getMarketMaxSupplyWei. Added for backwards-compatibility.\n     * @param  marketId  The market to query\n@return           The max amount of the market that can be supplied. Always 0 or positive.",
            "id": 24313,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMaxWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24308,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24313,
                  "src": "13407:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13407:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13397:32:80"
            },
            "returnParameters": {
              "id": 24312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24311,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24313,
                  "src": "13465:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24310,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "13465:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13464:18:80"
            },
            "scope": 24693,
            "src": "13373:110:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the max supply amount for a a market.\n     * @param  marketId  The market to query\n@return           The market's max supply amount. Always 0 or positive.",
            "id": 24320,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24315,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24320,
                  "src": "13725:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13725:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13715:32:80"
            },
            "returnParameters": {
              "id": 24319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24318,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24320,
                  "src": "13783:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24317,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "13783:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13782:18:80"
            },
            "scope": 24693,
            "src": "13685:116:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the max borrow amount for a a market.\n     * @param  marketId  The market to query\n@return           The market's max borrow amount. Always negative or 0.",
            "id": 24327,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24322,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24327,
                  "src": "14043:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24321,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14043:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14033:32:80"
            },
            "returnParameters": {
              "id": 24326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24327,
                  "src": "14101:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24324,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "14101:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14100:18:80"
            },
            "scope": 24693,
            "src": "14003:116:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the market-specific earnings that determines what percentage of the interest paid by borrowers gets passed-on\nto suppliers. If the value is set to 0, the override is not set.\n     * @return  The market-specific earnings rate",
            "id": 24334,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24329,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24334,
                  "src": "14439:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14439:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14429:32:80"
            },
            "returnParameters": {
              "id": 24333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24332,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24334,
                  "src": "14497:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24331,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "14497:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14496:21:80"
            },
            "scope": 24693,
            "src": "14391:127:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the current borrow interest rate for a market. The value is denominated as interest paid per second, and the\nnumber is scaled to have 18 decimals. To get APR, multiply the number returned by 31536000 (seconds in a year).\n     * @param  marketId  The market to query\n@return           The current borrow interest rate",
            "id": 24341,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketBorrowInterestRatePerSecond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24337,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24336,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24341,
                  "src": "14944:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24335,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14944:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14934:32:80"
            },
            "returnParameters": {
              "id": 24340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24339,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24341,
                  "src": "14990:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24338,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "14990:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14989:22:80"
            },
            "scope": 24693,
            "src": "14889:123:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Same as getMarketBorrowInterestRatePerSecond. Added for backwards-compatibility.\n     * @param  marketId  The market to query\n@return           The current borrow interest rate",
            "id": 24348,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketInterestRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24343,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24348,
                  "src": "15272:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15272:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15262:32:80"
            },
            "returnParameters": {
              "id": 24347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24346,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24348,
                  "src": "15318:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24345,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "15318:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15317:22:80"
            },
            "scope": 24693,
            "src": "15232:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the current borrow interest rate for a market. The value is denominated as interest paid per year, and the\nnumber is scaled to have 18 decimals.\n     * @param  marketId  The market to query\n@return           The current supply interest rate",
            "id": 24355,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketBorrowInterestRateApr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24350,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24355,
                  "src": "15684:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24349,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15684:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15674:32:80"
            },
            "returnParameters": {
              "id": 24354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24353,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24355,
                  "src": "15730:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24352,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "15730:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15729:22:80"
            },
            "scope": 24693,
            "src": "15635:117:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the current supply interest rate for a market.\n     * @param  marketId  The market to query\n@return           The current supply interest rate",
            "id": 24362,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketSupplyInterestRateApr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24357,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24362,
                  "src": "15991:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15991:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15981:32:80"
            },
            "returnParameters": {
              "id": 24361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24360,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24362,
                  "src": "16037:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24359,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "16037:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16036:22:80"
            },
            "scope": 24693,
            "src": "15942:117:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get basic information about a particular market.\n     * @param  marketId  The market to query\n@return           A Storage.Market struct with the current state of the market",
            "id": 24369,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24364,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24369,
                  "src": "16303:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24363,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16303:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16293:32:80"
            },
            "returnParameters": {
              "id": 24368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24367,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24369,
                  "src": "16349:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Market_$28689_memory_ptr",
                    "typeString": "struct Storage.Market"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24366,
                    "name": "Storage.Market",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28689,
                    "src": "16349:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Market_$28689_storage_ptr",
                      "typeString": "struct Storage.Market"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16348:23:80"
            },
            "scope": 24693,
            "src": "16275:97:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get comprehensive information about a particular market.\n     * @param  marketId  The market to query\n@return           A tuple containing the values:\n                   - A Storage.Market struct with the current state of the market\n                   - The current estimated interest index\n                   - The current token price\n                   - The current market borrow interest rate per second",
            "id": 24382,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketWithInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24371,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "16887:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16887:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16877:32:80"
            },
            "returnParameters": {
              "id": 24381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24374,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "16954:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Market_$28689_memory_ptr",
                    "typeString": "struct Storage.Market"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24373,
                    "name": "Storage.Market",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28689,
                    "src": "16954:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Market_$28689_storage_ptr",
                      "typeString": "struct Storage.Market"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24376,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "16985:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                    "typeString": "struct Interest.Index"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24375,
                    "name": "Interest.Index",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27471,
                    "src": "16985:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage_ptr",
                      "typeString": "struct Interest.Index"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24378,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "17016:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Price_$27756_memory_ptr",
                    "typeString": "struct Monetary.Price"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24377,
                    "name": "Monetary.Price",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27756,
                    "src": "17016:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$27756_storage_ptr",
                      "typeString": "struct Monetary.Price"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24380,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "17047:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24379,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "17047:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16944:129:80"
            },
            "scope": 24693,
            "src": "16851:223:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the number of tokens that are owed to the `owner` of DolomiteMargin. The number of excess tokens is\ncalculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to\nDolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin.\n     * @param  marketId  The market to query\n@return           The number of excess tokens",
            "id": 24389,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getNumExcessTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24384,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24389,
                  "src": "17576:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17576:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17566:32:80"
            },
            "returnParameters": {
              "id": 24388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24387,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24389,
                  "src": "17622:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24386,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "17622:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17621:18:80"
            },
            "scope": 24693,
            "src": "17539:101:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the principal value for a particular account and market.\n     * @param  account   The account to query\n@param  marketId  The market to query\n@return           The principal value",
            "id": 24398,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountPar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24391,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24398,
                  "src": "17960:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24390,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "17960:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24393,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24398,
                  "src": "17999:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17999:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17950:71:80"
            },
            "returnParameters": {
              "id": 24397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24396,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24398,
                  "src": "18045:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Par_$30890_memory_ptr",
                    "typeString": "struct Types.Par"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24395,
                    "name": "Types.Par",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 30890,
                    "src": "18045:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Par_$30890_storage_ptr",
                      "typeString": "struct Types.Par"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18044:18:80"
            },
            "scope": 24693,
            "src": "17928:135:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the token balance for a particular account and market.\n     * @param  account   The account to query\n@param  marketId  The market to query\n@return           The token amount",
            "id": 24407,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24403,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24400,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24407,
                  "src": "18323:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24399,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "18323:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24402,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24407,
                  "src": "18362:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24401,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18362:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18313:71:80"
            },
            "returnParameters": {
              "id": 24406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24405,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24407,
                  "src": "18408:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24404,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "18408:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18407:18:80"
            },
            "scope": 24693,
            "src": "18291:135:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the status of an account (Normal, Liquidating, or Vaporizing).\n     * @param  account  The account to query\n@return          The account's status",
            "id": 24414,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24409,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24414,
                  "src": "18654:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24408,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "18654:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18644:45:80"
            },
            "returnParameters": {
              "id": 24413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24412,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24414,
                  "src": "18713:14:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Status_$24846",
                    "typeString": "enum Account.Status"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24411,
                    "name": "Account.Status",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24846,
                    "src": "18713:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Status_$24846",
                      "typeString": "enum Account.Status"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18712:16:80"
            },
            "scope": 24693,
            "src": "18619:110:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get a list of markets that have a non-zero balance for an account\n     * @param  account  The account to query\n@return          The non-sorted marketIds with non-zero balance for the account.",
            "id": 24422,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24416,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24422,
                  "src": "19012:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24415,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "19012:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19002:45:80"
            },
            "returnParameters": {
              "id": 24421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24420,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24422,
                  "src": "19071:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24418,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "19071:7:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24419,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19071:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19070:18:80"
            },
            "scope": 24693,
            "src": "18964:125:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the number of markets that have a non-zero balance for an account\n     * @param  account  The account to query\n@return          The number of markets with a non-zero balance for the account.",
            "id": 24429,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24424,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24429,
                  "src": "19383:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24423,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "19383:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19373:45:80"
            },
            "returnParameters": {
              "id": 24428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24427,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24429,
                  "src": "19442:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19442:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19441:9:80"
            },
            "scope": 24693,
            "src": "19327:124:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the marketId for an account's market with a non-zero balance at the given index\n     * @param  account  The account to query\n@return          The market ID in the provided index for the account.",
            "id": 24438,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountMarketWithBalanceAtIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24431,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24438,
                  "src": "19746:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24430,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "19746:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24433,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 24438,
                  "src": "19785:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19785:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19736:68:80"
            },
            "returnParameters": {
              "id": 24437,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24436,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24438,
                  "src": "19828:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24435,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19828:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19827:9:80"
            },
            "scope": 24693,
            "src": "19693:144:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the number of markets with which an account has a negative balance.\n     * @param  account  The account to query\n@return          The number of markets with a negative balance for this account.",
            "id": 24445,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountNumberOfMarketsWithDebt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24440,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24445,
                  "src": "20130:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24439,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "20130:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20120:45:80"
            },
            "returnParameters": {
              "id": 24444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24443,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24445,
                  "src": "20189:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20189:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20188:9:80"
            },
            "scope": 24693,
            "src": "20078:120:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total supplied and total borrowed value of an account.\n     * @param  account  The account to query\n@return          The following values:\n                  - The supplied value of the account\n                  - The borrowed value of the account",
            "id": 24454,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountValues",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24447,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24454,
                  "src": "20545:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24446,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "20545:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20535:45:80"
            },
            "returnParameters": {
              "id": 24453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24450,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24454,
                  "src": "20604:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24449,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "20604:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24452,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24454,
                  "src": "20627:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24451,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "20627:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20603:46:80"
            },
            "scope": 24693,
            "src": "20510:140:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total supplied and total borrowed values of an account adjusted by the marginPremium\nof each market. Supplied values are divided by (1 + marginPremium) for each market and\nborrowed values are multiplied by (1 + marginPremium) for each market. Comparing these\nadjusted values gives the margin-ratio of the account which will be compared to the global\nmargin-ratio when determining if the account can be liquidated.\n     * @param  account  The account to query\n@return          The following values:\n                  - The supplied value of the account (adjusted for marginPremium)\n                  - The borrowed value of the account (adjusted for marginPremium)",
            "id": 24463,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAdjustedAccountValues",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24456,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24463,
                  "src": "21450:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24455,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "21450:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21440:45:80"
            },
            "returnParameters": {
              "id": 24462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24459,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24463,
                  "src": "21509:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24458,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "21509:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24461,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24463,
                  "src": "21532:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24460,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "21532:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21508:46:80"
            },
            "scope": 24693,
            "src": "21407:148:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get an account's summary for each market.\n     * @param  account  The account to query\n@return          The following values:\n                  - The market IDs for each market\n                  - The ERC20 token address for each market\n                  - The account's principal value for each market\n                  - The account's (supplied or borrowed) number of tokens for each market",
            "id": 24480,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24466,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24465,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22056:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24464,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "22056:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22046:45:80"
            },
            "returnParameters": {
              "id": 24479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24469,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22115:13:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24467,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "22115:4:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24468,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22115:6:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24472,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22130:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24470,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "22130:7:80",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 24471,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22130:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24475,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22148:18:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Par_$30890_memory_$dyn_memory_ptr",
                    "typeString": "struct Types.Par[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24473,
                      "name": "Types.Par",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 30890,
                      "src": "22148:9:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Par_$30890_storage_ptr",
                        "typeString": "struct Types.Par"
                      }
                    },
                    "id": 24474,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22148:11:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Par_$30890_storage_$dyn_storage_ptr",
                      "typeString": "struct Types.Par[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24478,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22168:18:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Wei_$31149_memory_$dyn_memory_ptr",
                    "typeString": "struct Types.Wei[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24476,
                      "name": "Types.Wei",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 31149,
                      "src": "22168:9:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                        "typeString": "struct Types.Wei"
                      }
                    },
                    "id": 24477,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22168:11:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Wei_$31149_storage_$dyn_storage_ptr",
                      "typeString": "struct Types.Wei[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22114:73:80"
            },
            "scope": 24693,
            "src": "22019:169:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Return true if a particular address is approved as an operator for an owner's accounts.\nApproved operators can act on the accounts of the owner as if it were the operator's own.\n     * @param  owner     The owner of the accounts\n@param  operator  The possible operator\n@return           True if operator is approved for owner's accounts",
            "id": 24489,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsLocalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24482,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24489,
                  "src": "22685:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22685:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24484,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24489,
                  "src": "22708:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24483,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22708:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22675:55:80"
            },
            "returnParameters": {
              "id": 24488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24487,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24489,
                  "src": "22754:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22754:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22753:6:80"
            },
            "scope": 24693,
            "src": "22648:112:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Return true if a particular address is approved as a global operator. Such an address can\nact on any account as if it were the operator's own.\n     * @param  operator  The address to query\n@return           True if operator is a global operator",
            "id": 24496,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsGlobalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24491,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24496,
                  "src": "23093:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24490,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23093:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23083:32:80"
            },
            "returnParameters": {
              "id": 24495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24494,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24496,
                  "src": "23139:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24493,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23139:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23138:6:80"
            },
            "scope": 24693,
            "src": "23055:90:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Checks if the autoTrader can only be called invoked by a global operator\n     * @param autoTrader    The trader that should be checked for special call privileges.",
            "id": 24503,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsAutoTraderSpecial",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24498,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 24503,
                  "src": "23377:18:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24497,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23377:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23376:20:80"
            },
            "returnParameters": {
              "id": 24502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24501,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24503,
                  "src": "23420:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24500,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23420:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23419:6:80"
            },
            "scope": 24693,
            "src": "23345:81:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "The main entry-point to DolomiteMargin that allows users and contracts to manage accounts.\nTake one or more actions on one or more accounts. The msg.sender must be the owner or\noperator of all accounts except for those being liquidated, vaporized, or traded with.\nOne call to operate() is considered a singular \"operation\". Account collateralization is\nensured only after the completion of the entire operation.\n     * @param  accounts  A list of all accounts that will be used in this operation. Cannot contain\n                  duplicates. In each action, the relevant account will be referred-to by its\n                  index in the list.\n@param  actions   An ordered list of all actions that will be taken in this operation. The\n                  actions will be processed in order.",
            "id": 24512,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "operate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24506,
                  "name": "accounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 24512,
                  "src": "24382:32:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Info_$24851_calldata_$dyn_calldata_ptr",
                    "typeString": "struct Account.Info[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24504,
                      "name": "Account.Info",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 24851,
                      "src": "24382:12:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                        "typeString": "struct Account.Info"
                      }
                    },
                    "id": 24505,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24382:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Info_$24851_storage_$dyn_storage_ptr",
                      "typeString": "struct Account.Info[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24509,
                  "name": "actions",
                  "nodeType": "VariableDeclaration",
                  "scope": 24512,
                  "src": "24424:37:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_ActionArgs_$24930_calldata_$dyn_calldata_ptr",
                    "typeString": "struct Actions.ActionArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24507,
                      "name": "Actions.ActionArgs",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 24930,
                      "src": "24424:18:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ActionArgs_$24930_storage_ptr",
                        "typeString": "struct Actions.ActionArgs"
                      }
                    },
                    "id": 24508,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24424:20:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_ActionArgs_$24930_storage_$dyn_storage_ptr",
                      "typeString": "struct Actions.ActionArgs[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24372:95:80"
            },
            "returnParameters": {
              "id": 24511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24476:0:80"
            },
            "scope": 24693,
            "src": "24356:121:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Approves/disapproves any number of operators. An operator is an external address that has the\nsame permissions to manipulate an account as the owner of the account. Operators are simply\naddresses and therefore may either be externally-owned Ethereum accounts OR smart contracts.\n     * Operators are also able to act as AutoTrader contracts on behalf of the account owner if the\noperator is a smart contract and implements the IAutoTrader interface.\n     * @param  args  A list of OperatorArgs which have an address and a boolean. The boolean value\n              denotes whether to approve (true) or revoke approval (false) for that address.",
            "id": 24518,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setOperators",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24515,
                  "name": "args",
                  "nodeType": "VariableDeclaration",
                  "scope": 24518,
                  "src": "25221:33:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_OperatorArg_$30865_calldata_$dyn_calldata_ptr",
                    "typeString": "struct Types.OperatorArg[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24513,
                      "name": "Types.OperatorArg",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 30865,
                      "src": "25221:17:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OperatorArg_$30865_storage_ptr",
                        "typeString": "struct Types.OperatorArg"
                      }
                    },
                    "id": 24514,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "25221:19:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OperatorArg_$30865_storage_$dyn_storage_ptr",
                      "typeString": "struct Types.OperatorArg[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25211:49:80"
            },
            "returnParameters": {
              "id": 24517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25269:0:80"
            },
            "scope": 24693,
            "src": "25190:80:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Withdraw an ERC20 token for which there is an associated market. Only excess tokens can be withdrawn. The number\nof excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number\nof tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by\nDolomiteMargin.",
            "id": 24527,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawExcessTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24520,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24527,
                  "src": "25908:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25908:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24522,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 24527,
                  "src": "25934:17:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25934:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25898:59:80"
            },
            "returnParameters": {
              "id": 24526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24525,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24527,
                  "src": "25984:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24524,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25984:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25983:9:80"
            },
            "scope": 24693,
            "src": "25864:129:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Withdraw an ERC20 token for which there is no associated market.",
            "id": 24536,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawUnsupportedTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24529,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 24536,
                  "src": "26136:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24528,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26136:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24531,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 24536,
                  "src": "26159:17:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26159:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26126:56:80"
            },
            "returnParameters": {
              "id": 24535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24534,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24536,
                  "src": "26209:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26209:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26208:9:80"
            },
            "scope": 24693,
            "src": "26087:131:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Add a new market to DolomiteMargin. Must be for a previously-unsupported ERC20 token.",
            "id": 24557,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerAddMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24538,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26417:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24537,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26417:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24540,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26440:24:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24539,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "26440:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24542,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26474:30:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24541,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "26474:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24544,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26514:35:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24543,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "26514:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24546,
                  "name": "spreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26559:35:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24545,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "26559:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24548,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26604:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26604:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24550,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26634:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24549,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26634:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24552,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26664:42:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24551,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "26664:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24554,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26716:14:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24553,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26716:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26407:329:80"
            },
            "returnParameters": {
              "id": 24556,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26749:0:80"
            },
            "scope": 24693,
            "src": "26384:366:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set (or unset) the status of a market to \"closing\". The borrowedValue of a market cannot increase while its\nstatus is \"closing\".",
            "id": 24564,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetIsClosing",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24559,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24564,
                  "src": "26951:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26951:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24561,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 24564,
                  "src": "26977:14:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24560,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26977:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26941:56:80"
            },
            "returnParameters": {
              "id": 24563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27010:0:80"
            },
            "scope": 24693,
            "src": "26915:96:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the price oracle for a market.",
            "id": 24571,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24566,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24571,
                  "src": "27113:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24565,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27113:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24568,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 24571,
                  "src": "27139:24:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24567,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "27139:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27103:66:80"
            },
            "returnParameters": {
              "id": 24570,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27182:0:80"
            },
            "scope": 24693,
            "src": "27075:108:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the interest-setter for a market.",
            "id": 24578,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24576,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24573,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24578,
                  "src": "27291:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24572,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27291:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24575,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24578,
                  "src": "27317:30:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24574,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "27317:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27281:72:80"
            },
            "returnParameters": {
              "id": 24577,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27366:0:80"
            },
            "scope": 24693,
            "src": "27250:117:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set a premium on the minimum margin-ratio for a market. This makes it so that any positions that include this\nmarket require a higher collateralization to avoid being liquidated.",
            "id": 24585,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24583,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24580,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24585,
                  "src": "27622:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24579,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27622:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24582,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24585,
                  "src": "27648:35:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24581,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "27648:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27612:77:80"
            },
            "returnParameters": {
              "id": 24584,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27702:0:80"
            },
            "scope": 24693,
            "src": "27582:121:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set a premium on the liquidation spread for a market. This makes it so that any liquidations that include this\nmarket have a higher spread than the global default.",
            "id": 24592,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24587,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24592,
                  "src": "27954:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24586,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27954:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24589,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24592,
                  "src": "27980:46:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24588,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "27980:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27944:88:80"
            },
            "returnParameters": {
              "id": 24591,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28045:0:80"
            },
            "scope": 24693,
            "src": "27903:143:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the maximum supply wei for a given `marketId`.",
            "id": 24599,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24594,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24599,
                  "src": "28166:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28166:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24596,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24599,
                  "src": "28192:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24595,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28192:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28156:62:80"
            },
            "returnParameters": {
              "id": 24598,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28231:0:80"
            },
            "scope": 24693,
            "src": "28127:105:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the maximum borrow wei for a given `marketId`.",
            "id": 24606,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24601,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24606,
                  "src": "28352:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24600,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28352:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24603,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24606,
                  "src": "28378:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24602,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28378:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28342:62:80"
            },
            "returnParameters": {
              "id": 24605,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28417:0:80"
            },
            "scope": 24693,
            "src": "28313:105:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the earnings rate override for a given `marketId`. Set it to 0 unset the override.",
            "id": 24613,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24608,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24613,
                  "src": "28582:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24607,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28582:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24610,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24613,
                  "src": "28608:42:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24609,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "28608:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28572:84:80"
            },
            "returnParameters": {
              "id": 24612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28669:0:80"
            },
            "scope": 24693,
            "src": "28535:135:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global minimum margin-ratio that every position must maintain to prevent being liquidated.",
            "id": 24618,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24615,
                  "name": "ratio",
                  "nodeType": "VariableDeclaration",
                  "scope": 24618,
                  "src": "28885:27:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24614,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "28885:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28875:43:80"
            },
            "returnParameters": {
              "id": 24617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28931:0:80"
            },
            "scope": 24693,
            "src": "28847:85:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of\nrisky positions.",
            "id": 24623,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpread",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24621,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24620,
                  "name": "spread",
                  "nodeType": "VariableDeclaration",
                  "scope": 24623,
                  "src": "29142:28:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24619,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "29142:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29132:44:80"
            },
            "returnParameters": {
              "id": 24622,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29189:0:80"
            },
            "scope": 24693,
            "src": "29098:92:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets\npassed-on to suppliers.",
            "id": 24628,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24625,
                  "name": "earningsRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 24628,
                  "src": "29398:34:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24624,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "29398:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29388:50:80"
            },
            "returnParameters": {
              "id": 24627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29451:0:80"
            },
            "scope": 24693,
            "src": "29359:93:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.",
            "id": 24633,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMinBorrowedValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24630,
                  "name": "minBorrowedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 24633,
                  "src": "29624:40:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_calldata_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24629,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "29624:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29614:56:80"
            },
            "returnParameters": {
              "id": 24632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29683:0:80"
            },
            "scope": 24693,
            "src": "29581:103:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the number of non-zero balances an account may have within the same `accountIndex`. This ensures a user\ncannot DOS the system by filling their account with non-zero balances (which linearly increases gas costs when\nchecking collateralization) and disallowing themselves to close the position, because the number of gas units\nneeded to process their transaction exceed the block's gas limit. In turn, this would  prevent the user from also\nbeing liquidated, causing the all of the capital to be \"stuck\" in the position.\n     * Lowering this number does not \"freeze\" user accounts that have more than the new limit of balances, because this\nvariable is enforced by checking the users number of non-zero balances against the max or if it sizes down before\neach transaction finishes.",
            "id": 24638,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24636,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24635,
                  "name": "accountMaxNumberOfMarketsWithBalances",
                  "nodeType": "VariableDeclaration",
                  "scope": 24638,
                  "src": "30611:45:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24634,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30611:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30601:61:80"
            },
            "returnParameters": {
              "id": 24637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30675:0:80"
            },
            "scope": 24693,
            "src": "30547:129:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the current oracle sentinel used to report if borrowing and liquidations are enabled.",
            "id": 24643,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetOracleSentinel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24640,
                  "name": "oracleSentinel",
                  "nodeType": "VariableDeclaration",
                  "scope": 24643,
                  "src": "30837:30:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24639,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "30837:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30827:46:80"
            },
            "returnParameters": {
              "id": 24642,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30886:0:80"
            },
            "scope": 24693,
            "src": "30796:91:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the gas limit that's passed to any of the callback functions",
            "id": 24648,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetCallbackGasLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24645,
                  "name": "callbackGasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 24648,
                  "src": "31025:24:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24644,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31025:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31015:40:80"
            },
            "returnParameters": {
              "id": 24647,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31068:0:80"
            },
            "scope": 24693,
            "src": "30982:87:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the account risk override setter by default for any account",
            "id": 24653,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetDefaultAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24651,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24650,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24653,
                  "src": "31216:52:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24649,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "31216:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31206:68:80"
            },
            "returnParameters": {
              "id": 24652,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31287:0:80"
            },
            "scope": 24693,
            "src": "31163:125:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the account risk override setter for a given wallet",
            "id": 24660,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24655,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24660,
                  "src": "31420:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24654,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31420:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24657,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24660,
                  "src": "31450:52:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24656,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "31450:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31410:98:80"
            },
            "returnParameters": {
              "id": 24659,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31521:0:80"
            },
            "scope": 24693,
            "src": "31374:148:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Approve (or disapprove) an address that is permissioned to be an operator for all accounts in DolomiteMargin.\nIntended only to approve smart-contracts.",
            "id": 24667,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetGlobalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24662,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24667,
                  "src": "31811:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24661,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31811:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24664,
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 24667,
                  "src": "31837:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24663,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "31837:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31801:55:80"
            },
            "returnParameters": {
              "id": 24666,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31869:0:80"
            },
            "scope": 24693,
            "src": "31770:100:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Approve (or disapprove) an auto trader that can only be called by a global operator. IE for expirations",
            "id": 24674,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAutoTraderSpecial",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24669,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 24674,
                  "src": "32047:18:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24668,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32047:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24671,
                  "name": "special",
                  "nodeType": "VariableDeclaration",
                  "scope": 24674,
                  "src": "32075:12:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24670,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "32075:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32037:56:80"
            },
            "returnParameters": {
              "id": 24673,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32106:0:80"
            },
            "scope": 24693,
            "src": "32003:104:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Returns the address of the current owner.",
            "id": 24679,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24675,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32247:2:80"
            },
            "returnParameters": {
              "id": 24678,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24677,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24679,
                  "src": "32273:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24676,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32273:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32272:9:80"
            },
            "scope": 24693,
            "src": "32233:49:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Returns true if the caller is the current owner.",
            "id": 24684,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24680,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32381:2:80"
            },
            "returnParameters": {
              "id": 24683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24682,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24684,
                  "src": "32407:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24681,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "32407:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32406:6:80"
            },
            "scope": 24693,
            "src": "32365:48:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Leaves the contract without owner. It will not be possible to call\n`onlyOwner` functions anymore. Can only be called by the current owner.\n     * NOTE: Renouncing ownership will leave the contract without an owner,\nthereby removing any functionality that is only available to the owner.",
            "id": 24687,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "renounceOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32781:2:80"
            },
            "returnParameters": {
              "id": 24686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32792:0:80"
            },
            "scope": 24693,
            "src": "32755:38:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Transfers ownership of the contract to a new account (`newOwner`).\nCan only be called by the current owner.",
            "id": 24692,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24689,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24692,
                  "src": "32969:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32969:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32968:18:80"
            },
            "returnParameters": {
              "id": 24691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32995:0:80"
            },
            "scope": 24693,
            "src": "32942:54:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 24694,
        "src": "1271:31727:80"
      }
    ],
    "src": "595:32404:80"
  },
  "legacyAST": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
    "exportedSymbols": {
      "IDolomiteMargin": [
        24693
      ]
    },
    "id": 24694,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24075,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "595:24:80"
      },
      {
        "id": 24076,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "620:33:80"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol",
        "file": "../interfaces/IAccountRiskOverrideSetter.sol",
        "id": 24078,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24030,
        "src": "655:90:80",
        "symbolAliases": [
          {
            "foreign": 24077,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol",
        "file": "../interfaces/IInterestSetter.sol",
        "id": 24080,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24790,
        "src": "746:68:80",
        "symbolAliases": [
          {
            "foreign": 24079,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol",
        "file": "../interfaces/IOracleSentinel.sol",
        "id": 24082,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24818,
        "src": "815:68:80",
        "symbolAliases": [
          {
            "foreign": 24081,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol",
        "file": "../interfaces/IPriceOracle.sol",
        "id": 24084,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24836,
        "src": "884:62:80",
        "symbolAliases": [
          {
            "foreign": 24083,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
        "file": "../lib/Account.sol",
        "id": 24086,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 24886,
        "src": "948:45:80",
        "symbolAliases": [
          {
            "foreign": 24085,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol",
        "file": "../lib/Actions.sol",
        "id": 24088,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 25370,
        "src": "994:45:80",
        "symbolAliases": [
          {
            "foreign": 24087,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol",
        "file": "../lib/Decimal.sol",
        "id": 24090,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 26024,
        "src": "1040:45:80",
        "symbolAliases": [
          {
            "foreign": 24089,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol",
        "file": "../lib/Interest.sol",
        "id": 24092,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 27751,
        "src": "1086:47:80",
        "symbolAliases": [
          {
            "foreign": 24091,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol",
        "file": "../lib/Monetary.sol",
        "id": 24094,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 27761,
        "src": "1134:47:80",
        "symbolAliases": [
          {
            "foreign": 24093,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol",
        "file": "../lib/Storage.sol",
        "id": 24096,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 30712,
        "src": "1182:45:80",
        "symbolAliases": [
          {
            "foreign": 24095,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
        "file": "../lib/Types.sol",
        "id": 24098,
        "nodeType": "ImportDirective",
        "scope": 24694,
        "sourceUnit": 31362,
        "src": "1228:41:80",
        "symbolAliases": [
          {
            "foreign": 24097,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 24693,
        "linearizedBaseContracts": [
          24693
        ],
        "name": "IDolomiteMargin",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": "Get the global minimum margin-ratio that every position must maintain to prevent being\nliquidated.\n     * @return  The global margin-ratio",
            "id": 24103,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarginRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24099,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1561:2:80"
            },
            "returnParameters": {
              "id": 24102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24101,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24103,
                  "src": "1587:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24100,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "1587:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1586:21:80"
            },
            "scope": 24693,
            "src": "1538:70:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global minimum margin-ratio that every position must maintain to prevent being\nliquidated.\n     * @param account       The account whose margin ratio is being queried. This is used to determine if there is an\n                     override that supersedes the global minimum.\n@return  The margin ratio for this account",
            "id": 24110,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarginRatioForAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24105,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24110,
                  "src": "2025:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24104,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "2025:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2024:31:80"
            },
            "returnParameters": {
              "id": 24109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24108,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24110,
                  "src": "2079:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24107,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2079:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2078:21:80"
            },
            "scope": 24693,
            "src": "1991:109:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global liquidation spread. This is the spread between oracle prices that incentivizes\nthe liquidation of risky positions.\n     * @return  The global liquidation spread",
            "id": 24115,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpread",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2348:2:80"
            },
            "returnParameters": {
              "id": 24114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24113,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24115,
                  "src": "2374:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24112,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "2374:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2373:21:80"
            },
            "scope": 24693,
            "src": "2319:76:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread\nmultiplied by (1 + spreadPremium) for each of the two markets.\n     * Assumes the pair is not in e-mode. Backwards compatible with V1.\n     * @param  heldMarketId     The market for which the account has collateral\n@param  owedMarketId     The market for which the account has borrowed tokens\n@return                  The adjusted liquidation spread",
            "id": 24124,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpreadForPair",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24117,
                  "name": "heldMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24124,
                  "src": "2960:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24116,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2960:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24119,
                  "name": "owedMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24124,
                  "src": "2990:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24118,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2950:66:80"
            },
            "returnParameters": {
              "id": 24123,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24122,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24124,
                  "src": "3040:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24121,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3040:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3039:21:80"
            },
            "scope": 24693,
            "src": "2914:147:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread\nmultiplied by (1 + spreadPremium) for each of the two markets.\n     * If the pair is in e-mode and has a liquidation spread override, then the override is used instead.\n     * @param  account      The account whose liquidation spread is being queried. This is used to determine if there is\n                     an override in place.\n@param  heldMarketId The market for which the account has collateral\n@param  owedMarketId The market for which the account has borrowed tokens\n@return              The adjusted liquidation spread",
            "id": 24135,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpreadForAccountAndPair",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24126,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3829:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24125,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "3829:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24128,
                  "name": "heldMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3868:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3868:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24130,
                  "name": "owedMarketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3898:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3898:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3819:105:80"
            },
            "returnParameters": {
              "id": 24134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24133,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24135,
                  "src": "3948:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24132,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "3948:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3947:21:80"
            },
            "scope": 24693,
            "src": "3773:196:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global earnings-rate variable that determines what percentage of the interest paid\nby borrowers gets passed-on to suppliers.\n     * @return  The global earnings rate",
            "id": 24140,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getEarningsRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4210:2:80"
            },
            "returnParameters": {
              "id": 24139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24138,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24140,
                  "src": "4236:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24137,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "4236:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4235:21:80"
            },
            "scope": 24693,
            "src": "4186:71:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.\n     * @return  The global minimum borrow value",
            "id": 24145,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMinBorrowedValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4469:2:80"
            },
            "returnParameters": {
              "id": 24144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24145,
                  "src": "4495:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24142,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "4495:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4494:23:80"
            },
            "scope": 24693,
            "src": "4441:77:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the maximum number of assets an account owner can hold in an account number.\n     * @return  The maximum number of assets an account owner can hold in an account number.",
            "id": 24150,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4777:2:80"
            },
            "returnParameters": {
              "id": 24149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24148,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24150,
                  "src": "4803:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24147,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4803:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4802:9:80"
            },
            "scope": 24693,
            "src": "4728:84:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Gets the oracle sentinel, which is responsible for checking if the Blockchain or L2 is alive, if liquidations\nshould be processed, and if markets should are in size-down only mode.\n     * @return The oracle sentinel for DolomiteMargin",
            "id": 24155,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getOracleSentinel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5116:2:80"
            },
            "returnParameters": {
              "id": 24154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24153,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24155,
                  "src": "5142:15:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24152,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "5142:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5141:17:80"
            },
            "scope": 24693,
            "src": "5090:69:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return True if borrowing is globally allowed according to the Oracle Sentinel or false if it is not",
            "id": 24160,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsBorrowAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5316:2:80"
            },
            "returnParameters": {
              "id": 24159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24158,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24160,
                  "src": "5342:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24157,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5342:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5341:6:80"
            },
            "scope": 24693,
            "src": "5289:59:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return True if liquidations are globally allowed according to the Oracle Sentinel or false if they are not",
            "id": 24165,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsLiquidationAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5517:2:80"
            },
            "returnParameters": {
              "id": 24164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24163,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24165,
                  "src": "5543:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24162,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5543:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5542:6:80"
            },
            "scope": 24693,
            "src": "5485:64:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@return  The gas limit used for making callbacks via `IExternalCallback::onInternalBalanceChange` to smart\n         contract wallets.",
            "id": 24170,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getCallbackGasLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5747:2:80"
            },
            "returnParameters": {
              "id": 24169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24168,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24170,
                  "src": "5773:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24167,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5773:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5772:9:80"
            },
            "scope": 24693,
            "src": "5719:63:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the account risk override getter for global use. This contract enables e-mode based on the assets held in a\nposition.\n     * @return  The contract that contains risk override information for any account that does NOT have an account-\n         specific override.",
            "id": 24175,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getDefaultAccountRiskOverrideSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24171,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6142:2:80"
            },
            "returnParameters": {
              "id": 24174,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24173,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24175,
                  "src": "6168:26:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24172,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "6168:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6167:28:80"
            },
            "scope": 24693,
            "src": "6098:98:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the account risk override getter for an account owner. This contract enables e-mode for certain isolation\nmode vaults.\n     * @param accountOwner  The address of the account to check if there is a margin ratio override.\n@return  The contract that contains risk override information for this account.",
            "id": 24182,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountRiskOverrideSetterByAccountOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24178,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24177,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24182,
                  "src": "6611:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24176,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6611:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6601:36:80"
            },
            "returnParameters": {
              "id": 24181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24180,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24182,
                  "src": "6661:26:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24179,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "6661:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6660:28:80"
            },
            "scope": 24693,
            "src": "6550:139:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the margin ratio override for an account owner. Used to enable e-mode for certain isolation mode vaults.\n     * @param account                       The account to check if there is a risk override.\n@return marginRatioOverride          The margin ratio override for an account owner. Defaults to 0 if there's no\n                                     override in place.\n@return liquidationSpreadOverride    The margin ratio override for an account owner. Defaults to 0 if there's no\n                                     override in place.",
            "id": 24191,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountRiskOverrideByAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24184,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24191,
                  "src": "7344:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24183,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "7344:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7334:45:80"
            },
            "returnParameters": {
              "id": 24190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24187,
                  "name": "marginRatioOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24191,
                  "src": "7415:39:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24186,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7415:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24189,
                  "name": "liquidationSpreadOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24191,
                  "src": "7456:45:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24188,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7456:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7414:88:80"
            },
            "scope": 24693,
            "src": "7294:209:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the margin ratio override for an account. Used to enable e-mode for certain accounts/positions.\n     * @param account   The account to check if there is a margin ratio override.\n@return  The margin ratio override for an account owner. Defaults to 0 if there's no override in place.",
            "id": 24198,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarginRatioOverrideByAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24193,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24198,
                  "src": "7873:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24192,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "7873:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7872:31:80"
            },
            "returnParameters": {
              "id": 24197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24196,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24198,
                  "src": "7927:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24195,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "7927:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7926:21:80"
            },
            "scope": 24693,
            "src": "7832:116:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the liquidation reward override for an account owner. Used to enable e-mode for certain isolation mode\nvaults.\n     * @param account   The account to check if there is a liquidation spread override.\n@return  The liquidation spread override for an account owner. Defaults to 0 if there's no override in place.",
            "id": 24205,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidationSpreadOverrideByAccount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24200,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24205,
                  "src": "8367:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24199,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "8367:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8357:45:80"
            },
            "returnParameters": {
              "id": 24204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24203,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24205,
                  "src": "8426:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24202,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "8426:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8425:21:80"
            },
            "scope": 24693,
            "src": "8311:136:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get all risk parameter limits in a single struct. These are the maximum limits at which the\nrisk parameters can be set by the admin of DolomiteMargin.\n     * @return  All global risk parameter limits",
            "id": 24210,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getRiskLimits",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24206,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8712:2:80"
            },
            "returnParameters": {
              "id": 24209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24208,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24210,
                  "src": "8738:25:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RiskLimits_$28725_memory_ptr",
                    "typeString": "struct Storage.RiskLimits"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24207,
                    "name": "Storage.RiskLimits",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28725,
                    "src": "8738:18:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RiskLimits_$28725_storage_ptr",
                      "typeString": "struct Storage.RiskLimits"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8737:27:80"
            },
            "scope": 24693,
            "src": "8690:75:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total number of markets.\n     * @return  The number of markets",
            "id": 24215,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getNumMarkets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24211,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8948:2:80"
            },
            "returnParameters": {
              "id": 24214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24213,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24215,
                  "src": "8974:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8974:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8973:9:80"
            },
            "scope": 24693,
            "src": "8926:57:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the ERC20 token address for a market.\n     * @param  token    The token to query\n@return          The token's marketId if the token is valid",
            "id": 24222,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketIdByTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24217,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 24222,
                  "src": "9215:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24216,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9215:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9205:29:80"
            },
            "returnParameters": {
              "id": 24221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24220,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24222,
                  "src": "9258:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9258:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9257:9:80"
            },
            "scope": 24693,
            "src": "9171:96:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the ERC20 token address for a market.\n     * @param  marketId  The market to query\n@return           The token address",
            "id": 24229,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketTokenAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24224,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24229,
                  "src": "9473:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9473:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9463:32:80"
            },
            "returnParameters": {
              "id": 24228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24227,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24229,
                  "src": "9519:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9519:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9518:9:80"
            },
            "scope": 24693,
            "src": "9433:95:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Return true if a particular market is in closing mode. Additional borrows cannot be taken\nfrom a market that is closing.\n     * @param  marketId  The market to query\n@return           True if the market is closing",
            "id": 24236,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketIsClosing",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24232,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24231,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24236,
                  "src": "9829:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24230,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9829:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9819:32:80"
            },
            "returnParameters": {
              "id": 24235,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24234,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24236,
                  "src": "9887:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24233,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9887:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9886:6:80"
            },
            "scope": 24693,
            "src": "9792:101:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the price of the token for a market.\n     * @param  marketId  The market to query\n@return           The price of each atomic unit of the token",
            "id": 24243,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24238,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24243,
                  "src": "10116:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24237,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10116:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10106:32:80"
            },
            "returnParameters": {
              "id": 24242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24241,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24243,
                  "src": "10162:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Price_$27756_memory_ptr",
                    "typeString": "struct Monetary.Price"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24240,
                    "name": "Monetary.Price",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27756,
                    "src": "10162:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$27756_storage_ptr",
                      "typeString": "struct Monetary.Price"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10161:23:80"
            },
            "scope": 24693,
            "src": "10083:102:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total principal amounts (borrowed and supplied) for a market.\n     * @param  marketId  The market to query\n@return           The total principal amounts",
            "id": 24250,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketTotalPar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24245,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24250,
                  "src": "10425:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10425:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10415:32:80"
            },
            "returnParameters": {
              "id": 24249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24248,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24250,
                  "src": "10471:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TotalPar_$30885_memory_ptr",
                    "typeString": "struct Types.TotalPar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24247,
                    "name": "Types.TotalPar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 30885,
                    "src": "10471:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TotalPar_$30885_storage_ptr",
                      "typeString": "struct Types.TotalPar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10470:23:80"
            },
            "scope": 24693,
            "src": "10389:105:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total principal amounts (borrowed and supplied) for a market.\n     * @param  marketId  The market to query\n@return           The total principal amounts",
            "id": 24257,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketTotalWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24252,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24257,
                  "src": "10734:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10734:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10724:32:80"
            },
            "returnParameters": {
              "id": 24256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24255,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24257,
                  "src": "10780:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TotalWei_$31144_memory_ptr",
                    "typeString": "struct Types.TotalWei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24254,
                    "name": "Types.TotalWei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31144,
                    "src": "10780:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TotalWei_$31144_storage_ptr",
                      "typeString": "struct Types.TotalWei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10779:23:80"
            },
            "scope": 24693,
            "src": "10698:105:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the most recently cached interest index for a market.\n     * @param  marketId  The market to query\n@return           The most recent index",
            "id": 24264,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketCachedIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24259,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24264,
                  "src": "11028:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11028:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11018:32:80"
            },
            "returnParameters": {
              "id": 24263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24262,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24264,
                  "src": "11074:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                    "typeString": "struct Interest.Index"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24261,
                    "name": "Interest.Index",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27471,
                    "src": "11074:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage_ptr",
                      "typeString": "struct Interest.Index"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11073:23:80"
            },
            "scope": 24693,
            "src": "10989:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the interest index for a market if it were to be updated right now.\n     * @param  marketId  The market to query\n@return           The estimated current index",
            "id": 24271,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketCurrentIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24266,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24271,
                  "src": "11343:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11343:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11333:32:80"
            },
            "returnParameters": {
              "id": 24270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24269,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24271,
                  "src": "11389:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                    "typeString": "struct Interest.Index"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24268,
                    "name": "Interest.Index",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27471,
                    "src": "11389:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage_ptr",
                      "typeString": "struct Interest.Index"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11388:23:80"
            },
            "scope": 24693,
            "src": "11303:109:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the price oracle address for a market.\n     * @param  marketId  The market to query\n@return           The price oracle address",
            "id": 24278,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24273,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24278,
                  "src": "11625:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24272,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11625:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11615:32:80"
            },
            "returnParameters": {
              "id": 24277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24276,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24278,
                  "src": "11671:12:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24275,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "11671:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11670:14:80"
            },
            "scope": 24693,
            "src": "11586:99:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the interest-setter address for a market.\n     * @param  marketId  The market to query\n@return           The interest-setter address",
            "id": 24285,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24280,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24285,
                  "src": "11907:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11907:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11897:32:80"
            },
            "returnParameters": {
              "id": 24284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24283,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24285,
                  "src": "11953:15:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24282,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "11953:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11952:17:80"
            },
            "scope": 24693,
            "src": "11865:105:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the margin premium for a market. A margin premium makes it so that any positions that\ninclude the market require a higher collateralization to avoid being liquidated.\n     * @param  marketId  The market to query\n@return           The market's margin premium",
            "id": 24292,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24287,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24292,
                  "src": "12323:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12323:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12313:32:80"
            },
            "returnParameters": {
              "id": 24291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24290,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24292,
                  "src": "12369:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24289,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "12369:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12368:21:80"
            },
            "scope": 24693,
            "src": "12282:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the spread premium for a market. A spread premium makes it so that any liquidations\nthat include the market have a higher spread than the global default.\n     * @param  marketId  The market to query\n@return           The market's spread premium",
            "id": 24299,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24294,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24299,
                  "src": "12741:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12741:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12731:32:80"
            },
            "returnParameters": {
              "id": 24298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24297,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24299,
                  "src": "12787:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24296,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "12787:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12786:21:80"
            },
            "scope": 24693,
            "src": "12689:119:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Same as getMarketLiquidationSpreadPremium. Added for backwards-compatibility.\n     * @param  marketId  The market to query\n@return           The market's spread premium",
            "id": 24306,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24302,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24301,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24306,
                  "src": "13061:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24300,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13061:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13051:32:80"
            },
            "returnParameters": {
              "id": 24305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24304,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24306,
                  "src": "13107:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24303,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "13107:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13106:21:80"
            },
            "scope": 24693,
            "src": "13020:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Same as getMarketMaxSupplyWei. Added for backwards-compatibility.\n     * @param  marketId  The market to query\n@return           The max amount of the market that can be supplied. Always 0 or positive.",
            "id": 24313,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMaxWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24308,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24313,
                  "src": "13407:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13407:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13397:32:80"
            },
            "returnParameters": {
              "id": 24312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24311,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24313,
                  "src": "13465:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24310,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "13465:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13464:18:80"
            },
            "scope": 24693,
            "src": "13373:110:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the max supply amount for a a market.\n     * @param  marketId  The market to query\n@return           The market's max supply amount. Always 0 or positive.",
            "id": 24320,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24315,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24320,
                  "src": "13725:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13725:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13715:32:80"
            },
            "returnParameters": {
              "id": 24319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24318,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24320,
                  "src": "13783:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24317,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "13783:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13782:18:80"
            },
            "scope": 24693,
            "src": "13685:116:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the max borrow amount for a a market.\n     * @param  marketId  The market to query\n@return           The market's max borrow amount. Always negative or 0.",
            "id": 24327,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24322,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24327,
                  "src": "14043:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24321,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14043:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14033:32:80"
            },
            "returnParameters": {
              "id": 24326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24325,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24327,
                  "src": "14101:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24324,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "14101:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14100:18:80"
            },
            "scope": 24693,
            "src": "14003:116:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the market-specific earnings that determines what percentage of the interest paid by borrowers gets passed-on\nto suppliers. If the value is set to 0, the override is not set.\n     * @return  The market-specific earnings rate",
            "id": 24334,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24329,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24334,
                  "src": "14439:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14439:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14429:32:80"
            },
            "returnParameters": {
              "id": 24333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24332,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24334,
                  "src": "14497:19:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_memory_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24331,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "14497:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14496:21:80"
            },
            "scope": 24693,
            "src": "14391:127:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the current borrow interest rate for a market. The value is denominated as interest paid per second, and the\nnumber is scaled to have 18 decimals. To get APR, multiply the number returned by 31536000 (seconds in a year).\n     * @param  marketId  The market to query\n@return           The current borrow interest rate",
            "id": 24341,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketBorrowInterestRatePerSecond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24337,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24336,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24341,
                  "src": "14944:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24335,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14944:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14934:32:80"
            },
            "returnParameters": {
              "id": 24340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24339,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24341,
                  "src": "14990:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24338,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "14990:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14989:22:80"
            },
            "scope": 24693,
            "src": "14889:123:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Same as getMarketBorrowInterestRatePerSecond. Added for backwards-compatibility.\n     * @param  marketId  The market to query\n@return           The current borrow interest rate",
            "id": 24348,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketInterestRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24343,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24348,
                  "src": "15272:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15272:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15262:32:80"
            },
            "returnParameters": {
              "id": 24347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24346,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24348,
                  "src": "15318:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24345,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "15318:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15317:22:80"
            },
            "scope": 24693,
            "src": "15232:108:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the current borrow interest rate for a market. The value is denominated as interest paid per year, and the\nnumber is scaled to have 18 decimals.\n     * @param  marketId  The market to query\n@return           The current supply interest rate",
            "id": 24355,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketBorrowInterestRateApr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24350,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24355,
                  "src": "15684:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24349,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15684:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15674:32:80"
            },
            "returnParameters": {
              "id": 24354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24353,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24355,
                  "src": "15730:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24352,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "15730:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15729:22:80"
            },
            "scope": 24693,
            "src": "15635:117:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the current supply interest rate for a market.\n     * @param  marketId  The market to query\n@return           The current supply interest rate",
            "id": 24362,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketSupplyInterestRateApr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24357,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24362,
                  "src": "15991:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15991:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15981:32:80"
            },
            "returnParameters": {
              "id": 24361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24360,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24362,
                  "src": "16037:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24359,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "16037:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16036:22:80"
            },
            "scope": 24693,
            "src": "15942:117:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get basic information about a particular market.\n     * @param  marketId  The market to query\n@return           A Storage.Market struct with the current state of the market",
            "id": 24369,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24364,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24369,
                  "src": "16303:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24363,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16303:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16293:32:80"
            },
            "returnParameters": {
              "id": 24368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24367,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24369,
                  "src": "16349:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Market_$28689_memory_ptr",
                    "typeString": "struct Storage.Market"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24366,
                    "name": "Storage.Market",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28689,
                    "src": "16349:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Market_$28689_storage_ptr",
                      "typeString": "struct Storage.Market"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16348:23:80"
            },
            "scope": 24693,
            "src": "16275:97:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get comprehensive information about a particular market.\n     * @param  marketId  The market to query\n@return           A tuple containing the values:\n                   - A Storage.Market struct with the current state of the market\n                   - The current estimated interest index\n                   - The current token price\n                   - The current market borrow interest rate per second",
            "id": 24382,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketWithInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24371,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "16887:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16887:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16877:32:80"
            },
            "returnParameters": {
              "id": 24381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24374,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "16954:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Market_$28689_memory_ptr",
                    "typeString": "struct Storage.Market"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24373,
                    "name": "Storage.Market",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 28689,
                    "src": "16954:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Market_$28689_storage_ptr",
                      "typeString": "struct Storage.Market"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24376,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "16985:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Index_$27471_memory_ptr",
                    "typeString": "struct Interest.Index"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24375,
                    "name": "Interest.Index",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27471,
                    "src": "16985:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Index_$27471_storage_ptr",
                      "typeString": "struct Interest.Index"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24378,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "17016:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Price_$27756_memory_ptr",
                    "typeString": "struct Monetary.Price"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24377,
                    "name": "Monetary.Price",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27756,
                    "src": "17016:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Price_$27756_storage_ptr",
                      "typeString": "struct Monetary.Price"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24380,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24382,
                  "src": "17047:20:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Rate_$27464_memory_ptr",
                    "typeString": "struct Interest.Rate"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24379,
                    "name": "Interest.Rate",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27464,
                    "src": "17047:13:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Rate_$27464_storage_ptr",
                      "typeString": "struct Interest.Rate"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16944:129:80"
            },
            "scope": 24693,
            "src": "16851:223:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the number of tokens that are owed to the `owner` of DolomiteMargin. The number of excess tokens is\ncalculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to\nDolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin.\n     * @param  marketId  The market to query\n@return           The number of excess tokens",
            "id": 24389,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getNumExcessTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24384,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24389,
                  "src": "17576:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17576:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17566:32:80"
            },
            "returnParameters": {
              "id": 24388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24387,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24389,
                  "src": "17622:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24386,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "17622:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17621:18:80"
            },
            "scope": 24693,
            "src": "17539:101:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the principal value for a particular account and market.\n     * @param  account   The account to query\n@param  marketId  The market to query\n@return           The principal value",
            "id": 24398,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountPar",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24391,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24398,
                  "src": "17960:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24390,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "17960:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24393,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24398,
                  "src": "17999:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17999:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17950:71:80"
            },
            "returnParameters": {
              "id": 24397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24396,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24398,
                  "src": "18045:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Par_$30890_memory_ptr",
                    "typeString": "struct Types.Par"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24395,
                    "name": "Types.Par",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 30890,
                    "src": "18045:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Par_$30890_storage_ptr",
                      "typeString": "struct Types.Par"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18044:18:80"
            },
            "scope": 24693,
            "src": "17928:135:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the token balance for a particular account and market.\n     * @param  account   The account to query\n@param  marketId  The market to query\n@return           The token amount",
            "id": 24407,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24403,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24400,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24407,
                  "src": "18323:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24399,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "18323:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24402,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24407,
                  "src": "18362:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24401,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18362:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18313:71:80"
            },
            "returnParameters": {
              "id": 24406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24405,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24407,
                  "src": "18408:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Wei_$31149_memory_ptr",
                    "typeString": "struct Types.Wei"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24404,
                    "name": "Types.Wei",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 31149,
                    "src": "18408:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                      "typeString": "struct Types.Wei"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18407:18:80"
            },
            "scope": 24693,
            "src": "18291:135:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the status of an account (Normal, Liquidating, or Vaporizing).\n     * @param  account  The account to query\n@return          The account's status",
            "id": 24414,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24409,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24414,
                  "src": "18654:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24408,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "18654:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18644:45:80"
            },
            "returnParameters": {
              "id": 24413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24412,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24414,
                  "src": "18713:14:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Status_$24846",
                    "typeString": "enum Account.Status"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24411,
                    "name": "Account.Status",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24846,
                    "src": "18713:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Status_$24846",
                      "typeString": "enum Account.Status"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18712:16:80"
            },
            "scope": 24693,
            "src": "18619:110:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get a list of markets that have a non-zero balance for an account\n     * @param  account  The account to query\n@return          The non-sorted marketIds with non-zero balance for the account.",
            "id": 24422,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24416,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24422,
                  "src": "19012:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24415,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "19012:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19002:45:80"
            },
            "returnParameters": {
              "id": 24421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24420,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24422,
                  "src": "19071:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24418,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "19071:7:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24419,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19071:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19070:18:80"
            },
            "scope": 24693,
            "src": "18964:125:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the number of markets that have a non-zero balance for an account\n     * @param  account  The account to query\n@return          The number of markets with a non-zero balance for the account.",
            "id": 24429,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24424,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24429,
                  "src": "19383:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24423,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "19383:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19373:45:80"
            },
            "returnParameters": {
              "id": 24428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24427,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24429,
                  "src": "19442:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19442:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19441:9:80"
            },
            "scope": 24693,
            "src": "19327:124:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the marketId for an account's market with a non-zero balance at the given index\n     * @param  account  The account to query\n@return          The market ID in the provided index for the account.",
            "id": 24438,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountMarketWithBalanceAtIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24431,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24438,
                  "src": "19746:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24430,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "19746:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24433,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 24438,
                  "src": "19785:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19785:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19736:68:80"
            },
            "returnParameters": {
              "id": 24437,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24436,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24438,
                  "src": "19828:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24435,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19828:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19827:9:80"
            },
            "scope": 24693,
            "src": "19693:144:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the number of markets with which an account has a negative balance.\n     * @param  account  The account to query\n@return          The number of markets with a negative balance for this account.",
            "id": 24445,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountNumberOfMarketsWithDebt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24441,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24440,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24445,
                  "src": "20130:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24439,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "20130:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20120:45:80"
            },
            "returnParameters": {
              "id": 24444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24443,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24445,
                  "src": "20189:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20189:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20188:9:80"
            },
            "scope": 24693,
            "src": "20078:120:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total supplied and total borrowed value of an account.\n     * @param  account  The account to query\n@return          The following values:\n                  - The supplied value of the account\n                  - The borrowed value of the account",
            "id": 24454,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountValues",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24447,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24454,
                  "src": "20545:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24446,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "20545:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20535:45:80"
            },
            "returnParameters": {
              "id": 24453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24450,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24454,
                  "src": "20604:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24449,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "20604:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24452,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24454,
                  "src": "20627:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24451,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "20627:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20603:46:80"
            },
            "scope": 24693,
            "src": "20510:140:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get the total supplied and total borrowed values of an account adjusted by the marginPremium\nof each market. Supplied values are divided by (1 + marginPremium) for each market and\nborrowed values are multiplied by (1 + marginPremium) for each market. Comparing these\nadjusted values gives the margin-ratio of the account which will be compared to the global\nmargin-ratio when determining if the account can be liquidated.\n     * @param  account  The account to query\n@return          The following values:\n                  - The supplied value of the account (adjusted for marginPremium)\n                  - The borrowed value of the account (adjusted for marginPremium)",
            "id": 24463,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAdjustedAccountValues",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24456,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24463,
                  "src": "21450:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24455,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "21450:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21440:45:80"
            },
            "returnParameters": {
              "id": 24462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24459,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24463,
                  "src": "21509:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24458,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "21509:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24461,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24463,
                  "src": "21532:21:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_memory_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24460,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "21532:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21508:46:80"
            },
            "scope": 24693,
            "src": "21407:148:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Get an account's summary for each market.\n     * @param  account  The account to query\n@return          The following values:\n                  - The market IDs for each market\n                  - The ERC20 token address for each market\n                  - The account's principal value for each market\n                  - The account's (supplied or borrowed) number of tokens for each market",
            "id": 24480,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24466,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24465,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22056:29:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_calldata_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24464,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "22056:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22046:45:80"
            },
            "returnParameters": {
              "id": 24479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24469,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22115:13:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24467,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "22115:4:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24468,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22115:6:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24472,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22130:16:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24470,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "22130:7:80",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 24471,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22130:9:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24475,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22148:18:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Par_$30890_memory_$dyn_memory_ptr",
                    "typeString": "struct Types.Par[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24473,
                      "name": "Types.Par",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 30890,
                      "src": "22148:9:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Par_$30890_storage_ptr",
                        "typeString": "struct Types.Par"
                      }
                    },
                    "id": 24474,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22148:11:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Par_$30890_storage_$dyn_storage_ptr",
                      "typeString": "struct Types.Par[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24478,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24480,
                  "src": "22168:18:80",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Wei_$31149_memory_$dyn_memory_ptr",
                    "typeString": "struct Types.Wei[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24476,
                      "name": "Types.Wei",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 31149,
                      "src": "22168:9:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Wei_$31149_storage_ptr",
                        "typeString": "struct Types.Wei"
                      }
                    },
                    "id": 24477,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22168:11:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Wei_$31149_storage_$dyn_storage_ptr",
                      "typeString": "struct Types.Wei[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22114:73:80"
            },
            "scope": 24693,
            "src": "22019:169:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Return true if a particular address is approved as an operator for an owner's accounts.\nApproved operators can act on the accounts of the owner as if it were the operator's own.\n     * @param  owner     The owner of the accounts\n@param  operator  The possible operator\n@return           True if operator is approved for owner's accounts",
            "id": 24489,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsLocalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24482,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24489,
                  "src": "22685:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22685:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24484,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24489,
                  "src": "22708:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24483,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22708:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22675:55:80"
            },
            "returnParameters": {
              "id": 24488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24487,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24489,
                  "src": "22754:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22754:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22753:6:80"
            },
            "scope": 24693,
            "src": "22648:112:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Return true if a particular address is approved as a global operator. Such an address can\nact on any account as if it were the operator's own.\n     * @param  operator  The address to query\n@return           True if operator is a global operator",
            "id": 24496,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsGlobalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24491,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24496,
                  "src": "23093:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24490,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23093:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23083:32:80"
            },
            "returnParameters": {
              "id": 24495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24494,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24496,
                  "src": "23139:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24493,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23139:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23138:6:80"
            },
            "scope": 24693,
            "src": "23055:90:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Checks if the autoTrader can only be called invoked by a global operator\n     * @param autoTrader    The trader that should be checked for special call privileges.",
            "id": 24503,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getIsAutoTraderSpecial",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24498,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 24503,
                  "src": "23377:18:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24497,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23377:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23376:20:80"
            },
            "returnParameters": {
              "id": 24502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24501,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24503,
                  "src": "23420:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24500,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23420:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23419:6:80"
            },
            "scope": 24693,
            "src": "23345:81:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "The main entry-point to DolomiteMargin that allows users and contracts to manage accounts.\nTake one or more actions on one or more accounts. The msg.sender must be the owner or\noperator of all accounts except for those being liquidated, vaporized, or traded with.\nOne call to operate() is considered a singular \"operation\". Account collateralization is\nensured only after the completion of the entire operation.\n     * @param  accounts  A list of all accounts that will be used in this operation. Cannot contain\n                  duplicates. In each action, the relevant account will be referred-to by its\n                  index in the list.\n@param  actions   An ordered list of all actions that will be taken in this operation. The\n                  actions will be processed in order.",
            "id": 24512,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "operate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24506,
                  "name": "accounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 24512,
                  "src": "24382:32:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Info_$24851_calldata_$dyn_calldata_ptr",
                    "typeString": "struct Account.Info[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24504,
                      "name": "Account.Info",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 24851,
                      "src": "24382:12:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                        "typeString": "struct Account.Info"
                      }
                    },
                    "id": 24505,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24382:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Info_$24851_storage_$dyn_storage_ptr",
                      "typeString": "struct Account.Info[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24509,
                  "name": "actions",
                  "nodeType": "VariableDeclaration",
                  "scope": 24512,
                  "src": "24424:37:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_ActionArgs_$24930_calldata_$dyn_calldata_ptr",
                    "typeString": "struct Actions.ActionArgs[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24507,
                      "name": "Actions.ActionArgs",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 24930,
                      "src": "24424:18:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ActionArgs_$24930_storage_ptr",
                        "typeString": "struct Actions.ActionArgs"
                      }
                    },
                    "id": 24508,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24424:20:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_ActionArgs_$24930_storage_$dyn_storage_ptr",
                      "typeString": "struct Actions.ActionArgs[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24372:95:80"
            },
            "returnParameters": {
              "id": 24511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24476:0:80"
            },
            "scope": 24693,
            "src": "24356:121:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Approves/disapproves any number of operators. An operator is an external address that has the\nsame permissions to manipulate an account as the owner of the account. Operators are simply\naddresses and therefore may either be externally-owned Ethereum accounts OR smart contracts.\n     * Operators are also able to act as AutoTrader contracts on behalf of the account owner if the\noperator is a smart contract and implements the IAutoTrader interface.\n     * @param  args  A list of OperatorArgs which have an address and a boolean. The boolean value\n              denotes whether to approve (true) or revoke approval (false) for that address.",
            "id": 24518,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setOperators",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24515,
                  "name": "args",
                  "nodeType": "VariableDeclaration",
                  "scope": 24518,
                  "src": "25221:33:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_OperatorArg_$30865_calldata_$dyn_calldata_ptr",
                    "typeString": "struct Types.OperatorArg[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 24513,
                      "name": "Types.OperatorArg",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 30865,
                      "src": "25221:17:80",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OperatorArg_$30865_storage_ptr",
                        "typeString": "struct Types.OperatorArg"
                      }
                    },
                    "id": 24514,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "25221:19:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_OperatorArg_$30865_storage_$dyn_storage_ptr",
                      "typeString": "struct Types.OperatorArg[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25211:49:80"
            },
            "returnParameters": {
              "id": 24517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25269:0:80"
            },
            "scope": 24693,
            "src": "25190:80:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Withdraw an ERC20 token for which there is an associated market. Only excess tokens can be withdrawn. The number\nof excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number\nof tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by\nDolomiteMargin.",
            "id": 24527,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawExcessTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24520,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24527,
                  "src": "25908:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25908:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24522,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 24527,
                  "src": "25934:17:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25934:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25898:59:80"
            },
            "returnParameters": {
              "id": 24526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24525,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24527,
                  "src": "25984:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24524,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25984:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25983:9:80"
            },
            "scope": 24693,
            "src": "25864:129:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Withdraw an ERC20 token for which there is no associated market.",
            "id": 24536,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerWithdrawUnsupportedTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24529,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 24536,
                  "src": "26136:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24528,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26136:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24531,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 24536,
                  "src": "26159:17:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26159:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26126:56:80"
            },
            "returnParameters": {
              "id": 24535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24534,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24536,
                  "src": "26209:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26209:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26208:9:80"
            },
            "scope": 24693,
            "src": "26087:131:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Add a new market to DolomiteMargin. Must be for a previously-unsupported ERC20 token.",
            "id": 24557,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerAddMarket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24538,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26417:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24537,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26417:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24540,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26440:24:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24539,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "26440:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24542,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26474:30:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24541,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "26474:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24544,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26514:35:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24543,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "26514:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24546,
                  "name": "spreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26559:35:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24545,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "26559:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24548,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26604:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26604:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24550,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26634:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24549,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26634:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24552,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26664:42:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24551,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "26664:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24554,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 24557,
                  "src": "26716:14:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24553,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26716:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26407:329:80"
            },
            "returnParameters": {
              "id": 24556,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26749:0:80"
            },
            "scope": 24693,
            "src": "26384:366:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set (or unset) the status of a market to \"closing\". The borrowedValue of a market cannot increase while its\nstatus is \"closing\".",
            "id": 24564,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetIsClosing",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24559,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24564,
                  "src": "26951:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26951:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24561,
                  "name": "isClosing",
                  "nodeType": "VariableDeclaration",
                  "scope": 24564,
                  "src": "26977:14:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24560,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26977:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26941:56:80"
            },
            "returnParameters": {
              "id": 24563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27010:0:80"
            },
            "scope": 24693,
            "src": "26915:96:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the price oracle for a market.",
            "id": 24571,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetPriceOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24566,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24571,
                  "src": "27113:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24565,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27113:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24568,
                  "name": "priceOracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 24571,
                  "src": "27139:24:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                    "typeString": "contract IPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24567,
                    "name": "IPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24835,
                    "src": "27139:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$24835",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27103:66:80"
            },
            "returnParameters": {
              "id": 24570,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27182:0:80"
            },
            "scope": 24693,
            "src": "27075:108:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the interest-setter for a market.",
            "id": 24578,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetInterestSetter",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24576,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24573,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24578,
                  "src": "27291:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24572,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27291:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24575,
                  "name": "interestSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24578,
                  "src": "27317:30:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                    "typeString": "contract IInterestSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24574,
                    "name": "IInterestSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24789,
                    "src": "27317:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IInterestSetter_$24789",
                      "typeString": "contract IInterestSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27281:72:80"
            },
            "returnParameters": {
              "id": 24577,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27366:0:80"
            },
            "scope": 24693,
            "src": "27250:117:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set a premium on the minimum margin-ratio for a market. This makes it so that any positions that include this\nmarket require a higher collateralization to avoid being liquidated.",
            "id": 24585,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24583,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24580,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24585,
                  "src": "27622:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24579,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27622:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24582,
                  "name": "marginPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24585,
                  "src": "27648:35:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24581,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "27648:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27612:77:80"
            },
            "returnParameters": {
              "id": 24584,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27702:0:80"
            },
            "scope": 24693,
            "src": "27582:121:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set a premium on the liquidation spread for a market. This makes it so that any liquidations that include this\nmarket have a higher spread than the global default.",
            "id": 24592,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpreadPremium",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24587,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24592,
                  "src": "27954:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24586,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27954:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24589,
                  "name": "liquidationSpreadPremium",
                  "nodeType": "VariableDeclaration",
                  "scope": 24592,
                  "src": "27980:46:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24588,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "27980:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27944:88:80"
            },
            "returnParameters": {
              "id": 24591,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28045:0:80"
            },
            "scope": 24693,
            "src": "27903:143:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the maximum supply wei for a given `marketId`.",
            "id": 24599,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxSupplyWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24594,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24599,
                  "src": "28166:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28166:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24596,
                  "name": "maxSupplyWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24599,
                  "src": "28192:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24595,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28192:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28156:62:80"
            },
            "returnParameters": {
              "id": 24598,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28231:0:80"
            },
            "scope": 24693,
            "src": "28127:105:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the maximum borrow wei for a given `marketId`.",
            "id": 24606,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMaxBorrowWei",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24601,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24606,
                  "src": "28352:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24600,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28352:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24603,
                  "name": "maxBorrowWei",
                  "nodeType": "VariableDeclaration",
                  "scope": 24606,
                  "src": "28378:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24602,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28378:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28342:62:80"
            },
            "returnParameters": {
              "id": 24605,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28417:0:80"
            },
            "scope": 24693,
            "src": "28313:105:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the earnings rate override for a given `marketId`. Set it to 0 unset the override.",
            "id": 24613,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRateOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24608,
                  "name": "marketId",
                  "nodeType": "VariableDeclaration",
                  "scope": 24613,
                  "src": "28582:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24607,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28582:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24610,
                  "name": "earningsRateOverride",
                  "nodeType": "VariableDeclaration",
                  "scope": 24613,
                  "src": "28608:42:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24609,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "28608:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28572:84:80"
            },
            "returnParameters": {
              "id": 24612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28669:0:80"
            },
            "scope": 24693,
            "src": "28535:135:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global minimum margin-ratio that every position must maintain to prevent being liquidated.",
            "id": 24618,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMarginRatio",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24615,
                  "name": "ratio",
                  "nodeType": "VariableDeclaration",
                  "scope": 24618,
                  "src": "28885:27:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24614,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "28885:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28875:43:80"
            },
            "returnParameters": {
              "id": 24617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28931:0:80"
            },
            "scope": 24693,
            "src": "28847:85:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of\nrisky positions.",
            "id": 24623,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetLiquidationSpread",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24621,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24620,
                  "name": "spread",
                  "nodeType": "VariableDeclaration",
                  "scope": 24623,
                  "src": "29142:28:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24619,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "29142:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29132:44:80"
            },
            "returnParameters": {
              "id": 24622,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29189:0:80"
            },
            "scope": 24693,
            "src": "29098:92:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets\npassed-on to suppliers.",
            "id": 24628,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetEarningsRate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24625,
                  "name": "earningsRate",
                  "nodeType": "VariableDeclaration",
                  "scope": 24628,
                  "src": "29398:34:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_D256_$25950_calldata_ptr",
                    "typeString": "struct Decimal.D256"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24624,
                    "name": "Decimal.D256",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25950,
                    "src": "29398:12:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_D256_$25950_storage_ptr",
                      "typeString": "struct Decimal.D256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29388:50:80"
            },
            "returnParameters": {
              "id": 24627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29451:0:80"
            },
            "scope": 24693,
            "src": "29359:93:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Set the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin.",
            "id": 24633,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetMinBorrowedValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24630,
                  "name": "minBorrowedValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 24633,
                  "src": "29624:40:80",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Value_$27759_calldata_ptr",
                    "typeString": "struct Monetary.Value"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24629,
                    "name": "Monetary.Value",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27759,
                    "src": "29624:14:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Value_$27759_storage_ptr",
                      "typeString": "struct Monetary.Value"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29614:56:80"
            },
            "returnParameters": {
              "id": 24632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29683:0:80"
            },
            "scope": 24693,
            "src": "29581:103:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the number of non-zero balances an account may have within the same `accountIndex`. This ensures a user\ncannot DOS the system by filling their account with non-zero balances (which linearly increases gas costs when\nchecking collateralization) and disallowing themselves to close the position, because the number of gas units\nneeded to process their transaction exceed the block's gas limit. In turn, this would  prevent the user from also\nbeing liquidated, causing the all of the capital to be \"stuck\" in the position.\n     * Lowering this number does not \"freeze\" user accounts that have more than the new limit of balances, because this\nvariable is enforced by checking the users number of non-zero balances against the max or if it sizes down before\neach transaction finishes.",
            "id": 24638,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountMaxNumberOfMarketsWithBalances",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24636,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24635,
                  "name": "accountMaxNumberOfMarketsWithBalances",
                  "nodeType": "VariableDeclaration",
                  "scope": 24638,
                  "src": "30611:45:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24634,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30611:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30601:61:80"
            },
            "returnParameters": {
              "id": 24637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30675:0:80"
            },
            "scope": 24693,
            "src": "30547:129:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the current oracle sentinel used to report if borrowing and liquidations are enabled.",
            "id": 24643,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetOracleSentinel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24640,
                  "name": "oracleSentinel",
                  "nodeType": "VariableDeclaration",
                  "scope": 24643,
                  "src": "30837:30:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                    "typeString": "contract IOracleSentinel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24639,
                    "name": "IOracleSentinel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24817,
                    "src": "30837:15:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOracleSentinel_$24817",
                      "typeString": "contract IOracleSentinel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30827:46:80"
            },
            "returnParameters": {
              "id": 24642,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30886:0:80"
            },
            "scope": 24693,
            "src": "30796:91:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the gas limit that's passed to any of the callback functions",
            "id": 24648,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetCallbackGasLimit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24645,
                  "name": "callbackGasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 24648,
                  "src": "31025:24:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24644,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31025:7:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31015:40:80"
            },
            "returnParameters": {
              "id": 24647,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31068:0:80"
            },
            "scope": 24693,
            "src": "30982:87:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the account risk override setter by default for any account",
            "id": 24653,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetDefaultAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24651,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24650,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24653,
                  "src": "31216:52:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24649,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "31216:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31206:68:80"
            },
            "returnParameters": {
              "id": 24652,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31287:0:80"
            },
            "scope": 24693,
            "src": "31163:125:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Sets the account risk override setter for a given wallet",
            "id": 24660,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAccountRiskOverride",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24655,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24660,
                  "src": "31420:20:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24654,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31420:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24657,
                  "name": "accountRiskOverrideSetter",
                  "nodeType": "VariableDeclaration",
                  "scope": 24660,
                  "src": "31450:52:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                    "typeString": "contract IAccountRiskOverrideSetter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24656,
                    "name": "IAccountRiskOverrideSetter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24029,
                    "src": "31450:26:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAccountRiskOverrideSetter_$24029",
                      "typeString": "contract IAccountRiskOverrideSetter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31410:98:80"
            },
            "returnParameters": {
              "id": 24659,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31521:0:80"
            },
            "scope": 24693,
            "src": "31374:148:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Approve (or disapprove) an address that is permissioned to be an operator for all accounts in DolomiteMargin.\nIntended only to approve smart-contracts.",
            "id": 24667,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetGlobalOperator",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24662,
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 24667,
                  "src": "31811:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24661,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31811:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24664,
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 24667,
                  "src": "31837:13:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24663,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "31837:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31801:55:80"
            },
            "returnParameters": {
              "id": 24666,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31869:0:80"
            },
            "scope": 24693,
            "src": "31770:100:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "Approve (or disapprove) an auto trader that can only be called by a global operator. IE for expirations",
            "id": 24674,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerSetAutoTraderSpecial",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24669,
                  "name": "autoTrader",
                  "nodeType": "VariableDeclaration",
                  "scope": 24674,
                  "src": "32047:18:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24668,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32047:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24671,
                  "name": "special",
                  "nodeType": "VariableDeclaration",
                  "scope": 24674,
                  "src": "32075:12:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24670,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "32075:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32037:56:80"
            },
            "returnParameters": {
              "id": 24673,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32106:0:80"
            },
            "scope": 24693,
            "src": "32003:104:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Returns the address of the current owner.",
            "id": 24679,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "owner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24675,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32247:2:80"
            },
            "returnParameters": {
              "id": 24678,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24677,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24679,
                  "src": "32273:7:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24676,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32273:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32272:9:80"
            },
            "scope": 24693,
            "src": "32233:49:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Returns true if the caller is the current owner.",
            "id": 24684,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24680,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32381:2:80"
            },
            "returnParameters": {
              "id": 24683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24682,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 24684,
                  "src": "32407:4:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24681,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "32407:4:80",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32406:6:80"
            },
            "scope": 24693,
            "src": "32365:48:80",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Leaves the contract without owner. It will not be possible to call\n`onlyOwner` functions anymore. Can only be called by the current owner.\n     * NOTE: Renouncing ownership will leave the contract without an owner,\nthereby removing any functionality that is only available to the owner.",
            "id": 24687,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "renounceOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32781:2:80"
            },
            "returnParameters": {
              "id": 24686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32792:0:80"
            },
            "scope": 24693,
            "src": "32755:38:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": "@dev Transfers ownership of the contract to a new account (`newOwner`).\nCan only be called by the current owner.",
            "id": 24692,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 24690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24689,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 24692,
                  "src": "32969:16:80",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 24688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32969:7:80",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32968:18:80"
            },
            "returnParameters": {
              "id": 24691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32995:0:80"
            },
            "scope": 24693,
            "src": "32942:54:80",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 24694,
        "src": "1271:31727:80"
      }
    ],
    "src": "595:32404:80"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2026-03-02T16:38:28.901Z",
  "devdoc": {
    "methods": {
      "getAccountBalances((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The following values:                  - The market IDs for each market                  - The ERC20 token address for each market                  - The account's principal value for each market                  - The account's (supplied or borrowed) number of tokens for each market"
      },
      "getAccountMarketWithBalanceAtIndex((address,uint256),uint256)": {
        "params": {
          "account": "The account to query"
        },
        "return": "The market ID in the provided index for the account."
      },
      "getAccountMarketsWithBalances((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The non-sorted marketIds with non-zero balance for the account."
      },
      "getAccountMaxNumberOfMarketsWithBalances()": {
        "return": "The maximum number of assets an account owner can hold in an account number."
      },
      "getAccountNumberOfMarketsWithBalances((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The number of markets with a non-zero balance for the account."
      },
      "getAccountNumberOfMarketsWithDebt((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The number of markets with a negative balance for this account."
      },
      "getAccountPar((address,uint256),uint256)": {
        "params": {
          "account": "The account to query",
          "marketId": "The market to query"
        },
        "return": "The principal value"
      },
      "getAccountRiskOverrideByAccount((address,uint256))": {
        "params": {
          "account": "The account to check if there is a risk override."
        },
        "return": "marginRatioOverride          The margin ratio override for an account owner. Defaults to 0 if there's no                                     override in place.liquidationSpreadOverride    The margin ratio override for an account owner. Defaults to 0 if there's no                                     override in place."
      },
      "getAccountRiskOverrideSetterByAccountOwner(address)": {
        "params": {
          "accountOwner": "The address of the account to check if there is a margin ratio override."
        },
        "return": "The contract that contains risk override information for this account."
      },
      "getAccountStatus((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The account's status"
      },
      "getAccountValues((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The following values:                  - The supplied value of the account                  - The borrowed value of the account"
      },
      "getAccountWei((address,uint256),uint256)": {
        "params": {
          "account": "The account to query",
          "marketId": "The market to query"
        },
        "return": "The token amount"
      },
      "getAdjustedAccountValues((address,uint256))": {
        "params": {
          "account": "The account to query"
        },
        "return": "The following values:                  - The supplied value of the account (adjusted for marginPremium)                  - The borrowed value of the account (adjusted for marginPremium)"
      },
      "getCallbackGasLimit()": {
        "return": "The gas limit used for making callbacks via `IExternalCallback::onInternalBalanceChange` to smart         contract wallets."
      },
      "getDefaultAccountRiskOverrideSetter()": {
        "return": "The contract that contains risk override information for any account that does NOT have an account-         specific override."
      },
      "getEarningsRate()": {
        "return": "The global earnings rate"
      },
      "getIsAutoTraderSpecial(address)": {
        "params": {
          "autoTrader": "The trader that should be checked for special call privileges."
        }
      },
      "getIsBorrowAllowed()": {
        "return": "True if borrowing is globally allowed according to the Oracle Sentinel or false if it is not"
      },
      "getIsGlobalOperator(address)": {
        "params": {
          "operator": "The address to query"
        },
        "return": "True if operator is a global operator"
      },
      "getIsLiquidationAllowed()": {
        "return": "True if liquidations are globally allowed according to the Oracle Sentinel or false if they are not"
      },
      "getIsLocalOperator(address,address)": {
        "params": {
          "operator": "The possible operator",
          "owner": "The owner of the accounts"
        },
        "return": "True if operator is approved for owner's accounts"
      },
      "getLiquidationSpread()": {
        "return": "The global liquidation spread"
      },
      "getLiquidationSpreadForAccountAndPair((address,uint256),uint256,uint256)": {
        "params": {
          "account": "The account whose liquidation spread is being queried. This is used to determine if there is                     an override in place.",
          "heldMarketId": "The market for which the account has collateral",
          "owedMarketId": "The market for which the account has borrowed tokens"
        },
        "return": "The adjusted liquidation spread"
      },
      "getLiquidationSpreadForPair(uint256,uint256)": {
        "params": {
          "heldMarketId": "The market for which the account has collateral",
          "owedMarketId": "The market for which the account has borrowed tokens"
        },
        "return": "The adjusted liquidation spread"
      },
      "getLiquidationSpreadOverrideByAccount((address,uint256))": {
        "params": {
          "account": "The account to check if there is a liquidation spread override."
        },
        "return": "The liquidation spread override for an account owner. Defaults to 0 if there's no override in place."
      },
      "getMarginRatio()": {
        "return": "The global margin-ratio"
      },
      "getMarginRatioForAccount((address,uint256))": {
        "params": {
          "account": "The account whose margin ratio is being queried. This is used to determine if there is an                     override that supersedes the global minimum."
        },
        "return": "The margin ratio for this account"
      },
      "getMarginRatioOverrideByAccount((address,uint256))": {
        "params": {
          "account": "The account to check if there is a margin ratio override."
        },
        "return": "The margin ratio override for an account owner. Defaults to 0 if there's no override in place."
      },
      "getMarket(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "A Storage.Market struct with the current state of the market"
      },
      "getMarketBorrowInterestRateApr(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The current supply interest rate"
      },
      "getMarketBorrowInterestRatePerSecond(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The current borrow interest rate"
      },
      "getMarketCachedIndex(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The most recent index"
      },
      "getMarketCurrentIndex(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The estimated current index"
      },
      "getMarketEarningsRateOverride(uint256)": {
        "return": "The market-specific earnings rate"
      },
      "getMarketIdByTokenAddress(address)": {
        "params": {
          "token": "The token to query"
        },
        "return": "The token's marketId if the token is valid"
      },
      "getMarketInterestRate(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The current borrow interest rate"
      },
      "getMarketInterestSetter(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The interest-setter address"
      },
      "getMarketIsClosing(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "True if the market is closing"
      },
      "getMarketLiquidationSpreadPremium(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The market's spread premium"
      },
      "getMarketMarginPremium(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The market's margin premium"
      },
      "getMarketMaxBorrowWei(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The market's max borrow amount. Always negative or 0."
      },
      "getMarketMaxSupplyWei(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The market's max supply amount. Always 0 or positive."
      },
      "getMarketMaxWei(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The max amount of the market that can be supplied. Always 0 or positive."
      },
      "getMarketPrice(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The price of each atomic unit of the token"
      },
      "getMarketPriceOracle(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The price oracle address"
      },
      "getMarketSpreadPremium(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The market's spread premium"
      },
      "getMarketSupplyInterestRateApr(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The current supply interest rate"
      },
      "getMarketTokenAddress(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The token address"
      },
      "getMarketTotalPar(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The total principal amounts"
      },
      "getMarketTotalWei(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The total principal amounts"
      },
      "getMarketWithInfo(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "A tuple containing the values:                   - A Storage.Market struct with the current state of the market                   - The current estimated interest index                   - The current token price                   - The current market borrow interest rate per second"
      },
      "getMinBorrowedValue()": {
        "return": "The global minimum borrow value"
      },
      "getNumExcessTokens(uint256)": {
        "params": {
          "marketId": "The market to query"
        },
        "return": "The number of excess tokens"
      },
      "getNumMarkets()": {
        "return": "The number of markets"
      },
      "getOracleSentinel()": {
        "return": "The oracle sentinel for DolomiteMargin"
      },
      "getRiskLimits()": {
        "return": "All global risk parameter limits"
      },
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[])": {
        "params": {
          "accounts": "A list of all accounts that will be used in this operation. Cannot contain                  duplicates. In each action, the relevant account will be referred-to by its                  index in the list.",
          "actions": "An ordered list of all actions that will be taken in this operation. The                  actions will be processed in order."
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "setOperators((address,bool)[])": {
        "params": {
          "args": "A list of OperatorArgs which have an address and a boolean. The boolean value              denotes whether to approve (true) or revoke approval (false) for that address."
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "userdoc": {
    "methods": {
      "getAccountBalances((address,uint256))": {
        "notice": "Get an account's summary for each market."
      },
      "getAccountMarketWithBalanceAtIndex((address,uint256),uint256)": {
        "notice": "Get the marketId for an account's market with a non-zero balance at the given index"
      },
      "getAccountMarketsWithBalances((address,uint256))": {
        "notice": "Get a list of markets that have a non-zero balance for an account"
      },
      "getAccountMaxNumberOfMarketsWithBalances()": {
        "notice": "Get the maximum number of assets an account owner can hold in an account number."
      },
      "getAccountNumberOfMarketsWithBalances((address,uint256))": {
        "notice": "Get the number of markets that have a non-zero balance for an account"
      },
      "getAccountNumberOfMarketsWithDebt((address,uint256))": {
        "notice": "Get the number of markets with which an account has a negative balance."
      },
      "getAccountPar((address,uint256),uint256)": {
        "notice": "Get the principal value for a particular account and market."
      },
      "getAccountRiskOverrideByAccount((address,uint256))": {
        "notice": "Get the margin ratio override for an account owner. Used to enable e-mode for certain isolation mode vaults."
      },
      "getAccountRiskOverrideSetterByAccountOwner(address)": {
        "notice": "Get the account risk override getter for an account owner. This contract enables e-mode for certain isolation mode vaults."
      },
      "getAccountStatus((address,uint256))": {
        "notice": "Get the status of an account (Normal, Liquidating, or Vaporizing)."
      },
      "getAccountValues((address,uint256))": {
        "notice": "Get the total supplied and total borrowed value of an account."
      },
      "getAccountWei((address,uint256),uint256)": {
        "notice": "Get the token balance for a particular account and market."
      },
      "getAdjustedAccountValues((address,uint256))": {
        "notice": "Get the total supplied and total borrowed values of an account adjusted by the marginPremium of each market. Supplied values are divided by (1 + marginPremium) for each market and borrowed values are multiplied by (1 + marginPremium) for each market. Comparing these adjusted values gives the margin-ratio of the account which will be compared to the global margin-ratio when determining if the account can be liquidated."
      },
      "getDefaultAccountRiskOverrideSetter()": {
        "notice": "Get the account risk override getter for global use. This contract enables e-mode based on the assets held in a position."
      },
      "getEarningsRate()": {
        "notice": "Get the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets passed-on to suppliers."
      },
      "getIsAutoTraderSpecial(address)": {
        "notice": "Checks if the autoTrader can only be called invoked by a global operator"
      },
      "getIsGlobalOperator(address)": {
        "notice": "Return true if a particular address is approved as a global operator. Such an address can act on any account as if it were the operator's own."
      },
      "getIsLocalOperator(address,address)": {
        "notice": "Return true if a particular address is approved as an operator for an owner's accounts. Approved operators can act on the accounts of the owner as if it were the operator's own."
      },
      "getLiquidationSpread()": {
        "notice": "Get the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of risky positions."
      },
      "getLiquidationSpreadForAccountAndPair((address,uint256),uint256,uint256)": {
        "notice": "Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread multiplied by (1 + spreadPremium) for each of the two markets.     * If the pair is in e-mode and has a liquidation spread override, then the override is used instead."
      },
      "getLiquidationSpreadForPair(uint256,uint256)": {
        "notice": "Get the adjusted liquidation spread for some market pair. This is equal to the global liquidation spread multiplied by (1 + spreadPremium) for each of the two markets.     * Assumes the pair is not in e-mode. Backwards compatible with V1."
      },
      "getLiquidationSpreadOverrideByAccount((address,uint256))": {
        "notice": "Get the liquidation reward override for an account owner. Used to enable e-mode for certain isolation mode vaults."
      },
      "getMarginRatio()": {
        "notice": "Get the global minimum margin-ratio that every position must maintain to prevent being liquidated."
      },
      "getMarginRatioForAccount((address,uint256))": {
        "notice": "Get the global minimum margin-ratio that every position must maintain to prevent being liquidated."
      },
      "getMarginRatioOverrideByAccount((address,uint256))": {
        "notice": "Get the margin ratio override for an account. Used to enable e-mode for certain accounts/positions."
      },
      "getMarket(uint256)": {
        "notice": "Get basic information about a particular market."
      },
      "getMarketBorrowInterestRateApr(uint256)": {
        "notice": "Get the current borrow interest rate for a market. The value is denominated as interest paid per year, and the number is scaled to have 18 decimals."
      },
      "getMarketBorrowInterestRatePerSecond(uint256)": {
        "notice": "Get the current borrow interest rate for a market. The value is denominated as interest paid per second, and the number is scaled to have 18 decimals. To get APR, multiply the number returned by 31536000 (seconds in a year)."
      },
      "getMarketCachedIndex(uint256)": {
        "notice": "Get the most recently cached interest index for a market."
      },
      "getMarketCurrentIndex(uint256)": {
        "notice": "Get the interest index for a market if it were to be updated right now."
      },
      "getMarketEarningsRateOverride(uint256)": {
        "notice": "Get the market-specific earnings that determines what percentage of the interest paid by borrowers gets passed-on to suppliers. If the value is set to 0, the override is not set."
      },
      "getMarketIdByTokenAddress(address)": {
        "notice": "Get the ERC20 token address for a market."
      },
      "getMarketInterestRate(uint256)": {
        "notice": "Same as getMarketBorrowInterestRatePerSecond. Added for backwards-compatibility."
      },
      "getMarketInterestSetter(uint256)": {
        "notice": "Get the interest-setter address for a market."
      },
      "getMarketIsClosing(uint256)": {
        "notice": "Return true if a particular market is in closing mode. Additional borrows cannot be taken from a market that is closing."
      },
      "getMarketLiquidationSpreadPremium(uint256)": {
        "notice": "Get the spread premium for a market. A spread premium makes it so that any liquidations that include the market have a higher spread than the global default."
      },
      "getMarketMarginPremium(uint256)": {
        "notice": "Get the margin premium for a market. A margin premium makes it so that any positions that include the market require a higher collateralization to avoid being liquidated."
      },
      "getMarketMaxBorrowWei(uint256)": {
        "notice": "Get the max borrow amount for a a market."
      },
      "getMarketMaxSupplyWei(uint256)": {
        "notice": "Get the max supply amount for a a market."
      },
      "getMarketMaxWei(uint256)": {
        "notice": "Same as getMarketMaxSupplyWei. Added for backwards-compatibility."
      },
      "getMarketPrice(uint256)": {
        "notice": "Get the price of the token for a market."
      },
      "getMarketPriceOracle(uint256)": {
        "notice": "Get the price oracle address for a market."
      },
      "getMarketSpreadPremium(uint256)": {
        "notice": "Same as getMarketLiquidationSpreadPremium. Added for backwards-compatibility."
      },
      "getMarketSupplyInterestRateApr(uint256)": {
        "notice": "Get the current supply interest rate for a market."
      },
      "getMarketTokenAddress(uint256)": {
        "notice": "Get the ERC20 token address for a market."
      },
      "getMarketTotalPar(uint256)": {
        "notice": "Get the total principal amounts (borrowed and supplied) for a market."
      },
      "getMarketTotalWei(uint256)": {
        "notice": "Get the total principal amounts (borrowed and supplied) for a market."
      },
      "getMarketWithInfo(uint256)": {
        "notice": "Get comprehensive information about a particular market."
      },
      "getMinBorrowedValue()": {
        "notice": "Get the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin."
      },
      "getNumExcessTokens(uint256)": {
        "notice": "Get the number of tokens that are owed to the `owner` of DolomiteMargin. The number of excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin."
      },
      "getNumMarkets()": {
        "notice": "Get the total number of markets."
      },
      "getOracleSentinel()": {
        "notice": "Gets the oracle sentinel, which is responsible for checking if the Blockchain or L2 is alive, if liquidations should be processed, and if markets should are in size-down only mode."
      },
      "getRiskLimits()": {
        "notice": "Get all risk parameter limits in a single struct. These are the maximum limits at which the risk parameters can be set by the admin of DolomiteMargin."
      },
      "operate((address,uint256)[],(uint8,uint256,(bool,uint8,uint8,uint256),uint256,uint256,address,uint256,bytes)[])": {
        "notice": "The main entry-point to DolomiteMargin that allows users and contracts to manage accounts. Take one or more actions on one or more accounts. The msg.sender must be the owner or operator of all accounts except for those being liquidated, vaporized, or traded with. One call to operate() is considered a singular \"operation\". Account collateralization is ensured only after the completion of the entire operation."
      },
      "ownerAddMarket(address,address,address,(uint256),(uint256),uint256,uint256,(uint256),bool)": {
        "notice": "Add a new market to DolomiteMargin. Must be for a previously-unsupported ERC20 token."
      },
      "ownerSetAccountMaxNumberOfMarketsWithBalances(uint256)": {
        "notice": "Sets the number of non-zero balances an account may have within the same `accountIndex`. This ensures a user cannot DOS the system by filling their account with non-zero balances (which linearly increases gas costs when checking collateralization) and disallowing themselves to close the position, because the number of gas units needed to process their transaction exceed the block's gas limit. In turn, this would  prevent the user from also being liquidated, causing the all of the capital to be \"stuck\" in the position.     * Lowering this number does not \"freeze\" user accounts that have more than the new limit of balances, because this variable is enforced by checking the users number of non-zero balances against the max or if it sizes down before each transaction finishes."
      },
      "ownerSetAccountRiskOverride(address,address)": {
        "notice": "Sets the account risk override setter for a given wallet"
      },
      "ownerSetAutoTraderSpecial(address,bool)": {
        "notice": "Approve (or disapprove) an auto trader that can only be called by a global operator. IE for expirations"
      },
      "ownerSetCallbackGasLimit(uint256)": {
        "notice": "Sets the gas limit that's passed to any of the callback functions"
      },
      "ownerSetDefaultAccountRiskOverride(address)": {
        "notice": "Sets the account risk override setter by default for any account"
      },
      "ownerSetEarningsRate((uint256))": {
        "notice": "Set the global earnings-rate variable that determines what percentage of the interest paid by borrowers gets passed-on to suppliers."
      },
      "ownerSetEarningsRateOverride(uint256,(uint256))": {
        "notice": "Sets the earnings rate override for a given `marketId`. Set it to 0 unset the override."
      },
      "ownerSetGlobalOperator(address,bool)": {
        "notice": "Approve (or disapprove) an address that is permissioned to be an operator for all accounts in DolomiteMargin. Intended only to approve smart-contracts."
      },
      "ownerSetInterestSetter(uint256,address)": {
        "notice": "Set the interest-setter for a market."
      },
      "ownerSetIsClosing(uint256,bool)": {
        "notice": "Set (or unset) the status of a market to \"closing\". The borrowedValue of a market cannot increase while its status is \"closing\"."
      },
      "ownerSetLiquidationSpread((uint256))": {
        "notice": "Set the global liquidation spread. This is the spread between oracle prices that incentivizes the liquidation of risky positions."
      },
      "ownerSetLiquidationSpreadPremium(uint256,(uint256))": {
        "notice": "Set a premium on the liquidation spread for a market. This makes it so that any liquidations that include this market have a higher spread than the global default."
      },
      "ownerSetMarginPremium(uint256,(uint256))": {
        "notice": "Set a premium on the minimum margin-ratio for a market. This makes it so that any positions that include this market require a higher collateralization to avoid being liquidated."
      },
      "ownerSetMarginRatio((uint256))": {
        "notice": "Set the global minimum margin-ratio that every position must maintain to prevent being liquidated."
      },
      "ownerSetMaxBorrowWei(uint256,uint256)": {
        "notice": "Sets the maximum borrow wei for a given `marketId`."
      },
      "ownerSetMaxSupplyWei(uint256,uint256)": {
        "notice": "Sets the maximum supply wei for a given `marketId`."
      },
      "ownerSetMinBorrowedValue((uint256))": {
        "notice": "Set the global minimum-borrow value which is the minimum value of any new borrow on DolomiteMargin."
      },
      "ownerSetOracleSentinel(address)": {
        "notice": "Sets the current oracle sentinel used to report if borrowing and liquidations are enabled."
      },
      "ownerSetPriceOracle(uint256,address)": {
        "notice": "Set the price oracle for a market."
      },
      "ownerWithdrawExcessTokens(uint256,address)": {
        "notice": "Withdraw an ERC20 token for which there is an associated market. Only excess tokens can be withdrawn. The number of excess tokens is calculated by taking the current number of tokens held in DolomiteMargin, adding the number of tokens owed to DolomiteMargin by borrowers, and subtracting the number of tokens owed to suppliers by DolomiteMargin."
      },
      "ownerWithdrawUnsupportedTokens(address,address)": {
        "notice": "Withdraw an ERC20 token for which there is no associated market."
      },
      "setOperators((address,bool)[])": {
        "notice": "Approves/disapproves any number of operators. An operator is an external address that has the same permissions to manipulate an account as the owner of the account. Operators are simply addresses and therefore may either be externally-owned Ethereum accounts OR smart contracts.     * Operators are also able to act as AutoTrader contracts on behalf of the account owner if the operator is a smart contract and implements the IAutoTrader interface."
      }
    }
  }
}