pragma solidity >=0.4.24; import "../interfaces/ISynth.sol"; interface IIssuer { // Views function anySynthOrOKSRateIsStale() external view returns (bool anyRateStale); function availableCurrencyKeys() external view returns (bytes32[] memory); function availableSynthCount() external view returns (uint); function availableSynths(uint index) external view returns (ISynth); function burnSynthsForLiquidation( address burnForAddress, address liquidator, uint amount, uint existingDebt, uint totalDebtIssued ) external ; function canBurnSynths(address account) external view returns (bool); function collateral(address account) external view returns (uint); function collateralisationRatio(address issuer) external view returns (uint); function collateralisationRatioAndAnyRatesStale(address _issuer) external view returns (uint cratio, bool anyRateIsStale); function debtBalanceOf(address issuer, bytes32 currencyKey) external view returns (uint debtBalance); function debtBalanceOfAndTotalDebt(address _issuer) external view returns ( uint debtBalance, uint totalSystemValue, bool anyRateIsStale ); function lastIssueEvent(address account) external view returns (uint); function maxIssuableSynths(address issuer) external view returns (uint maxIssuable); function remainingIssuableSynths(address issuer) external view returns ( uint maxIssuable, uint alreadyIssued, uint totalSystemDebt ); function getSynths(bytes32[] calldata currencyKeys) external view returns (ISynth[] memory); function synths(bytes32 currencyKey) external view returns (ISynth); function synthsByAddress(address synthAddress) external view returns (bytes32); function totalIssuedSynths(bytes32 currencyKey, bool excludeEtherCollateral) external view returns (uint); function transferableOikosAndAnyRateIsStale(address account, uint balance) external view returns (uint transferable, bool anyRateIsStale); // Restricted: used internally to Oikos function issueSynths(address from, uint amount) external; function issueSynthsOnBehalf( address issueFor, address from, uint amount ) external; function issueMaxSynths(address from) external; function issueMaxSynthsOnBehalf(address issueFor, address from) external; function burnSynths(address from, uint amount) external; function burnSynthsOnBehalf( address burnForAddress, address from, uint amount ) external; function burnSynthsToTarget(address from) external; function burnSynthsToTargetOnBehalf(address burnForAddress, address from) external; function liquidateDelinquentAccount(address account, uint susdAmount, address liquidator) external returns (uint totalRedeemed, uint amountToLiquidate); }