{
  "address": "0xEad7d86296703d93a7a1A19cD9595d89d54f935E",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IBorrowerOperations",
          "name": "_bo",
          "type": "address"
        },
        {
          "internalType": "contract ITroveManager",
          "name": "_tm",
          "type": "address"
        },
        {
          "internalType": "contract IStabilityPool",
          "name": "_sp",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "bo",
      "outputs": [
        {
          "internalType": "contract IBorrowerOperations",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "coll",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "debt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "interest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "MCR",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ICR",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "CCR",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "TCR",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "price",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxCap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "entireSystemDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "entireSystemColl",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "redemptionBootstrap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "redemptionRateWithDecay",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowingRateWithDecay",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "troveStatus",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "surplusBalances",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "spStaked",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "spWETHGains",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "spEsPropelGains",
              "type": "uint256"
            }
          ],
          "internalType": "struct TroveState.State",
          "name": "state",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sp",
      "outputs": [
        {
          "internalType": "contract IStabilityPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tm",
      "outputs": [
        {
          "internalType": "contract ITroveManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0x91b525cbf16c59d87d12fce165062ffdfb8a7e4737efdb7999d2561d4ceb0c10",
  "receipt": {
    "to": null,
    "from": "0xF1658C608708172655A8e70a1624c29F956Ee63D",
    "contractAddress": "0xEad7d86296703d93a7a1A19cD9595d89d54f935E",
    "transactionIndex": 3,
    "gasUsed": "922775",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0x0e6ad51386c24ee5081c9915878396adcd7549821063d454585320cc775a72d8",
    "transactionHash": "0x91b525cbf16c59d87d12fce165062ffdfb8a7e4737efdb7999d2561d4ceb0c10",
    "logs": [],
    "blockNumber": 2169083,
    "cumulativeGasUsed": "1402245",
    "status": 1,
    "byzantium": true
  },
  "args": [
    "0xc5ED6Bd52c5Fb9C716Ef6Caf6a35b4f4B858bab5",
    "0x9e982B7AE8d7F4Ec08C93e4FE109AF420ECe7462",
    "0xd09713b05410d353d12E35D678c51540F5097a67"
  ],
  "numDeployments": 4,
  "solcInputHash": "55ad65ae25e94141334a0cc020e8cff8",
  "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBorrowerOperations\",\"name\":\"_bo\",\"type\":\"address\"},{\"internalType\":\"contract ITroveManager\",\"name\":\"_tm\",\"type\":\"address\"},{\"internalType\":\"contract IStabilityPool\",\"name\":\"_sp\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"bo\",\"outputs\":[{\"internalType\":\"contract IBorrowerOperations\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_borrower\",\"type\":\"address\"}],\"name\":\"getState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"coll\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"MCR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ICR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"CCR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"TCR\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"entireSystemDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"entireSystemColl\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionBootstrap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"redemptionRateWithDecay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowingRateWithDecay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"troveStatus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"surplusBalances\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"spStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"spWETHGains\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"spEsPropelGains\",\"type\":\"uint256\"}],\"internalType\":\"struct TroveState.State\",\"name\":\"state\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sp\",\"outputs\":[{\"internalType\":\"contract IStabilityPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tm\",\"outputs\":[{\"internalType\":\"contract ITroveManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/helpers/TroveState.sol\":\"TroveState\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"contracts/helpers/TroveState.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"../interfaces/IBorrowerOperations.sol\\\";\\nimport \\\"../interfaces/ITroveManager.sol\\\";\\nimport \\\"../interfaces/ISortedTroves.sol\\\";\\nimport \\\"../interfaces/IStabilityPool.sol\\\";\\n\\ncontract TroveState {\\n\\tIBorrowerOperations public bo;\\n\\tITroveManager public tm;\\n\\tIStabilityPool public sp;\\n\\n\\tstruct State {\\n\\t\\tuint256 coll;\\n\\t\\tuint256 debt;\\n\\t\\tuint256 interest;\\n\\t\\tuint256 MCR;\\n\\t\\tuint256 ICR;\\n\\t\\tuint256 CCR;\\n\\t\\tuint256 TCR;\\n\\t\\tuint256 price;\\n\\t\\tuint256 maxCap;\\n\\t\\tuint256 entireSystemDebt;\\n\\t\\tuint256 entireSystemColl;\\n\\t\\tuint256 redemptionBootstrap;\\n\\t\\tuint256 redemptionRateWithDecay;\\n\\t\\tuint256 borrowingRateWithDecay;\\n\\t\\tuint256 troveStatus;\\n\\t\\tuint256 surplusBalances;\\n\\t\\tuint256 spStaked;\\n\\t\\tuint256 spWETHGains;\\n\\t\\tuint256 spEsPropelGains;\\n\\t}\\n\\n\\tconstructor(IBorrowerOperations _bo, ITroveManager _tm, IStabilityPool _sp) {\\n\\t\\tbo = _bo;\\n\\t\\ttm = _tm;\\n\\t\\tsp = _sp;\\n\\t}\\n\\n\\tfunction getState(address _borrower) public returns (State memory state) {\\n\\t\\t(state.coll, state.debt) = tm.getTroveCollAndDebt(_borrower);\\n\\t\\tstate.interest = tm.getTroveInterest(_borrower, state.debt);\\n\\t\\tstate.maxCap = tm.maxSystemDebt();\\n\\t\\tstate.MCR = tm.MCR();\\n\\t\\tstate.CCR = tm.CCR();\\n\\t\\tstate.TCR = bo.getTCR();\\n\\t\\tstate.price = tm.fetchPrice();\\n\\t\\tstate.ICR = tm.getCurrentICR(_borrower,state.price);\\n\\t\\tstate.entireSystemDebt = tm.getEntireSystemDebt();\\n\\t\\tstate.entireSystemColl = tm.getEntireSystemColl();\\n\\t\\tstate.redemptionBootstrap = tm.systemDeploymentTime() + tm.BOOTSTRAP_PERIOD();\\n\\t\\tstate.redemptionRateWithDecay = tm.getRedemptionRateWithDecay();\\n\\t\\tstate.borrowingRateWithDecay = tm.getBorrowingRateWithDecay();\\n\\t\\tstate.troveStatus = tm.getTroveStatus(_borrower);\\n\\t\\tstate.surplusBalances = tm.surplusBalances(_borrower);\\n\\t\\tstate.spStaked = sp.getTotalPropelUSDDeposits();\\n\\t\\tuint256[] memory collGains = sp.getDepositorCollateralGain(_borrower);\\n\\t\\tif (collGains.length > 0) {\\n\\t\\t\\tstate.spWETHGains = collGains[0];\\n\\t\\t}\\n\\t\\tstate.spEsPropelGains = sp.claimableReward(_borrower);\\n\\t}\\n}\\n\",\"keccak256\":\"0xbab92806b02b89d2175aa796cfc84afc5e33169277bd92f12bdb9e47b298de1e\",\"license\":\"MIT\"},\"contracts/interfaces/IBorrowerOperations.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./ITroveManager.sol\\\";\\n\\ninterface IBorrowerOperations {\\n\\tstruct SystemBalances {\\n\\t\\tuint256[] collaterals;\\n\\t\\tuint256[] debts;\\n\\t\\tuint256[] prices;\\n\\t}\\n\\n\\tenum BorrowerOperation {\\n\\t\\topenTrove,\\n\\t\\tcloseTrove,\\n\\t\\tadjustTrove\\n\\t}\\n\\n\\tevent BorrowingFeePaid(address indexed borrower, uint256 amount);\\n\\tevent CollateralConfigured(ITroveManager troveManager, IERC20 collateralToken);\\n\\tevent TroveCreated(address indexed _borrower, uint256 arrayIndex);\\n\\tevent TroveManagerRemoved(ITroveManager troveManager);\\n\\tevent TroveUpdated(address indexed _borrower, uint256 _debt, uint256 _coll, uint256 stake, BorrowerOperation operation);\\n\\n\\tfunction addColl(ITroveManager troveManager, address account, uint256 _collateralAmount, address _upperHint, address _lowerHint) external;\\n\\n\\tfunction adjustTrove(ITroveManager troveManager, address account, uint256 _maxFeePercentage, uint256 _collDeposit, uint256 _collWithdrawal, uint256 _debtChange, bool _isDebtIncrease, address _upperHint, address _lowerHint) external;\\n\\n\\tfunction closeTrove(ITroveManager troveManager, address account) external;\\n\\n\\tfunction configureCollateral(ITroveManager troveManager, IERC20 collateralToken) external;\\n\\n\\tfunction fetchBalances() external returns (SystemBalances memory balances);\\n\\n\\tfunction getGlobalSystemBalances() external returns (uint256 totalPricedCollateral, uint256 totalDebt);\\n\\n\\tfunction getTCR() external returns (uint256 globalTotalCollateralRatio);\\n\\n\\tfunction openTrove(ITroveManager troveManager, address account, uint256 _maxFeePercentage, uint256 _collateralAmount, uint256 _debtAmount, address _upperHint, address _lowerHint) external;\\n\\n\\tfunction removeTroveManager(ITroveManager troveManager) external;\\n\\n\\tfunction repayDebt(ITroveManager troveManager, address account, uint256 _debtAmount, address _upperHint, address _lowerHint) external;\\n\\n\\tfunction setMinNetDebt(uint256 _minNetDebt) external;\\n\\n\\tfunction withdrawColl(ITroveManager troveManager, address account, uint256 _collWithdrawal, address _upperHint, address _lowerHint) external;\\n\\n\\tfunction withdrawDebt(ITroveManager troveManager, address account, uint256 _maxFeePercentage, uint256 _debtAmount, address _upperHint, address _lowerHint) external;\\n\\n\\tfunction factory() external view returns (address);\\n\\n\\tfunction getCompositeDebt(uint256 _debt) external view returns (uint256);\\n\\n\\tfunction minNetDebt() external view returns (uint256);\\n\\n\\tfunction checkRecoveryMode(uint256 TCR) external pure returns (bool);\\n}\\n\",\"keccak256\":\"0x5cab9594ba308880bc3b0624422faef2673bf306c7f08d898e82544afa6c15aa\",\"license\":\"MIT\"},\"contracts/interfaces/IPriceFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"../interfaces/IPyth.sol\\\";\\n\\ninterface IPriceFeed {\\n\\tstruct OracleRecord {\\n\\t\\tIPyth pyth;\\n\\t\\tuint32 decimals;\\n\\t\\tuint32 heartbeat;\\n\\t\\tbool isFeedWorking;\\n\\t}\\n\\n\\tstruct PriceRecord {\\n\\t\\tuint96 scaledPrice;\\n\\t\\tuint32 timestamp;\\n\\t\\tuint32 lastUpdated;\\n\\t}\\n\\n\\tstruct FeedResponse {\\n\\t\\tint64 price;\\n\\t\\t// Confidence interval around the price\\n\\t\\tuint64 conf;\\n\\t\\t// Price exponent\\n\\t\\tint32 expo;\\n\\t\\t// Unix timestamp describing when the price was published\\n\\t\\tuint publishTime;\\n\\t\\tbool success;\\n\\t}\\n\\n\\t// Custom Errors --------------------------------------------------------------------------------------------------\\n\\n\\terror PriceFeed__InvalidFeedResponseError();\\n\\terror PriceFeed__FeedFrozenError();\\n\\terror PriceFeed__UnknownFeedError();\\n\\terror PriceFeed__HeartbeatOutOfBoundsError();\\n\\n\\t// Events ---------------------------------------------------------------------------------------------------------\\n\\n\\tevent NewOracleRegistered(address pyth);\\n\\tevent PriceFeedStatusUpdated(address oracle, bool isWorking);\\n\\tevent PriceRecordUpdated(uint256 _price);\\n\\n\\tfunction fetchPrice(address _token) external returns (uint256);\\n}\\n\",\"keccak256\":\"0x8ef2b41df0f27e3c3a61cbcbd999aac5928199c7cd5dc7da2d93d7a58891a908\",\"license\":\"MIT\"},\"contracts/interfaces/IPropelBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface IPropelBase {\\n\\tfunction DECIMAL_PRECISION() external view returns (uint256);\\n\\n\\t// Critical system collateral ratio. If the system's total collateral ratio (TCR) falls below the CCR, Recovery Mode is triggered.\\n\\tfunction CCR() external view returns (uint256); // 150%\\n\\n\\t// Amount of debt to be locked in gas pool on opening troves\\n\\tfunction DEBT_GAS_COMPENSATION() external view returns (uint256);\\n\\n\\tfunction PERCENT_DIVISOR() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xcf4433a83eb57f68ce98b33c442abde5420e6e4cede255cfa41680fc5c2808b8\",\"license\":\"MIT\"},\"contracts/interfaces/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface IPyth {\\n\\tstruct Price {\\n\\t\\t// Price\\n\\t\\tint64 price;\\n\\t\\t// Confidence interval around the price\\n\\t\\tuint64 conf;\\n\\t\\t// Price exponent\\n\\t\\tint32 expo;\\n\\t\\t// Unix timestamp describing when the price was published\\n\\t\\tuint publishTime;\\n\\t}\\n\\n\\tfunction getPrice(bytes32 id) external view returns (Price memory);\\n\\n\\tfunction getPriceUnsafe(bytes32 id) external view returns (Price memory price);\\n}\\n\",\"keccak256\":\"0xfd589468ff2885c85543d89042b18e7801be77d8586bddf27481830fb233bd01\",\"license\":\"MIT\"},\"contracts/interfaces/ISortedTroves.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\ninterface ISortedTroves {\\n\\tevent NodeAdded(address _id, uint256 _NICR);\\n\\tevent NodeRemoved(address _id);\\n\\n\\tfunction insert(address _id, uint256 _NICR, address _prevId, address _nextId) external;\\n\\n\\tfunction reInsert(address _id, uint256 _newNICR, address _prevId, address _nextId) external;\\n\\n\\tfunction remove(address _id) external;\\n\\n\\tfunction setAddresses(address _troveManagerAddress) external;\\n\\n\\tfunction contains(address _id) external view returns (bool);\\n\\n\\tfunction data() external view returns (address head, address tail, uint256 size);\\n\\n\\tfunction findInsertPosition(uint256 _NICR, address _prevId, address _nextId) external view returns (address, address);\\n\\n\\tfunction getFirst() external view returns (address);\\n\\n\\tfunction getLast() external view returns (address);\\n\\n\\tfunction getNext(address _id) external view returns (address);\\n\\n\\tfunction getPrev(address _id) external view returns (address);\\n\\n\\tfunction getSize() external view returns (uint256);\\n\\n\\tfunction isEmpty() external view returns (bool);\\n\\n\\tfunction troveManager() external view returns (address);\\n\\n\\tfunction validInsertPosition(uint256 _NICR, address _prevId, address _nextId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x568f6029aad06d63866b67a30cddcb6ca716b5163aac714d847189d09a2aaf31\",\"license\":\"MIT\"},\"contracts/interfaces/IStabilityPool.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStabilityPool {\\n\\tevent CollateralGainWithdrawn(address indexed _depositor, uint256[] _collateral);\\n\\tevent CollateralOverwritten(address oldCollateral, address newCollateral);\\n\\tevent DepositSnapshotUpdated(address indexed _depositor, uint256 _P, uint256 _G);\\n\\tevent EpochUpdated(uint128 _currentEpoch);\\n\\tevent G_Updated(uint256 _G, uint128 _epoch, uint128 _scale);\\n\\tevent P_Updated(uint256 _P);\\n\\tevent RewardClaimed(address indexed account, address indexed recipient, uint256 claimed);\\n\\tevent S_Updated(uint256 idx, uint256 _S, uint128 _epoch, uint128 _scale);\\n\\tevent ScaleUpdated(uint128 _currentScale);\\n\\tevent StabilityPoolPropelUSDBalanceUpdated(uint256 _newBalance);\\n\\tevent UserDepositChanged(address indexed _depositor, uint256 _newDeposit);\\n\\n\\t// function claimCollateralGains(address recipient, uint256[] calldata collateralIndexes) external;\\n\\n\\t// function claimReward(address recipient) external returns (uint256 amount);\\n\\n\\tfunction enableCollateral(IERC20 _collateral) external;\\n\\n\\tfunction offset(IERC20 collateral, uint256 _debtToOffset, uint256 _collToAdd) external;\\n\\n\\tfunction provideToSP(uint256 _amount) external;\\n\\n\\tfunction startCollateralSunset(IERC20 collateral) external;\\n\\n\\tfunction withdrawFromSP(uint256 _amount) external;\\n\\n\\tfunction DECIMAL_PRECISION() external view returns (uint256);\\n\\n\\tfunction P() external view returns (uint256);\\n\\n\\tfunction SCALE_FACTOR() external view returns (uint256);\\n\\n\\tfunction SUNSET_DURATION() external view returns (uint128);\\n\\n\\tfunction claimableReward(address _depositor) external view returns (uint256);\\n\\n\\tfunction currentEpoch() external view returns (uint128);\\n\\n\\tfunction currentScale() external view returns (uint128);\\n\\n\\tfunction depositSnapshots(address) external view returns (uint256 P, uint256 G, uint128 scale, uint128 epoch);\\n\\n\\tfunction depositSums(address, uint256) external view returns (uint256);\\n\\n\\tfunction epochToScaleToG(uint128, uint128) external view returns (uint256);\\n\\n\\tfunction epochToScaleToSums(uint128, uint128, uint256) external view returns (uint256);\\n\\n\\tfunction factory() external view returns (address);\\n\\n\\tfunction getCompoundedDeposit(address _depositor) external view returns (uint256);\\n\\n\\tfunction getDepositorCollateralGain(address _depositor) external view returns (uint256[] memory collateralGains);\\n\\n\\tfunction getTotalPropelUSDDeposits() external view returns (uint256);\\n\\n\\tfunction lastDebtLossError_Offset() external view returns (uint256);\\n\\n\\tfunction lastEsPropelError() external view returns (uint256);\\n\\n\\tfunction liquidationManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0x1fcbdf3288009aff76361862f1c0b0131d4c338c04781ece3a6cab426dbc3946\",\"license\":\"MIT\"},\"contracts/interfaces/ITroveManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"./IPropelBase.sol\\\";\\nimport \\\"./ISortedTroves.sol\\\";\\nimport \\\"./IPriceFeed.sol\\\";\\n\\ninterface ITroveManager is IPropelBase {\\n\\t// Store the necessary data for a trove\\n\\tstruct Trove {\\n\\t\\tuint256 debt;\\n\\t\\tuint256 coll;\\n\\t\\tuint256 stake;\\n\\t\\tStatus status;\\n\\t\\tuint128 arrayIndex;\\n\\t}\\n\\n\\tstruct RedemptionTotals {\\n\\t\\tuint256 remainingDebt;\\n\\t\\tuint256 totalDebtToRedeem;\\n\\t\\tuint256 totalCollateralDrawn;\\n\\t\\tuint256 totalInterest;\\n\\t\\tuint256 collateralFee;\\n\\t\\tuint256 collateralToSendToRedeemer;\\n\\t\\tuint256 decayedBaseRate;\\n\\t\\tuint256 price;\\n\\t\\tuint256 totalDebtSupplyAtStart;\\n\\t}\\n\\n\\tstruct SingleRedemptionValues {\\n\\t\\tuint256 debtLot;\\n\\t\\tuint256 collateralLot;\\n\\t\\tuint256 interestLot;\\n\\t\\tbool cancelledPartial;\\n\\t}\\n\\n\\t// Object containing the collateral and debt snapshots for a given active trove\\n\\tstruct RewardSnapshot {\\n\\t\\tuint256 collateral;\\n\\t\\tuint256 debt;\\n\\t\\tuint256 interest;\\n\\t}\\n\\n\\tenum TroveManagerOperation {\\n\\t\\tapplyPendingRewards,\\n\\t\\tliquidateInNormalMode,\\n\\t\\tliquidateInRecoveryMode,\\n\\t\\tredeemCollateral\\n\\t}\\n\\n\\tenum Status {\\n\\t\\tnonExistent,\\n\\t\\tactive,\\n\\t\\tclosedByOwner,\\n\\t\\tclosedByLiquidation,\\n\\t\\tclosedByRedemption\\n\\t}\\n\\n\\tevent InsterstPaid(address _account, address _borrower, uint256 _interest);\\n\\tevent TroveUpdated(address indexed _borrower, uint256 _debt, uint256 _coll, uint256 _stake, TroveManagerOperation _operation);\\n\\tevent Redemption(uint256 _attemptedDebtAmount, uint256 _actualDebtAmount, uint256 _collateralSent, uint256 _InterestDebt, uint256 _collateralFee);\\n\\tevent BaseRateUpdated(uint256 _baseRate);\\n\\tevent LastFeeOpTimeUpdated(uint256 _lastFeeOpTime);\\n\\tevent TotalStakesUpdated(uint256 _newTotalStakes);\\n\\tevent SystemSnapshotsUpdated(uint256 _totalStakesSnapshot, uint256 _totalCollateralSnapshot);\\n\\tevent LTermsUpdated(uint256 _L_collateral, uint256 _L_debt);\\n\\tevent TroveSnapshotsUpdated(uint256 _L_collateral, uint256 _L_debt, uint256 _L_Interest_Debt);\\n\\tevent TroveIndexUpdated(address _borrower, uint256 _newIndex);\\n\\tevent CollateralSent(address _to, uint256 _amount);\\n\\tevent RewardClaimed(address indexed account, address indexed recipient, uint256 claimed);\\n\\n\\tfunction addCollateralSurplus(address borrower, uint256 collSurplus) external;\\n\\n\\tfunction applyPendingRewards(address _borrower) external returns (uint256 coll, uint256 debt);\\n\\n\\tfunction claimCollateral(address _receiver) external;\\n\\n\\tfunction closeTrove(address _borrower, address _receiver, uint256 collAmount, uint256 debtAmount) external;\\n\\n\\tfunction closeTroveByLiquidation(address _borrower) external;\\n\\n\\tfunction decayBaseRateAndGetBorrowingFee(uint256 _debt) external returns (uint256);\\n\\n\\tfunction decreaseDebtAndSendCollateral(address account, uint256 debt, uint256 coll) external;\\n\\n\\tfunction finalizeLiquidation(address _liquidator, uint256 _debt, uint256 _coll, uint256 _collSurplus, uint256 _debtGasComp, uint256 _collGasComp, uint256 _interest) external;\\n\\n\\tfunction getEntireSystemBalances() external returns (uint256, uint256, uint256);\\n\\n\\tfunction movePendingTroveRewardsToActiveBalances(uint256 _debt, uint256 _collateral) external;\\n\\n\\tfunction openTrove(address _borrower, uint256 _collateralAmount, uint256 _compositeDebt, uint256 NICR, address _upperHint, address _lowerHint) external returns (uint256 stake, uint256 arrayIndex);\\n\\n\\tfunction redeemCollateral(uint256 _debtAmount, address _firstRedemptionHint, address _upperPartialRedemptionHint, address _lowerPartialRedemptionHint, uint256 _partialRedemptionHintNICR, uint256 _maxIterations, uint256 _maxFeePercentage) external;\\n\\n\\tfunction setAddresses(address _priceFeedAddress, address _sortedTrovesAddress, IERC20 _collateralToken) external;\\n\\n\\tfunction setParameters(uint256 _minuteDecayFactor, uint256 _redemptionFeeFloor, uint256 _maxRedemptionFee, uint256 _borrowingFeeFloor, uint256 _maxBorrowingFee, uint256 _maxSystemDebt, uint256 _MCR, uint32 _interestRate) external;\\n\\n\\tfunction setPaused(bool _paused) external;\\n\\n\\tfunction setPriceFeed(address _priceFeedAddress) external;\\n\\n\\tfunction updateTroveFromAdjustment(bool _isDebtIncrease, uint256 _debtChange, uint256 _netDebtChange, bool _isCollIncrease, uint256 _collChange, address _upperHint, address _lowerHint, address _borrower, address _receiver) external returns (uint256, uint256, uint256);\\n\\n\\tfunction fetchPrice() external returns (uint256);\\n\\n\\tfunction distributeInterestDebt() external returns (uint256);\\n\\n\\tfunction repayInterest(address _account, address _borrower, uint256 _debt) external;\\n\\n\\tfunction BOOTSTRAP_PERIOD() external view returns (uint256);\\n\\n\\tfunction L_collateral() external view returns (uint256);\\n\\n\\tfunction L_debt() external view returns (uint256);\\n\\n\\tfunction MCR() external view returns (uint256);\\n\\n\\tfunction getTrove(address _borrower) external view returns (Trove memory);\\n\\n\\tfunction baseRate() external view returns (uint256);\\n\\n\\tfunction borrowerOperationsAddress() external view returns (address);\\n\\n\\tfunction borrowingFeeFloor() external view returns (uint256);\\n\\n\\tfunction collateralToken() external view returns (IERC20);\\n\\n\\tfunction defaultedCollateral() external view returns (uint256);\\n\\n\\tfunction defaultedDebt() external view returns (uint256);\\n\\n\\tfunction getBorrowingFee(uint256 _debt) external view returns (uint256);\\n\\n\\tfunction getBorrowingFeeWithDecay(uint256 _debt) external view returns (uint256);\\n\\n\\tfunction getBorrowingRate() external view returns (uint256);\\n\\n\\tfunction getBorrowingRateWithDecay() external view returns (uint256);\\n\\n\\tfunction getCurrentICR(address _borrower, uint256 _price) external view returns (uint256);\\n\\n\\tfunction getEntireDebtAndColl(address _borrower) external view returns (uint256 debt, uint256 coll, uint256 pendingDebtReward, uint256 pendingCollateralReward);\\n\\n\\tfunction getEntireSystemColl() external view returns (uint256);\\n\\n\\tfunction getEntireSystemDebt() external view returns (uint256);\\n\\n\\tfunction getGlobalSystemDebt() external view returns (uint256);\\n\\n\\tfunction getTroveInterest(address _borrower, uint256 _debt) external view returns (uint256);\\n\\n\\tfunction getRedemptionICR(address _borrower, uint256 _price) external view returns (uint256);\\n\\n\\tfunction getNominalICR(address _borrower) external view returns (uint256);\\n\\n\\tfunction getPendingCollAndDebtRewards(address _borrower) external view returns (uint256, uint256);\\n\\n\\tfunction getRedemptionFeeWithDecay(uint256 _collateralDrawn) external view returns (uint256);\\n\\n\\tfunction getRedemptionRate() external view returns (uint256);\\n\\n\\tfunction getRedemptionRateWithDecay() external view returns (uint256);\\n\\n\\tfunction getTotalActiveCollateral() external view returns (uint256);\\n\\n\\tfunction getTotalActiveDebt() external view returns (uint256);\\n\\n\\tfunction getTroveCollAndDebt(address _borrower) external view returns (uint256 coll, uint256 debt);\\n\\n\\tfunction getTroveFromTroveOwnersArray(uint256 _index) external view returns (address);\\n\\n\\tfunction getTroveOwnersCount() external view returns (uint256);\\n\\n\\tfunction getTroveStake(address _borrower) external view returns (uint256);\\n\\n\\tfunction getTroveStatus(address _borrower) external view returns (uint256);\\n\\n\\tfunction hasPendingRewards(address _borrower) external view returns (bool);\\n\\n\\tfunction lastCollateralError_Redistribution() external view returns (uint256);\\n\\n\\tfunction lastDebtError_Redistribution() external view returns (uint256);\\n\\n\\tfunction lastFeeOperationTime() external view returns (uint256);\\n\\n\\tfunction liquidationManager() external view returns (address);\\n\\n\\tfunction maxBorrowingFee() external view returns (uint256);\\n\\n\\tfunction maxRedemptionFee() external view returns (uint256);\\n\\n\\tfunction maxSystemDebt() external view returns (uint256);\\n\\n\\tfunction minuteDecayFactor() external view returns (uint256);\\n\\n\\tfunction paused() external view returns (bool);\\n\\n\\tfunction redemptionFeeFloor() external view returns (uint256);\\n\\n\\tfunction getRewardSnapshots(address) external view returns (RewardSnapshot memory);\\n\\n\\tfunction priceFeed() external view returns (IPriceFeed);\\n\\n\\tfunction sortedTroves() external view returns (ISortedTroves);\\n\\n\\tfunction sunsetting() external view returns (bool);\\n\\n\\tfunction surplusBalances(address) external view returns (uint256);\\n\\n\\tfunction systemDeploymentTime() external view returns (uint256);\\n\\n\\tfunction totalCollateralSnapshot() external view returns (uint256);\\n\\n\\tfunction totalStakes() external view returns (uint256);\\n\\n\\tfunction totalStakesSnapshot() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x489a259e79e6b4ba4d57177d8b4576487645b00ca324c9d1ae50301abfc939a8\",\"license\":\"MIT\"}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051610f72380380610f7283398101604081905261002f91610089565b600080546001600160a01b039485166001600160a01b0319918216179091556001805493851693821693909317909255600280549190931691161790556100d6565b6001600160a01b038116811461008657600080fd5b50565b60008060006060848603121561009e57600080fd5b83516100a981610071565b60208501519093506100ba81610071565b60408501519092506100cb81610071565b809150509250925092565b610e8d806100e56000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631bab58f514610051578063500d684714610142578063cdb314d31461016d578063e1dadf3b14610180575b600080fd5b61006461005f366004610cd9565b610193565b6040516101399190815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018080830151908201526101a080830151908201526101c080830151908201526101e080830151908201526102008083015190820152610220808301519082015261024091820151918101919091526102600190565b60405180910390f35b600054610155906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b600154610155906001600160a01b031681565b600254610155906001600160a01b031681565b610228604051806102600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001546040517f2b2b2bac0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015290911690632b2b2bac906024016040805180830381865afa15801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae9190610d09565b602083018190529082526001546040517f55ca38cf0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201939093529116906355ca38cf90604401602060405180830381865afa158015610322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103469190610d2d565b60408083019190915260015481517f2f5c83a800000000000000000000000000000000000000000000000000000000815291516001600160a01b0390911691632f5c83a89160048083019260209291908290030181865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610d2d565b610100820152600154604080517f794e572400000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163794e5724916004808201926020929091908290030181865afa15801561043c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610d2d565b6060820152600154604080517f5733d58f00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691635733d58f916004808201926020929091908290030181865afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec9190610d2d565b60a082015260008054604080517fb620115d00000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263b620115d9260048084019360209390839003909101908290875af1158015610557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057b9190610d2d565b60c0820152600154604080517f0fdb11cf00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691630fdb11cf9160048082019260209290919082900301816000875af11580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610d2d565b60e082018190526001546040517fd293c7100000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482019390935291169063d293c71090604401602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190610d2d565b6080820152600154604080517f795d26c300000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163795d26c3916004808201926020929091908290030181865afa158015610706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072a9190610d2d565b610120820152600154604080517f887105d300000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163887105d3916004808201926020929091908290030181865afa158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b79190610d2d565b610140820152600154604080517fc35bc55000000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163c35bc550916004808201926020929091908290030181865afa158015610820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108449190610d2d565b600160009054906101000a90046001600160a01b03166001600160a01b031663720fbe2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bb9190610d2d565b6108c59190610d46565b610160820152600154604080517fc52861f200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163c52861f2916004808201926020929091908290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190610d2d565b610180820152600154604080517f66ca4a2100000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216916366ca4a21916004808201926020929091908290030181865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190610d2d565b6101a08201526001546040517f21e378010000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152909116906321e3780190602401602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c9190610d2d565b6101c08201526001546040517fec38a05d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063ec38a05d90602401602060405180830381865afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190610d2d565b6101e0820152600254604080517e2dade900000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691622dade9916004808201926020929091908290030181865afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b849190610d2d565b6102008201526002546040517f307d36120000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600092169063307d361290602401600060405180830381865afa158015610bee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c169190810190610d83565b805190915015610c465780600081518110610c3357610c33610e41565b6020026020010151826102200181815250505b6002546040517fe95034250000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063e950342590602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190610d2d565b61024083015250919050565b600060208284031215610ceb57600080fd5b81356001600160a01b0381168114610d0257600080fd5b9392505050565b60008060408385031215610d1c57600080fd5b505080516020909101519092909150565b600060208284031215610d3f57600080fd5b5051919050565b80820180821115610d6757634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610d9657600080fd5b825167ffffffffffffffff80821115610dae57600080fd5b818501915085601f830112610dc257600080fd5b815181811115610dd457610dd4610d6d565b8060051b604051601f19603f83011681018181108582111715610df957610df9610d6d565b604052918252848201925083810185019188831115610e1757600080fd5b938501935b82851015610e3557845184529385019392850192610e1c565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202b5c8f31efd183dbfa6f20b29d4f076368aad983fb4fc6ad6b4c5148a93b48a864736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631bab58f514610051578063500d684714610142578063cdb314d31461016d578063e1dadf3b14610180575b600080fd5b61006461005f366004610cd9565b610193565b6040516101399190815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018080830151908201526101a080830151908201526101c080830151908201526101e080830151908201526102008083015190820152610220808301519082015261024091820151918101919091526102600190565b60405180910390f35b600054610155906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b600154610155906001600160a01b031681565b600254610155906001600160a01b031681565b610228604051806102600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001546040517f2b2b2bac0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015290911690632b2b2bac906024016040805180830381865afa15801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae9190610d09565b602083018190529082526001546040517f55ca38cf0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201939093529116906355ca38cf90604401602060405180830381865afa158015610322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103469190610d2d565b60408083019190915260015481517f2f5c83a800000000000000000000000000000000000000000000000000000000815291516001600160a01b0390911691632f5c83a89160048083019260209291908290030181865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610d2d565b610100820152600154604080517f794e572400000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163794e5724916004808201926020929091908290030181865afa15801561043c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104609190610d2d565b6060820152600154604080517f5733d58f00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691635733d58f916004808201926020929091908290030181865afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec9190610d2d565b60a082015260008054604080517fb620115d00000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263b620115d9260048084019360209390839003909101908290875af1158015610557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057b9190610d2d565b60c0820152600154604080517f0fdb11cf00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691630fdb11cf9160048082019260209290919082900301816000875af11580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106099190610d2d565b60e082018190526001546040517fd293c7100000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482019390935291169063d293c71090604401602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190610d2d565b6080820152600154604080517f795d26c300000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163795d26c3916004808201926020929091908290030181865afa158015610706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072a9190610d2d565b610120820152600154604080517f887105d300000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163887105d3916004808201926020929091908290030181865afa158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b79190610d2d565b610140820152600154604080517fc35bc55000000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163c35bc550916004808201926020929091908290030181865afa158015610820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108449190610d2d565b600160009054906101000a90046001600160a01b03166001600160a01b031663720fbe2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bb9190610d2d565b6108c59190610d46565b610160820152600154604080517fc52861f200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163c52861f2916004808201926020929091908290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190610d2d565b610180820152600154604080517f66ca4a2100000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216916366ca4a21916004808201926020929091908290030181865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190610d2d565b6101a08201526001546040517f21e378010000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152909116906321e3780190602401602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c9190610d2d565b6101c08201526001546040517fec38a05d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063ec38a05d90602401602060405180830381865afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190610d2d565b6101e0820152600254604080517e2dade900000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691622dade9916004808201926020929091908290030181865afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b849190610d2d565b6102008201526002546040517f307d36120000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600092169063307d361290602401600060405180830381865afa158015610bee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c169190810190610d83565b805190915015610c465780600081518110610c3357610c33610e41565b6020026020010151826102200181815250505b6002546040517fe95034250000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063e950342590602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190610d2d565b61024083015250919050565b600060208284031215610ceb57600080fd5b81356001600160a01b0381168114610d0257600080fd5b9392505050565b60008060408385031215610d1c57600080fd5b505080516020909101519092909150565b600060208284031215610d3f57600080fd5b5051919050565b80820180821115610d6757634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610d9657600080fd5b825167ffffffffffffffff80821115610dae57600080fd5b818501915085601f830112610dc257600080fd5b815181811115610dd457610dd4610d6d565b8060051b604051601f19603f83011681018181108582111715610df957610df9610d6d565b604052918252848201925083810185019188831115610e1757600080fd5b938501935b82851015610e3557845184529385019392850192610e1c565b98975050505050505050565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202b5c8f31efd183dbfa6f20b29d4f076368aad983fb4fc6ad6b4c5148a93b48a864736f6c63430008130033",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 86,
        "contract": "contracts/helpers/TroveState.sol:TroveState",
        "label": "bo",
        "offset": 0,
        "slot": "0",
        "type": "t_contract(IBorrowerOperations)568"
      },
      {
        "astId": 89,
        "contract": "contracts/helpers/TroveState.sol:TroveState",
        "label": "tm",
        "offset": 0,
        "slot": "1",
        "type": "t_contract(ITroveManager)1712"
      },
      {
        "astId": 92,
        "contract": "contracts/helpers/TroveState.sol:TroveState",
        "label": "sp",
        "offset": 0,
        "slot": "2",
        "type": "t_contract(IStabilityPool)1028"
      }
    ],
    "types": {
      "t_contract(IBorrowerOperations)568": {
        "encoding": "inplace",
        "label": "contract IBorrowerOperations",
        "numberOfBytes": "20"
      },
      "t_contract(IStabilityPool)1028": {
        "encoding": "inplace",
        "label": "contract IStabilityPool",
        "numberOfBytes": "20"
      },
      "t_contract(ITroveManager)1712": {
        "encoding": "inplace",
        "label": "contract ITroveManager",
        "numberOfBytes": "20"
      }
    }
  }
}