Configurator
Deploy on AlchemyContract Information
This is the implementation of the Configurator contract, which can also be upgraded to support unforeseen changes to the protocol.
More Info
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;
import "./CometFactory.sol";
import "./CometConfiguration.sol";
import "./ConfiguratorStorage.sol";
contract Configurator is ConfiguratorStorage {
/** Custom events **/
event AddAsset(address indexed cometProxy, AssetConfig assetConfig);
event CometDeployed(address indexed cometProxy, address indexed newComet);
event GovernorTransferred(address indexed oldGovernor, address indexed newGovernor);
event SetFactory(address indexed cometProxy, address indexed oldFactory, address indexed newFactory);
event SetGovernor(address indexed cometProxy, address indexed oldGovernor, address indexed newGovernor);
event SetConfiguration(address indexed cometProxy, Configuration oldConfiguration, Configuration newConfiguration);
event SetPauseGuardian(address indexed cometProxy, address indexed oldPauseGuardian, address indexed newPauseGuardian);
event SetBaseTokenPriceFeed(address indexed cometProxy, address indexed oldBaseTokenPriceFeed, address indexed newBaseTokenPriceFeed);
event SetExtensionDelegate(address indexed cometProxy, address indexed oldExt, address indexed newExt);
event SetSupplyKink(address indexed cometProxy,uint64 oldKink, uint64 newKink);
event SetSupplyPerYearInterestRateSlopeLow(address indexed cometProxy,uint64 oldIRSlopeLow, uint64 newIRSlopeLow);
event SetSupplyPerYearInterestRateSlopeHigh(address indexed cometProxy,uint64 oldIRSlopeHigh, uint64 newIRSlopeHigh);
event SetSupplyPerYearInterestRateBase(address indexed cometProxy,uint64 oldIRBase, uint64 newIRBase);
event SetBorrowKink(address indexed cometProxy,uint64 oldKink, uint64 newKink);
event SetBorrowPerYearInterestRateSlopeLow(address indexed cometProxy,uint64 oldIRSlopeLow, uint64 newIRSlopeLow);
event SetBorrowPerYearInterestRateSlopeHigh(address indexed cometProxy,uint64 oldIRSlopeHigh, uint64 newIRSlopeHigh);
event SetBorrowPerYearInterestRateBase(address indexed cometProxy,uint64 oldIRBase, uint64 newIRBase);
event SetStoreFrontPriceFactor(address indexed cometProxy, uint64 oldStoreFrontPriceFactor, uint64 newStoreFrontPriceFactor);
event SetBaseTrackingSupplySpeed(address indexed cometProxy, uint64 oldBaseTrackingSupplySpeed, uint64 newBaseTrackingSupplySpeed);
event SetBaseTrackingBorrowSpeed(address indexed cometProxy, uint64 oldBaseTrackingBorrowSpeed, uint64 newBaseTrackingBorrowSpeed);
event SetBaseMinForRewards(address indexed cometProxy, uint104 oldBaseMinForRewards, uint104 newBaseMinForRewards);
event SetBaseBorrowMin(address indexed cometProxy, uint104 oldBaseBorrowMin, uint104 newBaseBorrowMin);
event SetTargetReserves(address indexed cometProxy, uint104 oldTargetReserves, uint104 newTargetReserves);
event UpdateAsset(address indexed cometProxy, AssetConfig oldAssetConfig, AssetConfig newAssetConfig);
event UpdateAssetPriceFeed(address indexed cometProxy, address indexed asset, address oldPriceFeed, address newPriceFeed);
event UpdateAssetBorrowCollateralFactor(address indexed cometProxy, address indexed asset, uint64 oldBorrowCF, uint64 newBorrowCF);
event UpdateAssetLiquidateCollateralFactor(address indexed cometProxy, address indexed asset, uint64 oldLiquidateCF, uint64 newLiquidateCF);
event UpdateAssetLiquidationFactor(address indexed cometProxy, address indexed asset, uint64 oldLiquidationFactor, uint64 newLiquidationFactor);
event UpdateAssetSupplyCap(address indexed cometProxy, address indexed asset, uint128 oldSupplyCap, uint128 newSupplyCap);
/** Custom errors **/
error AlreadyInitialized();
error AssetDoesNotExist();
error ConfigurationAlreadyExists();
error InvalidAddress();
error Unauthorized();
/**
* @notice Constructs a new Configurator instance
**/
constructor() {
// Set a high version to prevent the implementation contract from being initialized
version = type(uint256).max;
}
/**
* @notice Initializes the storage for Configurator
* @param governor_ The address of the governor
**/
function initialize(address governor_) public {
if (version != 0) revert AlreadyInitialized();
if (governor_ == address(0)) revert InvalidAddress();
governor = governor_;
version = 1;
}
/**
* @notice Sets the factory for a Comet proxy
* @dev Note: Only callable by governor
**/
function setFactory(address cometProxy, address newFactory) external {
if (msg.sender != governor) revert Unauthorized();
address oldFactory = factory[cometProxy];
factory[cometProxy] = newFactory;
emit SetFactory(cometProxy, oldFactory, newFactory);
}
/**
* @notice Sets the entire Configuration for a Comet proxy
* @dev Note: All params can later be updated by the governor except for `baseToken` and `trackingIndexScale`
**/
function setConfiguration(address cometProxy, Configuration calldata newConfiguration) external {
if (msg.sender != governor) revert Unauthorized();
Configuration memory oldConfiguration = configuratorParams[cometProxy];
if (oldConfiguration.baseToken != address(0) &&
(oldConfiguration.baseToken != newConfiguration.baseToken ||
oldConfiguration.trackingIndexScale != newConfiguration.trackingIndexScale))
revert ConfigurationAlreadyExists();
configuratorParams[cometProxy] = newConfiguration;
emit SetConfiguration(cometProxy, oldConfiguration, newConfiguration);
}
/** Governance setters for Comet-related configuration **/
function setGovernor(address cometProxy, address newGovernor) external {
if (msg.sender != governor) revert Unauthorized();
address oldGovernor = configuratorParams[cometProxy].governor;
configuratorParams[cometProxy].governor = newGovernor;
emit SetGovernor(cometProxy, oldGovernor, newGovernor);
}
function setPauseGuardian(address cometProxy, address newPauseGuardian) external {
if (msg.sender != governor) revert Unauthorized();
address oldPauseGuardian = configuratorParams[cometProxy].pauseGuardian;
configuratorParams[cometProxy].pauseGuardian = newPauseGuardian;
emit SetPauseGuardian(cometProxy, oldPauseGuardian, newPauseGuardian);
}
function setBaseTokenPriceFeed(address cometProxy, address newBaseTokenPriceFeed) external {
if (msg.sender != governor) revert Unauthorized();
address oldBaseTokenPriceFeed = configuratorParams[cometProxy].baseTokenPriceFeed;
configuratorParams[cometProxy].baseTokenPriceFeed = newBaseTokenPriceFeed;
emit SetBaseTokenPriceFeed(cometProxy, oldBaseTokenPriceFeed, newBaseTokenPriceFeed);
}
function setExtensionDelegate(address cometProxy, address newExtensionDelegate) external {
if (msg.sender != governor) revert Unauthorized();
address oldExtensionDelegate = configuratorParams[cometProxy].extensionDelegate;
configuratorParams[cometProxy].extensionDelegate = newExtensionDelegate;
emit SetExtensionDelegate(cometProxy, oldExtensionDelegate, newExtensionDelegate);
}
function setSupplyKink(address cometProxy, uint64 newSupplyKink) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldSupplyKink = configuratorParams[cometProxy].supplyKink;
configuratorParams[cometProxy].supplyKink = newSupplyKink;
emit SetSupplyKink(cometProxy, oldSupplyKink, newSupplyKink);
}
function setSupplyPerYearInterestRateSlopeLow(address cometProxy, uint64 newSlope) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldSlope = configuratorParams[cometProxy].supplyPerYearInterestRateSlopeLow;
configuratorParams[cometProxy].supplyPerYearInterestRateSlopeLow = newSlope;
emit SetSupplyPerYearInterestRateSlopeLow(cometProxy, oldSlope, newSlope);
}
function setSupplyPerYearInterestRateSlopeHigh(address cometProxy, uint64 newSlope) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldSlope = configuratorParams[cometProxy].supplyPerYearInterestRateSlopeHigh;
configuratorParams[cometProxy].supplyPerYearInterestRateSlopeHigh = newSlope;
emit SetSupplyPerYearInterestRateSlopeHigh(cometProxy, oldSlope, newSlope);
}
function setSupplyPerYearInterestRateBase(address cometProxy, uint64 newBase) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldBase = configuratorParams[cometProxy].supplyPerYearInterestRateBase;
configuratorParams[cometProxy].supplyPerYearInterestRateBase = newBase;
emit SetSupplyPerYearInterestRateBase(cometProxy, oldBase, newBase);
}
function setBorrowKink(address cometProxy, uint64 newBorrowKink) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldBorrowKink = configuratorParams[cometProxy].borrowKink;
configuratorParams[cometProxy].borrowKink = newBorrowKink;
emit SetBorrowKink(cometProxy, oldBorrowKink, newBorrowKink);
}
function setBorrowPerYearInterestRateSlopeLow(address cometProxy, uint64 newSlope) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldSlope = configuratorParams[cometProxy].borrowPerYearInterestRateSlopeLow;
configuratorParams[cometProxy].borrowPerYearInterestRateSlopeLow = newSlope;
emit SetBorrowPerYearInterestRateSlopeLow(cometProxy, oldSlope, newSlope);
}
function setBorrowPerYearInterestRateSlopeHigh(address cometProxy, uint64 newSlope) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldSlope = configuratorParams[cometProxy].borrowPerYearInterestRateSlopeHigh;
configuratorParams[cometProxy].borrowPerYearInterestRateSlopeHigh = newSlope;
emit SetBorrowPerYearInterestRateSlopeHigh(cometProxy, oldSlope, newSlope);
}
function setBorrowPerYearInterestRateBase(address cometProxy, uint64 newBase) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldBase = configuratorParams[cometProxy].borrowPerYearInterestRateBase;
configuratorParams[cometProxy].borrowPerYearInterestRateBase = newBase;
emit SetBorrowPerYearInterestRateBase(cometProxy, oldBase, newBase);
}
function setStoreFrontPriceFactor(address cometProxy, uint64 newStoreFrontPriceFactor) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldStoreFrontPriceFactor = configuratorParams[cometProxy].storeFrontPriceFactor;
configuratorParams[cometProxy].storeFrontPriceFactor = newStoreFrontPriceFactor;
emit SetStoreFrontPriceFactor(cometProxy, oldStoreFrontPriceFactor, newStoreFrontPriceFactor);
}
function setBaseTrackingSupplySpeed(address cometProxy, uint64 newBaseTrackingSupplySpeed) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldBaseTrackingSupplySpeed = configuratorParams[cometProxy].baseTrackingSupplySpeed;
configuratorParams[cometProxy].baseTrackingSupplySpeed = newBaseTrackingSupplySpeed;
emit SetBaseTrackingSupplySpeed(cometProxy, oldBaseTrackingSupplySpeed, newBaseTrackingSupplySpeed);
}
function setBaseTrackingBorrowSpeed(address cometProxy, uint64 newBaseTrackingBorrowSpeed) external {
if (msg.sender != governor) revert Unauthorized();
uint64 oldBaseTrackingBorrowSpeed = configuratorParams[cometProxy].baseTrackingBorrowSpeed;
configuratorParams[cometProxy].baseTrackingBorrowSpeed = newBaseTrackingBorrowSpeed;
emit SetBaseTrackingBorrowSpeed(cometProxy, oldBaseTrackingBorrowSpeed, newBaseTrackingBorrowSpeed);
}
function setBaseMinForRewards(address cometProxy, uint104 newBaseMinForRewards) external {
if (msg.sender != governor) revert Unauthorized();
uint104 oldBaseMinForRewards = configuratorParams[cometProxy].baseMinForRewards;
configuratorParams[cometProxy].baseMinForRewards = newBaseMinForRewards;
emit SetBaseMinForRewards(cometProxy, oldBaseMinForRewards, newBaseMinForRewards);
}
function setBaseBorrowMin(address cometProxy, uint104 newBaseBorrowMin) external {
if (msg.sender != governor) revert Unauthorized();
uint104 oldBaseBorrowMin = configuratorParams[cometProxy].baseBorrowMin;
configuratorParams[cometProxy].baseBorrowMin = newBaseBorrowMin;
emit SetBaseBorrowMin(cometProxy, oldBaseBorrowMin, newBaseBorrowMin);
}
function setTargetReserves(address cometProxy, uint104 newTargetReserves) external {
if (msg.sender != governor) revert Unauthorized();
uint104 oldTargetReserves = configuratorParams[cometProxy].targetReserves;
configuratorParams[cometProxy].targetReserves = newTargetReserves;
emit SetTargetReserves(cometProxy, oldTargetReserves, newTargetReserves);
}
function addAsset(address cometProxy, AssetConfig calldata assetConfig) external {
if (msg.sender != governor) revert Unauthorized();
configuratorParams[cometProxy].assetConfigs.push(assetConfig);
emit AddAsset(cometProxy, assetConfig);
}
function updateAsset(address cometProxy, AssetConfig calldata newAssetConfig) external {
if (msg.sender != governor) revert Unauthorized();
uint assetIndex = getAssetIndex(cometProxy, newAssetConfig.asset);
AssetConfig memory oldAssetConfig = configuratorParams[cometProxy].assetConfigs[assetIndex];
configuratorParams[cometProxy].assetConfigs[assetIndex] = newAssetConfig;
emit UpdateAsset(cometProxy, oldAssetConfig, newAssetConfig);
}
function updateAssetPriceFeed(address cometProxy, address asset, address newPriceFeed) external {
if (msg.sender != governor) revert Unauthorized();
uint assetIndex = getAssetIndex(cometProxy, asset);
address oldPriceFeed = configuratorParams[cometProxy].assetConfigs[assetIndex].priceFeed;
configuratorParams[cometProxy].assetConfigs[assetIndex].priceFeed = newPriceFeed;
emit UpdateAssetPriceFeed(cometProxy, asset, oldPriceFeed, newPriceFeed);
}
function updateAssetBorrowCollateralFactor(address cometProxy, address asset, uint64 newBorrowCF) external {
if (msg.sender != governor) revert Unauthorized();
uint assetIndex = getAssetIndex(cometProxy, asset);
uint64 oldBorrowCF = configuratorParams[cometProxy].assetConfigs[assetIndex].borrowCollateralFactor;
configuratorParams[cometProxy].assetConfigs[assetIndex].borrowCollateralFactor = newBorrowCF;
emit UpdateAssetBorrowCollateralFactor(cometProxy, asset, oldBorrowCF, newBorrowCF);
}
function updateAssetLiquidateCollateralFactor(address cometProxy, address asset, uint64 newLiquidateCF) external {
if (msg.sender != governor) revert Unauthorized();
uint assetIndex = getAssetIndex(cometProxy, asset);
uint64 oldLiquidateCF = configuratorParams[cometProxy].assetConfigs[assetIndex].liquidateCollateralFactor;
configuratorParams[cometProxy].assetConfigs[assetIndex].liquidateCollateralFactor = newLiquidateCF;
emit UpdateAssetLiquidateCollateralFactor(cometProxy, asset, oldLiquidateCF, newLiquidateCF);
}
function updateAssetLiquidationFactor(address cometProxy, address asset, uint64 newLiquidationFactor) external {
if (msg.sender != governor) revert Unauthorized();
uint assetIndex = getAssetIndex(cometProxy, asset);
uint64 oldLiquidationFactor = configuratorParams[cometProxy].assetConfigs[assetIndex].liquidationFactor;
configuratorParams[cometProxy].assetConfigs[assetIndex].liquidationFactor = newLiquidationFactor;
emit UpdateAssetLiquidationFactor(cometProxy, asset, oldLiquidationFactor, newLiquidationFactor);
}
function updateAssetSupplyCap(address cometProxy, address asset, uint128 newSupplyCap) external {
if (msg.sender != governor) revert Unauthorized();
uint assetIndex = getAssetIndex(cometProxy, asset);
uint128 oldSupplyCap = configuratorParams[cometProxy].assetConfigs[assetIndex].supplyCap;
configuratorParams[cometProxy].assetConfigs[assetIndex].supplyCap = newSupplyCap;
emit UpdateAssetSupplyCap(cometProxy, asset, oldSupplyCap, newSupplyCap);
}
/** Other helpers **/
/**
* @dev Determine index of asset that matches given address
*/
function getAssetIndex(address cometProxy, address asset) public view returns (uint) {
AssetConfig[] memory assetConfigs = configuratorParams[cometProxy].assetConfigs;
uint numAssets = assetConfigs.length;
for (uint i = 0; i < numAssets; ) {
if (assetConfigs[i].asset == asset) {
return i;
}
unchecked { i++; }
}
revert AssetDoesNotExist();
}
/**
* @return The currently configured params for a Comet proxy
**/
function getConfiguration(address cometProxy) external view returns (Configuration memory) {
return configuratorParams[cometProxy];
}
/**
* @notice Deploy a new Comet implementation using the factory and Configuration for that Comet proxy
* @dev Note: Callable by anyone
*/
function deploy(address cometProxy) external returns (address) {
address newComet = CometFactory(factory[cometProxy]).clone(configuratorParams[cometProxy]);
emit CometDeployed(cometProxy, newComet);
return newComet;
}
/**
* @notice Transfers the governor rights to a new address
*/
function transferGovernor(address newGovernor) external {
if (msg.sender != governor) revert Unauthorized();
address oldGovernor = governor;
governor = newGovernor;
emit GovernorTransferred(oldGovernor, newGovernor);
}
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"AssetDoesNotExist","type":"error"},{"inputs":[],"name":"ConfigurationAlreadyExists","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"indexed":false,"internalType":"struct CometConfiguration.AssetConfig","name":"assetConfig","type":"tuple"}],"name":"AddAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"newComet","type":"address"}],"name":"CometDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint104","name":"oldBaseBorrowMin","type":"uint104"},{"indexed":false,"internalType":"uint104","name":"newBaseBorrowMin","type":"uint104"}],"name":"SetBaseBorrowMin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint104","name":"oldBaseMinForRewards","type":"uint104"},{"indexed":false,"internalType":"uint104","name":"newBaseMinForRewards","type":"uint104"}],"name":"SetBaseMinForRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldBaseTokenPriceFeed","type":"address"},{"indexed":true,"internalType":"address","name":"newBaseTokenPriceFeed","type":"address"}],"name":"SetBaseTokenPriceFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldBaseTrackingBorrowSpeed","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newBaseTrackingBorrowSpeed","type":"uint64"}],"name":"SetBaseTrackingBorrowSpeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldBaseTrackingSupplySpeed","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newBaseTrackingSupplySpeed","type":"uint64"}],"name":"SetBaseTrackingSupplySpeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldKink","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newKink","type":"uint64"}],"name":"SetBorrowKink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRBase","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRBase","type":"uint64"}],"name":"SetBorrowPerYearInterestRateBase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeHigh","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeHigh","type":"uint64"}],"name":"SetBorrowPerYearInterestRateSlopeHigh","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeLow","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeLow","type":"uint64"}],"name":"SetBorrowPerYearInterestRateSlopeLow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"indexed":false,"internalType":"struct CometConfiguration.Configuration","name":"oldConfiguration","type":"tuple"},{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"indexed":false,"internalType":"struct CometConfiguration.Configuration","name":"newConfiguration","type":"tuple"}],"name":"SetConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldExt","type":"address"},{"indexed":true,"internalType":"address","name":"newExt","type":"address"}],"name":"SetExtensionDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldFactory","type":"address"},{"indexed":true,"internalType":"address","name":"newFactory","type":"address"}],"name":"SetFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"SetGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldPauseGuardian","type":"address"},{"indexed":true,"internalType":"address","name":"newPauseGuardian","type":"address"}],"name":"SetPauseGuardian","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldStoreFrontPriceFactor","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newStoreFrontPriceFactor","type":"uint64"}],"name":"SetStoreFrontPriceFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldKink","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newKink","type":"uint64"}],"name":"SetSupplyKink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRBase","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRBase","type":"uint64"}],"name":"SetSupplyPerYearInterestRateBase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeHigh","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeHigh","type":"uint64"}],"name":"SetSupplyPerYearInterestRateSlopeHigh","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeLow","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeLow","type":"uint64"}],"name":"SetSupplyPerYearInterestRateSlopeLow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint104","name":"oldTargetReserves","type":"uint104"},{"indexed":false,"internalType":"uint104","name":"newTargetReserves","type":"uint104"}],"name":"SetTargetReserves","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"indexed":false,"internalType":"struct CometConfiguration.AssetConfig","name":"oldAssetConfig","type":"tuple"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"indexed":false,"internalType":"struct CometConfiguration.AssetConfig","name":"newAssetConfig","type":"tuple"}],"name":"UpdateAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldBorrowCF","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newBorrowCF","type":"uint64"}],"name":"UpdateAssetBorrowCollateralFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldLiquidateCF","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newLiquidateCF","type":"uint64"}],"name":"UpdateAssetLiquidateCollateralFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldLiquidationFactor","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newLiquidationFactor","type":"uint64"}],"name":"UpdateAssetLiquidationFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldPriceFeed","type":"address"},{"indexed":false,"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"UpdateAssetPriceFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint128","name":"oldSupplyCap","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newSupplyCap","type":"uint128"}],"name":"UpdateAssetSupplyCap","type":"event"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig","name":"assetConfig","type":"tuple"}],"name":"addAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"}],"name":"deploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"internalType":"struct CometConfiguration.Configuration","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint104","name":"newBaseBorrowMin","type":"uint104"}],"name":"setBaseBorrowMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint104","name":"newBaseMinForRewards","type":"uint104"}],"name":"setBaseMinForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newBaseTokenPriceFeed","type":"address"}],"name":"setBaseTokenPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBaseTrackingBorrowSpeed","type":"uint64"}],"name":"setBaseTrackingBorrowSpeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBaseTrackingSupplySpeed","type":"uint64"}],"name":"setBaseTrackingSupplySpeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBorrowKink","type":"uint64"}],"name":"setBorrowKink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBase","type":"uint64"}],"name":"setBorrowPerYearInterestRateBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setBorrowPerYearInterestRateSlopeHigh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setBorrowPerYearInterestRateSlopeLow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"internalType":"struct CometConfiguration.Configuration","name":"newConfiguration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newExtensionDelegate","type":"address"}],"name":"setExtensionDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newFactory","type":"address"}],"name":"setFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newGovernor","type":"address"}],"name":"setGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newPauseGuardian","type":"address"}],"name":"setPauseGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newStoreFrontPriceFactor","type":"uint64"}],"name":"setStoreFrontPriceFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSupplyKink","type":"uint64"}],"name":"setSupplyKink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBase","type":"uint64"}],"name":"setSupplyPerYearInterestRateBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setSupplyPerYearInterestRateSlopeHigh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setSupplyPerYearInterestRateSlopeLow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint104","name":"newTargetReserves","type":"uint104"}],"name":"setTargetReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernor","type":"address"}],"name":"transferGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig","name":"newAssetConfig","type":"tuple"}],"name":"updateAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"newBorrowCF","type":"uint64"}],"name":"updateAssetBorrowCollateralFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"newLiquidateCF","type":"uint64"}],"name":"updateAssetLiquidateCollateralFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"newLiquidationFactor","type":"uint64"}],"name":"updateAssetLiquidationFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"updateAssetPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint128","name":"newSupplyCap","type":"uint128"}],"name":"updateAssetSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"AssetDoesNotExist","type":"error"},{"inputs":[],"name":"ConfigurationAlreadyExists","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"indexed":false,"internalType":"struct CometConfiguration.AssetConfig","name":"assetConfig","type":"tuple"}],"name":"AddAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"newComet","type":"address"}],"name":"CometDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint104","name":"oldBaseBorrowMin","type":"uint104"},{"indexed":false,"internalType":"uint104","name":"newBaseBorrowMin","type":"uint104"}],"name":"SetBaseBorrowMin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint104","name":"oldBaseMinForRewards","type":"uint104"},{"indexed":false,"internalType":"uint104","name":"newBaseMinForRewards","type":"uint104"}],"name":"SetBaseMinForRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldBaseTokenPriceFeed","type":"address"},{"indexed":true,"internalType":"address","name":"newBaseTokenPriceFeed","type":"address"}],"name":"SetBaseTokenPriceFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldBaseTrackingBorrowSpeed","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newBaseTrackingBorrowSpeed","type":"uint64"}],"name":"SetBaseTrackingBorrowSpeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldBaseTrackingSupplySpeed","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newBaseTrackingSupplySpeed","type":"uint64"}],"name":"SetBaseTrackingSupplySpeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldKink","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newKink","type":"uint64"}],"name":"SetBorrowKink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRBase","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRBase","type":"uint64"}],"name":"SetBorrowPerYearInterestRateBase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeHigh","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeHigh","type":"uint64"}],"name":"SetBorrowPerYearInterestRateSlopeHigh","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeLow","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeLow","type":"uint64"}],"name":"SetBorrowPerYearInterestRateSlopeLow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"indexed":false,"internalType":"struct CometConfiguration.Configuration","name":"oldConfiguration","type":"tuple"},{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"indexed":false,"internalType":"struct CometConfiguration.Configuration","name":"newConfiguration","type":"tuple"}],"name":"SetConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldExt","type":"address"},{"indexed":true,"internalType":"address","name":"newExt","type":"address"}],"name":"SetExtensionDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldFactory","type":"address"},{"indexed":true,"internalType":"address","name":"newFactory","type":"address"}],"name":"SetFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"SetGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"oldPauseGuardian","type":"address"},{"indexed":true,"internalType":"address","name":"newPauseGuardian","type":"address"}],"name":"SetPauseGuardian","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldStoreFrontPriceFactor","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newStoreFrontPriceFactor","type":"uint64"}],"name":"SetStoreFrontPriceFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldKink","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newKink","type":"uint64"}],"name":"SetSupplyKink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRBase","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRBase","type":"uint64"}],"name":"SetSupplyPerYearInterestRateBase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeHigh","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeHigh","type":"uint64"}],"name":"SetSupplyPerYearInterestRateSlopeHigh","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldIRSlopeLow","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newIRSlopeLow","type":"uint64"}],"name":"SetSupplyPerYearInterestRateSlopeLow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":false,"internalType":"uint104","name":"oldTargetReserves","type":"uint104"},{"indexed":false,"internalType":"uint104","name":"newTargetReserves","type":"uint104"}],"name":"SetTargetReserves","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"indexed":false,"internalType":"struct CometConfiguration.AssetConfig","name":"oldAssetConfig","type":"tuple"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"indexed":false,"internalType":"struct CometConfiguration.AssetConfig","name":"newAssetConfig","type":"tuple"}],"name":"UpdateAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldBorrowCF","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newBorrowCF","type":"uint64"}],"name":"UpdateAssetBorrowCollateralFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldLiquidateCF","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newLiquidateCF","type":"uint64"}],"name":"UpdateAssetLiquidateCollateralFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint64","name":"oldLiquidationFactor","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newLiquidationFactor","type":"uint64"}],"name":"UpdateAssetLiquidationFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldPriceFeed","type":"address"},{"indexed":false,"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"UpdateAssetPriceFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cometProxy","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint128","name":"oldSupplyCap","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newSupplyCap","type":"uint128"}],"name":"UpdateAssetSupplyCap","type":"event"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig","name":"assetConfig","type":"tuple"}],"name":"addAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"}],"name":"deploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"internalType":"struct CometConfiguration.Configuration","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint104","name":"newBaseBorrowMin","type":"uint104"}],"name":"setBaseBorrowMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint104","name":"newBaseMinForRewards","type":"uint104"}],"name":"setBaseMinForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newBaseTokenPriceFeed","type":"address"}],"name":"setBaseTokenPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBaseTrackingBorrowSpeed","type":"uint64"}],"name":"setBaseTrackingBorrowSpeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBaseTrackingSupplySpeed","type":"uint64"}],"name":"setBaseTrackingSupplySpeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBorrowKink","type":"uint64"}],"name":"setBorrowKink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBase","type":"uint64"}],"name":"setBorrowPerYearInterestRateBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setBorrowPerYearInterestRateSlopeHigh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setBorrowPerYearInterestRateSlopeLow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"governor","type":"address"},{"internalType":"address","name":"pauseGuardian","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"baseTokenPriceFeed","type":"address"},{"internalType":"address","name":"extensionDelegate","type":"address"},{"internalType":"uint64","name":"supplyKink","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"supplyPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"borrowKink","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeLow","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateSlopeHigh","type":"uint64"},{"internalType":"uint64","name":"borrowPerYearInterestRateBase","type":"uint64"},{"internalType":"uint64","name":"storeFrontPriceFactor","type":"uint64"},{"internalType":"uint64","name":"trackingIndexScale","type":"uint64"},{"internalType":"uint64","name":"baseTrackingSupplySpeed","type":"uint64"},{"internalType":"uint64","name":"baseTrackingBorrowSpeed","type":"uint64"},{"internalType":"uint104","name":"baseMinForRewards","type":"uint104"},{"internalType":"uint104","name":"baseBorrowMin","type":"uint104"},{"internalType":"uint104","name":"targetReserves","type":"uint104"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"internalType":"struct CometConfiguration.Configuration","name":"newConfiguration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newExtensionDelegate","type":"address"}],"name":"setExtensionDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newFactory","type":"address"}],"name":"setFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newGovernor","type":"address"}],"name":"setGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"newPauseGuardian","type":"address"}],"name":"setPauseGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newStoreFrontPriceFactor","type":"uint64"}],"name":"setStoreFrontPriceFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSupplyKink","type":"uint64"}],"name":"setSupplyKink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newBase","type":"uint64"}],"name":"setSupplyPerYearInterestRateBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setSupplyPerYearInterestRateSlopeHigh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint64","name":"newSlope","type":"uint64"}],"name":"setSupplyPerYearInterestRateSlopeLow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"uint104","name":"newTargetReserves","type":"uint104"}],"name":"setTargetReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernor","type":"address"}],"name":"transferGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig","name":"newAssetConfig","type":"tuple"}],"name":"updateAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"newBorrowCF","type":"uint64"}],"name":"updateAssetBorrowCollateralFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"newLiquidateCF","type":"uint64"}],"name":"updateAssetLiquidateCollateralFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"newLiquidationFactor","type":"uint64"}],"name":"updateAssetLiquidationFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"updateAssetPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cometProxy","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint128","name":"newSupplyCap","type":"uint128"}],"name":"updateAssetSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
6080806040523461001c5760001960005561283490816100228239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163058e415514612070575080630c340a2414612047578063240dd96d14611fb8578063294be43314611ee757806335e67c1014611e55578063395c0fda14611e155780633dd4036514611d865780634a900c5a14611ce65780634c96a38914611a2857806354fd4d5014611a0a5780635bfb83731461197d5780635c9ae499146118ee5780635e8255641461185f57806374b20ab8146117d057806377a7dafd146116ed578063786f0ac41461165e5780637d5e1840146115be5780638145ae7d1461152a578063886fe70b146114e55780638d2ed08d146114565780639340d433146113c95780639a01fe821461132b5780639a0fd80814611255578063a2ced7fd1461117f578063b2f5ee19146110df578063b73585f114611016578063b8cc9ce614610fa2578063c1252f90146107c7578063c44b11f71461059d578063c4d66de81461052c578063d89e834f1461048c578063e1a533ed146103fa578063e8623ec514610357578063ea31a447146102955763ecb9a875146101a057600080fd5b34610290576060366003190112610290576001600160a01b036004358181169081810361029057602435908382169384830361029057604435916001600160401b039182841684036102905760025416330361027f5782600261026461022a7f4bce180f5fbcc3f04e85605e3179ceaa66041248373ced1a406d4c44d91e37979761026b95612775565b948860005260016020528261024687600a604060002001612743565b50015460401c1694886000526001602052600a604060002001612743565b5001612452565b61027a6040519283928361270f565b0390a3005b6040516282b42960e81b8152600490fd5b600080fd5b3461029057610100366003190112610290576004356001600160a01b03818116918290036102905760e03660231901126102905760025416330361027f576000818152600160205260409020600a018054600160401b811015610341576103078161030d936001602494018155612743565b90612579565b7f1f7dcc7122c2fe2d685db789d8cde941d28c9d5bf456dcd260705c8d4aef4ef860e060405161033e816024612671565ba2005b634e487b7160e01b600052604160045260246000fd5b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f576000838152600160205260409081902060060180547fec47838861ac4faa72ef1cf4d982f923880203912cd0c53d6fea2e611562f82c94921c909116906103e6908390612452565b6103f56040519283928361270f565b0390a2005b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526001602052604080822060030180546001600160a01b0319811685179091559051919491939116907f1e3daca7fe0d6c7ab58271d196454f1d9e867a09de95666bcad4ab688e750f1a8585a4f35b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160681b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060080180546001600160681b031981169093179055517f635524bd339ec1b914f9b13607c72592cfa9538a3c56170a59094dde834bb41d93909283926103f5921683612729565b34610290576020366003190112610290576004356001600160a01b038116908190036102905760005461058c57801561057a57600280546001600160a01b0319169190911790556001600055005b60405163e6c4247b60e01b8152600490fd5b60405162dc149f60e41b8152600490fd5b34610290576020366003190112610290576004356001600160a01b03811681036102905760606102806040516105d56102a082612311565b60008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e08201526000610100820152600061012082015260006101408201526000610160820152600061018082015260006101a082015260006101c082015260006101e08201526000610200820152600061022082015260006102408201526000610260820152015260018060a01b031660005260016020526107c360406000206107a9600a604051926106986102a085612311565b80546001600160a01b0390811685526001820154811660208601526002820154811660408087019190915260038301548216606087015260048301549182166080808801919091526001600160401b0360a093841c811693880193909352600584015480841660c0808a019190915281841c851660e08a015281831c85166101008a015290811c61012089015260068501548085166101408a015280841c85166101608a015280831c85166101808a0152901c6101a088015260078401548084166101c08901529182901c83166101e08801521c1661020085015260088101546001600160681b0380821661022087015260689190911c81166102408601526009820154166102608501520161239f565b6102808201526040519182916020835260208301906121ad565b0390f35b346102905760031960403682011261029057600435906001600160a01b0382168203610290576001600160401b0360243511610290576102a09060243536030112610290576002546001600160a01b0316330361027f5760018060a01b03811660005260016020526040600020610849600a604051926106986102a085612311565b61028082015260408101516001600160a01b03168015159081610f50575b50610f3e576001600160a01b03828116600090815260016020526040902090610894600460243501612401565b82546001600160a01b03191691161781556001600160a01b036108ba6024803501612401565b600183018054919092166001600160a01b0319909116179055600281016001600160a01b036108ed604460243501612401565b82546001600160a01b0319169116179055600381016001600160a01b03610918602435606401612401565b82546001600160a01b031916911617905561096b600482016001600160a01b03610946602435608401612401565b82546001600160a01b031916911617815561096560243560a401612415565b90612429565b6001600160401b0361098160243560c401612415565b1660018060401b03196005830154161760058201556109b06109a760e460243501612415565b60058301612452565b6109cb6109c261010460243501612415565b6005830161247b565b6109e66109dd61012460243501612415565b600583016124a4565b6001600160401b036109fd60243561014401612415565b1660018060401b0319600683015416176006820155610a2d610a2461016460243501612415565b60068301612452565b610a48610a3f61018460243501612415565b6006830161247b565b610a63610a5a6101a460243501612415565b600683016124a4565b6001600160401b03610a7a6024356101c401612415565b1660018060401b0319600783015416176007820155610aaa610aa16101e460243501612415565b60078301612452565b610ac5610abc61020460243501612415565b6007830161247b565b6001600160681b03610adc602435610224016124c7565b1660018060681b0319600883015416176008820155610b0c610b03610244602435016124c7565b600883016124db565b6001600160681b03610b23602435610264016124c7565b16600982019060018060681b0319825416179055602219602435360301610284602435013512156102905760243561028481013501906001600160401b036004830135116102905760e06004830135023603602483011361029057600160401b60048301351161034157600a81018054600484013591829055908111610ee8575b50600a01600090815260208120602483015b60048401358310610ec5578585610bd8604051916040835260408301906121ad565b8181036020830152916001600160a01b03610bf760046024350161210e565b1683526001600160a01b03610c0f602480350161210e565b1660208401526001600160a01b03610c2b60243560440161210e565b1660408401526001600160a01b03610c4760243560640161210e565b1660608401526001600160a01b03610c6360243560840161210e565b1660808401526001600160401b03610c7f60243560a401612122565b1660a08401526001600160401b03610c9b60243560c401612122565b1660c08401526001600160401b03610cb760243560e401612122565b1660e08401526001600160401b03610cd460243561010401612122565b166101008401526001600160401b03610cf260243561012401612122565b166101208401526001600160401b03610d1060243561014401612122565b166101408401526001600160401b03610d2e60243561016401612122565b166101608401526001600160401b03610d4c60243561018401612122565b166101808401526001600160401b03610d6a6024356101a401612122565b166101a08401526001600160401b03610d886024356101c401612122565b166101c08401526001600160401b03610da66024356101e401612122565b166101e08401526001600160401b03610dc460243561020401612122565b166102008401526001600160681b03610de260243561022401612136565b166102208401526001600160681b03610e0060243561024401612136565b166102408401526001600160681b03610e1e60243561026401612136565b166102608401526024356102846024350135016024600482013591019360018060401b0382116102905760e082023603851361029057806102a06102806102c0930152826102a082015201939060005b818110610ea7576001600160a01b0384167f11750c0169cdcebd42703782ec1a557a8ddebc9c3239aaf46662cd6c81cdb90b86880387a2005b90919460e08082610eba6001948a612671565b019601929101610e6e565b6001600360e083610eda600495600088612579565b019301930192919050610bb6565b610ef3906003612504565b610f0260048401356003612504565b90600a830160005260206000209182015b8183018110610f23575050610ba4565b80600060039255600060018201556000600282015501610f13565b604051630735e0fd60e51b8152600490fd5b90506001600160a01b03610f68602435604401612401565b1614801590610f78575b83610867565b506101c08101516001600160401b0390811690610f9a6024356101c401612415565b161415610f72565b34610290576020366003190112610290576001600160a01b0360043581811690819003610290576002549182169081330361027f576001600160a01b0319909216821760025560405160009290917f6fadb1c244276388aee22be93b919985a18748c021e5d48553957a48101a25608484a3f35b34610290576060366003190112610290576001600160a01b036004358181169081810361029057602435908382169384830361029057604435916001600160401b039182841684036102905760025416330361027f578260016110d86110a07f14bba7d3df0797b2f5143e4f2087f29fcd3ee3ec3197d38a7f77f85dc0d0ec639761026b95612775565b948860005282602052826110bb87600a604060002001612743565b50015460a81c16948860005282602052600a604060002001612743565b500161252d565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060060180546001600160401b031981169093179055517fe5d8ea5f9f9bc1e3132e593561d5b440062de5e0d5585a7046c87ca172a60d4693909283926103f592168361270f565b34610290576060366003190112610290576001600160a01b036004358181169081810361029057602435908382169384830361029057604435906001600160801b038216908183036102905760025416330361027f576112486112057f561b42b6b7ded5005c55634f0a6bd24d306cb04b04533bab7e1a644b6724548695604095612775565b9286600052600160205260026112418161122587600a8a60002001612743565b50015460801c95896000526001602052600a8860002001612743565b5001612556565b82519182526020820152a3005b3461029057610100366003190112610290576001600160a01b03600435818116918282036102905760e0366023190112610290578060025416330361027f576024359081168103610290576112ce6101c0917ff0d2e933bc5a83ab653c27f5ae312ee5f4a394a45c34bb90e8c790bf0ed3834193612775565b83600052600160205261131060246103076112f96112f385600a604060002001612743565b50612334565b93876000526001602052600a604060002001612743565b61131d604051809261214a565b61033e60e082016024612671565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160681b03906024359082821682036102905760025416330361027f57600083815260016020526040902060080180547f2cc4a6aedb45911a1034b2320f16567fa4e2eca3f1f5d3b46804f6bc42b7c3f29360689190911c16906113ba9083906124db565b6103f560405192839283612729565b34610290576040366003190112610290576004356001600160a01b038181169182900361029057602435906001600160401b03821682036102905760025416330361027f57600082815260016020526040902060060180547f864cdb8aef050e3718f73f8f3512418f04745083156b40523b128e79b411fc2d929160c09190911c906103e69083906124a4565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f57600083815260016020526040902060070180547fcd38d79accad9a0b2cec7a7f94a4ceb7d9b0df5f35bdcb6ee4212b695fad0aa19360809190911c16906103e690839061247b565b34610290576040366003190112610290576001600160a01b0360043581811681036102905760243591821682036102905760209161152291612775565b604051908152f35b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f57600082815260016020819052604080832090910180546001600160a01b0319811685179091559051919491939116907fb60cc4e8fd32e3f131099a821d4716afdb1e906f90421b5edb21070d209d0ee28585a4f35b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160681b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060090180546001600160681b031981169093179055517f0fcb429b7790258a8e50ab0f30505a67d74d6571119febb9690e6264594e2e2993909283926103f5921683612729565b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526001602052604080822080546001600160a01b0319811685179091559051919491939116907f54b27c9d187943783592d79e0380d54f9a545d098bd921e5919d4b3305bd603f8585a4f35b34610290576060366003190112610290576004356001600160a01b038082169081830361029057602435908082169384830361029057604435916001600160401b0391828416918285036102905760025416330361027f576117ac6117757fbdfea73f1d581ded04f608d47cd124146963b03795e30c9f9e16d57bb1fed65296600293612775565b938760005260016020528261179186600a604060002001612743565b5001541693876000526001602052600a604060002001612743565b500180546001600160401b031916909117905560405191829161027a91908361270f565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f57600083815260016020526040902060060180547f7e237d05d262a573a6b2d126c2065264a3bcabb68e67a1d5a1e88b1dbef6666d9360809190911c16906103e690839061247b565b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526003602052604080822080546001600160a01b0319811685179091559051919491939116907fcc826d20934cb90e9329d09ff55b4e43831c5bb3a3305fb536842ad49041e7d58585a4f35b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f576000838152600160205260409081902060050180547f9fd77f9236bc26e7c30eaa679ccff4200f9a813e5950b2904c29f11d0b5f2a5e94921c909116906103e6908390612452565b34610290576040366003190112610290576004356001600160a01b038181169182900361029057602435906001600160401b03821682036102905760025416330361027f57600082815260016020526040902060050180547fe4e8221220a251ab6772c13e04f6c54532602ec260a26f48ff23fa8b11f41be7929160c09190911c906103e69083906124a4565b34610290576000366003190112610290576020600054604051908152f35b34610290576020366003190112610290576004356001600160a01b0381168103610290576001600160a01b0381811660009081526003602081815260408084205460018084528286208351632d52643960e01b8152600480820187905282548a166024830152928201548916604482015260028201548916606482015295810154881660848701529081015480881660a487015260a01c6001600160401b0390811660c4870152600582015480821660e488015280851c8216610104880152608081811c831661012489015260c091821c61014489015260068401548084166101648a015280871c84166101848a015280821c84166101a48a015290911c6101c488015260078301548083166101e48901529485901c82166102048801529390931c90921661022485015260088201546001600160681b0380821661024487015260689190911c81166102648601526009830154166102848501526102a06102a4850152600a90910180546102c48501819052908552918420929594169285926102e484019290915b818110611c6657505050918160008160209503925af18015611c5a57600090611c15575b60405160209350916001600160a01b03918216918291167f3da528dfe78562a1f409134989443b5f21ee92023a64b90dedeb2002415189b6600085a38152f35b50906020813d602011611c52575b81611c3060209383612311565b810103126102905751906001600160a01b038216820361029057602091611bd5565b3d9150611c23565b6040513d6000823e3d90fd5b82546001600160a01b039081168552600180850154918216602087015260a082811c60ff1660408089019190915260a89390931c6001600160401b03908116606089015260028701548082166080808b01919091529481901c9091169188019190915290911c60c086015288955060e09094019360039093019201611bb1565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060050180546001600160401b031981169093179055517fc936b3eb07b584b686d11042214266fed11036dbc226159d67b3cfaa4ce26f7893909283926103f592168361270f565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f57600083815260016020526040902060050180547f56027dd4756fabe0c40c7de2c732b95d170796feaf975883a17a087b3718e6b99360809190911c16906103e690839061247b565b34610290576020366003190112610290576004356001600160a01b0381811691829003610290576020916000526003825260406000205416604051908152f35b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526001602052604080822060040180546001600160a01b0319811685179091559051919491939116907fc86eba353c79b422cdb4d71fcc7db3615603457a42c0559fcf1b31dfd66920b38585a4f35b34610290576060366003190112610290576001600160a01b0360043581811690818103610290576024358381169384820361029057604435818116809103610290578160025416330361027f576001611f99611f666040957f1736faf0e37344d44b8757867808a35e1d4961804de8c3dec2896bf1c1d6fc5197612775565b93876000528260205282611f8086600a8960002001612743565b50015416938760005282602052600a8660002001612743565b500180546001600160a01b0319168217905582519182526020820152a3005b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f576000838152600160205260409081902060070180547faf80475c4b413d347b2ac9b71b6c734ba09a6f4771aba12edc65346cffe273f594921c909116906103e6908390612452565b34610290576000366003190112610290576002546040516001600160a01b039091168152602090f35b34610290576040366003190112610290576004356001600160a01b038181169182900361029057602435906001600160401b039081831683036102905760025416330361210057600083815260016020526040902060040180547f35ebb489f572b08259fa0a007e62d8390043159fcf4a6c9a517dd1eb4dc77dfc939260a09190911c16906103e6908390612429565b6282b42960e81b8452600484fd5b35906001600160a01b038216820361029057565b35906001600160401b038216820361029057565b35906001600160681b038216820361029057565b60c09060018060a01b03808251168452602082015116602084015260ff604082015116604084015260018060401b0380606083015116606085015280608083015116608085015260a08201511660a08401528160018060801b0391015116910152565b906102a0908181019060018060a01b038085511682526102c0602092828493848901511684830152806040890151166040830152806060890151166060830152608088015116608082015260018060401b03958660a08901511660a08301528660c08901511660c083015260e09680888a0151168884015261010081818b0151169084015261012081818b0151169084015261014081818b0151169084015261016081818b0151169084015261018081818b015116908401526101a081818b015116908401526101c081818b015116908401526101e081818b0151169084015261020090818a0151169083015260018060681b0361022081818b0151169084015261024081818b0151169084015261026090818a0151169083015261028080980151978201528651809552019401926000905b8382106122ef57505050505090565b90919293948382826123046001948a5161214a565b01960194939201906122e0565b601f909101601f19168101906001600160401b0382119082101761034157604052565b9060405161234360e082612311565b60c08193600260018060a01b03918281541685526001810154928316602086015260ff8360a01c16604086015260018060401b03809360a81c16606086015201549080821660808501528160401c1660a084015260801c910152565b80549091906001600160401b038111610341576040519260206123c7818460051b0186612311565b82855260009182528082208186015b8484106123e4575050505050565b6003836001926123f385612334565b8152019201930192906123d6565b356001600160a01b03811681036102905790565b356001600160401b03811681036102905790565b8054600160a01b600160e01b03191660a09290921b600160a01b600160e01b0316919091179055565b8054600160401b600160801b03191660409290921b600160401b600160801b0316919091179055565b8054600160801b600160c01b03191660809290921b600160801b600160c01b0316919091179055565b80546001600160c01b031660c09290921b6001600160c01b031916919091179055565b356001600160681b03811681036102905790565b8054600160681b600160d01b03191660689290921b600160681b600160d01b0316919091179055565b8060001904821181151516612517570290565b634e487b7160e01b600052601160045260246000fd5b8054600160a81b600160e81b03191660a89290921b600160a81b600160e81b0316919091179055565b80546001600160801b031660809290921b6001600160801b031916919091179055565b9061265b576001600160a01b038061259084612401565b169160018060a01b0319928382541617815560018101916125b360208601612401565b169182815494851617815560408501359060ff821682036102905760c0946002946126029360ff60a01b9060a01b169160018060a81b031916171781556125fc60608701612415565b9061252d565b01916001600160401b0361261860808301612415565b84546001600160401b031916911617835561263e61263860a08301612415565b84612452565b01356001600160801b03811681036102905761265991612556565b565b634e487b7160e01b600052600060045260246000fd5b6001600160a01b03806126838361210e565b1683526126926020830161210e565b16602083015260408101359060ff821680920361029057604083019190915260c0906001600160401b03806126c960608401612122565b166060850152806126dc60808401612122565b1660808501526126ee60a08301612122565b1660a084015201356001600160801b03811691908290036102905760c00152565b6001600160401b0391821681529116602082015260400190565b6001600160681b0391821681529116602082015260400190565b805482101561275f576000526003602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b9160009160018060a01b038094168352600193602085815261279c600a604087200161239f565b805195805b8781106127ba576040516367fa94e760e01b8152600490fd5b82518110156127ea5784848260051b850101515116858716146127de5788016127a1565b96505050505050915090565b634e487b7160e01b82526032600452602482fdfea2646970667358221220f554551ff3e729f1635fd04bc7387451e5771a9c1b86d6caec1a8972a1ab090764736f6c634300080f0033
6080806040523461001c5760001960005561283490816100228239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163058e415514612070575080630c340a2414612047578063240dd96d14611fb8578063294be43314611ee757806335e67c1014611e55578063395c0fda14611e155780633dd4036514611d865780634a900c5a14611ce65780634c96a38914611a2857806354fd4d5014611a0a5780635bfb83731461197d5780635c9ae499146118ee5780635e8255641461185f57806374b20ab8146117d057806377a7dafd146116ed578063786f0ac41461165e5780637d5e1840146115be5780638145ae7d1461152a578063886fe70b146114e55780638d2ed08d146114565780639340d433146113c95780639a01fe821461132b5780639a0fd80814611255578063a2ced7fd1461117f578063b2f5ee19146110df578063b73585f114611016578063b8cc9ce614610fa2578063c1252f90146107c7578063c44b11f71461059d578063c4d66de81461052c578063d89e834f1461048c578063e1a533ed146103fa578063e8623ec514610357578063ea31a447146102955763ecb9a875146101a057600080fd5b34610290576060366003190112610290576001600160a01b036004358181169081810361029057602435908382169384830361029057604435916001600160401b039182841684036102905760025416330361027f5782600261026461022a7f4bce180f5fbcc3f04e85605e3179ceaa66041248373ced1a406d4c44d91e37979761026b95612775565b948860005260016020528261024687600a604060002001612743565b50015460401c1694886000526001602052600a604060002001612743565b5001612452565b61027a6040519283928361270f565b0390a3005b6040516282b42960e81b8152600490fd5b600080fd5b3461029057610100366003190112610290576004356001600160a01b03818116918290036102905760e03660231901126102905760025416330361027f576000818152600160205260409020600a018054600160401b811015610341576103078161030d936001602494018155612743565b90612579565b7f1f7dcc7122c2fe2d685db789d8cde941d28c9d5bf456dcd260705c8d4aef4ef860e060405161033e816024612671565ba2005b634e487b7160e01b600052604160045260246000fd5b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f576000838152600160205260409081902060060180547fec47838861ac4faa72ef1cf4d982f923880203912cd0c53d6fea2e611562f82c94921c909116906103e6908390612452565b6103f56040519283928361270f565b0390a2005b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526001602052604080822060030180546001600160a01b0319811685179091559051919491939116907f1e3daca7fe0d6c7ab58271d196454f1d9e867a09de95666bcad4ab688e750f1a8585a4f35b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160681b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060080180546001600160681b031981169093179055517f635524bd339ec1b914f9b13607c72592cfa9538a3c56170a59094dde834bb41d93909283926103f5921683612729565b34610290576020366003190112610290576004356001600160a01b038116908190036102905760005461058c57801561057a57600280546001600160a01b0319169190911790556001600055005b60405163e6c4247b60e01b8152600490fd5b60405162dc149f60e41b8152600490fd5b34610290576020366003190112610290576004356001600160a01b03811681036102905760606102806040516105d56102a082612311565b60008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e08201526000610100820152600061012082015260006101408201526000610160820152600061018082015260006101a082015260006101c082015260006101e08201526000610200820152600061022082015260006102408201526000610260820152015260018060a01b031660005260016020526107c360406000206107a9600a604051926106986102a085612311565b80546001600160a01b0390811685526001820154811660208601526002820154811660408087019190915260038301548216606087015260048301549182166080808801919091526001600160401b0360a093841c811693880193909352600584015480841660c0808a019190915281841c851660e08a015281831c85166101008a015290811c61012089015260068501548085166101408a015280841c85166101608a015280831c85166101808a0152901c6101a088015260078401548084166101c08901529182901c83166101e08801521c1661020085015260088101546001600160681b0380821661022087015260689190911c81166102408601526009820154166102608501520161239f565b6102808201526040519182916020835260208301906121ad565b0390f35b346102905760031960403682011261029057600435906001600160a01b0382168203610290576001600160401b0360243511610290576102a09060243536030112610290576002546001600160a01b0316330361027f5760018060a01b03811660005260016020526040600020610849600a604051926106986102a085612311565b61028082015260408101516001600160a01b03168015159081610f50575b50610f3e576001600160a01b03828116600090815260016020526040902090610894600460243501612401565b82546001600160a01b03191691161781556001600160a01b036108ba6024803501612401565b600183018054919092166001600160a01b0319909116179055600281016001600160a01b036108ed604460243501612401565b82546001600160a01b0319169116179055600381016001600160a01b03610918602435606401612401565b82546001600160a01b031916911617905561096b600482016001600160a01b03610946602435608401612401565b82546001600160a01b031916911617815561096560243560a401612415565b90612429565b6001600160401b0361098160243560c401612415565b1660018060401b03196005830154161760058201556109b06109a760e460243501612415565b60058301612452565b6109cb6109c261010460243501612415565b6005830161247b565b6109e66109dd61012460243501612415565b600583016124a4565b6001600160401b036109fd60243561014401612415565b1660018060401b0319600683015416176006820155610a2d610a2461016460243501612415565b60068301612452565b610a48610a3f61018460243501612415565b6006830161247b565b610a63610a5a6101a460243501612415565b600683016124a4565b6001600160401b03610a7a6024356101c401612415565b1660018060401b0319600783015416176007820155610aaa610aa16101e460243501612415565b60078301612452565b610ac5610abc61020460243501612415565b6007830161247b565b6001600160681b03610adc602435610224016124c7565b1660018060681b0319600883015416176008820155610b0c610b03610244602435016124c7565b600883016124db565b6001600160681b03610b23602435610264016124c7565b16600982019060018060681b0319825416179055602219602435360301610284602435013512156102905760243561028481013501906001600160401b036004830135116102905760e06004830135023603602483011361029057600160401b60048301351161034157600a81018054600484013591829055908111610ee8575b50600a01600090815260208120602483015b60048401358310610ec5578585610bd8604051916040835260408301906121ad565b8181036020830152916001600160a01b03610bf760046024350161210e565b1683526001600160a01b03610c0f602480350161210e565b1660208401526001600160a01b03610c2b60243560440161210e565b1660408401526001600160a01b03610c4760243560640161210e565b1660608401526001600160a01b03610c6360243560840161210e565b1660808401526001600160401b03610c7f60243560a401612122565b1660a08401526001600160401b03610c9b60243560c401612122565b1660c08401526001600160401b03610cb760243560e401612122565b1660e08401526001600160401b03610cd460243561010401612122565b166101008401526001600160401b03610cf260243561012401612122565b166101208401526001600160401b03610d1060243561014401612122565b166101408401526001600160401b03610d2e60243561016401612122565b166101608401526001600160401b03610d4c60243561018401612122565b166101808401526001600160401b03610d6a6024356101a401612122565b166101a08401526001600160401b03610d886024356101c401612122565b166101c08401526001600160401b03610da66024356101e401612122565b166101e08401526001600160401b03610dc460243561020401612122565b166102008401526001600160681b03610de260243561022401612136565b166102208401526001600160681b03610e0060243561024401612136565b166102408401526001600160681b03610e1e60243561026401612136565b166102608401526024356102846024350135016024600482013591019360018060401b0382116102905760e082023603851361029057806102a06102806102c0930152826102a082015201939060005b818110610ea7576001600160a01b0384167f11750c0169cdcebd42703782ec1a557a8ddebc9c3239aaf46662cd6c81cdb90b86880387a2005b90919460e08082610eba6001948a612671565b019601929101610e6e565b6001600360e083610eda600495600088612579565b019301930192919050610bb6565b610ef3906003612504565b610f0260048401356003612504565b90600a830160005260206000209182015b8183018110610f23575050610ba4565b80600060039255600060018201556000600282015501610f13565b604051630735e0fd60e51b8152600490fd5b90506001600160a01b03610f68602435604401612401565b1614801590610f78575b83610867565b506101c08101516001600160401b0390811690610f9a6024356101c401612415565b161415610f72565b34610290576020366003190112610290576001600160a01b0360043581811690819003610290576002549182169081330361027f576001600160a01b0319909216821760025560405160009290917f6fadb1c244276388aee22be93b919985a18748c021e5d48553957a48101a25608484a3f35b34610290576060366003190112610290576001600160a01b036004358181169081810361029057602435908382169384830361029057604435916001600160401b039182841684036102905760025416330361027f578260016110d86110a07f14bba7d3df0797b2f5143e4f2087f29fcd3ee3ec3197d38a7f77f85dc0d0ec639761026b95612775565b948860005282602052826110bb87600a604060002001612743565b50015460a81c16948860005282602052600a604060002001612743565b500161252d565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060060180546001600160401b031981169093179055517fe5d8ea5f9f9bc1e3132e593561d5b440062de5e0d5585a7046c87ca172a60d4693909283926103f592168361270f565b34610290576060366003190112610290576001600160a01b036004358181169081810361029057602435908382169384830361029057604435906001600160801b038216908183036102905760025416330361027f576112486112057f561b42b6b7ded5005c55634f0a6bd24d306cb04b04533bab7e1a644b6724548695604095612775565b9286600052600160205260026112418161122587600a8a60002001612743565b50015460801c95896000526001602052600a8860002001612743565b5001612556565b82519182526020820152a3005b3461029057610100366003190112610290576001600160a01b03600435818116918282036102905760e0366023190112610290578060025416330361027f576024359081168103610290576112ce6101c0917ff0d2e933bc5a83ab653c27f5ae312ee5f4a394a45c34bb90e8c790bf0ed3834193612775565b83600052600160205261131060246103076112f96112f385600a604060002001612743565b50612334565b93876000526001602052600a604060002001612743565b61131d604051809261214a565b61033e60e082016024612671565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160681b03906024359082821682036102905760025416330361027f57600083815260016020526040902060080180547f2cc4a6aedb45911a1034b2320f16567fa4e2eca3f1f5d3b46804f6bc42b7c3f29360689190911c16906113ba9083906124db565b6103f560405192839283612729565b34610290576040366003190112610290576004356001600160a01b038181169182900361029057602435906001600160401b03821682036102905760025416330361027f57600082815260016020526040902060060180547f864cdb8aef050e3718f73f8f3512418f04745083156b40523b128e79b411fc2d929160c09190911c906103e69083906124a4565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f57600083815260016020526040902060070180547fcd38d79accad9a0b2cec7a7f94a4ceb7d9b0df5f35bdcb6ee4212b695fad0aa19360809190911c16906103e690839061247b565b34610290576040366003190112610290576001600160a01b0360043581811681036102905760243591821682036102905760209161152291612775565b604051908152f35b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f57600082815260016020819052604080832090910180546001600160a01b0319811685179091559051919491939116907fb60cc4e8fd32e3f131099a821d4716afdb1e906f90421b5edb21070d209d0ee28585a4f35b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160681b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060090180546001600160681b031981169093179055517f0fcb429b7790258a8e50ab0f30505a67d74d6571119febb9690e6264594e2e2993909283926103f5921683612729565b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526001602052604080822080546001600160a01b0319811685179091559051919491939116907f54b27c9d187943783592d79e0380d54f9a545d098bd921e5919d4b3305bd603f8585a4f35b34610290576060366003190112610290576004356001600160a01b038082169081830361029057602435908082169384830361029057604435916001600160401b0391828416918285036102905760025416330361027f576117ac6117757fbdfea73f1d581ded04f608d47cd124146963b03795e30c9f9e16d57bb1fed65296600293612775565b938760005260016020528261179186600a604060002001612743565b5001541693876000526001602052600a604060002001612743565b500180546001600160401b031916909117905560405191829161027a91908361270f565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f57600083815260016020526040902060060180547f7e237d05d262a573a6b2d126c2065264a3bcabb68e67a1d5a1e88b1dbef6666d9360809190911c16906103e690839061247b565b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526003602052604080822080546001600160a01b0319811685179091559051919491939116907fcc826d20934cb90e9329d09ff55b4e43831c5bb3a3305fb536842ad49041e7d58585a4f35b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f576000838152600160205260409081902060050180547f9fd77f9236bc26e7c30eaa679ccff4200f9a813e5950b2904c29f11d0b5f2a5e94921c909116906103e6908390612452565b34610290576040366003190112610290576004356001600160a01b038181169182900361029057602435906001600160401b03821682036102905760025416330361027f57600082815260016020526040902060050180547fe4e8221220a251ab6772c13e04f6c54532602ec260a26f48ff23fa8b11f41be7929160c09190911c906103e69083906124a4565b34610290576000366003190112610290576020600054604051908152f35b34610290576020366003190112610290576004356001600160a01b0381168103610290576001600160a01b0381811660009081526003602081815260408084205460018084528286208351632d52643960e01b8152600480820187905282548a166024830152928201548916604482015260028201548916606482015295810154881660848701529081015480881660a487015260a01c6001600160401b0390811660c4870152600582015480821660e488015280851c8216610104880152608081811c831661012489015260c091821c61014489015260068401548084166101648a015280871c84166101848a015280821c84166101a48a015290911c6101c488015260078301548083166101e48901529485901c82166102048801529390931c90921661022485015260088201546001600160681b0380821661024487015260689190911c81166102648601526009830154166102848501526102a06102a4850152600a90910180546102c48501819052908552918420929594169285926102e484019290915b818110611c6657505050918160008160209503925af18015611c5a57600090611c15575b60405160209350916001600160a01b03918216918291167f3da528dfe78562a1f409134989443b5f21ee92023a64b90dedeb2002415189b6600085a38152f35b50906020813d602011611c52575b81611c3060209383612311565b810103126102905751906001600160a01b038216820361029057602091611bd5565b3d9150611c23565b6040513d6000823e3d90fd5b82546001600160a01b039081168552600180850154918216602087015260a082811c60ff1660408089019190915260a89390931c6001600160401b03908116606089015260028701548082166080808b01919091529481901c9091169188019190915290911c60c086015288955060e09094019360039093019201611bb1565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b039060243590828216908183036102905760025416330361027f576000848152600160205260409081902060050180546001600160401b031981169093179055517fc936b3eb07b584b686d11042214266fed11036dbc226159d67b3cfaa4ce26f7893909283926103f592168361270f565b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f57600083815260016020526040902060050180547f56027dd4756fabe0c40c7de2c732b95d170796feaf975883a17a087b3718e6b99360809190911c16906103e690839061247b565b34610290576020366003190112610290576004356001600160a01b0381811691829003610290576020916000526003825260406000205416604051908152f35b34610290576040366003190112610290576001600160a01b036004358181169081900361029057602435828116809103610290578260025416330361027f5760008281526001602052604080822060040180546001600160a01b0319811685179091559051919491939116907fc86eba353c79b422cdb4d71fcc7db3615603457a42c0559fcf1b31dfd66920b38585a4f35b34610290576060366003190112610290576001600160a01b0360043581811690818103610290576024358381169384820361029057604435818116809103610290578160025416330361027f576001611f99611f666040957f1736faf0e37344d44b8757867808a35e1d4961804de8c3dec2896bf1c1d6fc5197612775565b93876000528260205282611f8086600a8960002001612743565b50015416938760005282602052600a8660002001612743565b500180546001600160a01b0319168217905582519182526020820152a3005b34610290576040366003190112610290576004356001600160a01b0381811691829003610290576001600160401b03906024359082821682036102905760025416330361027f576000838152600160205260409081902060070180547faf80475c4b413d347b2ac9b71b6c734ba09a6f4771aba12edc65346cffe273f594921c909116906103e6908390612452565b34610290576000366003190112610290576002546040516001600160a01b039091168152602090f35b34610290576040366003190112610290576004356001600160a01b038181169182900361029057602435906001600160401b039081831683036102905760025416330361210057600083815260016020526040902060040180547f35ebb489f572b08259fa0a007e62d8390043159fcf4a6c9a517dd1eb4dc77dfc939260a09190911c16906103e6908390612429565b6282b42960e81b8452600484fd5b35906001600160a01b038216820361029057565b35906001600160401b038216820361029057565b35906001600160681b038216820361029057565b60c09060018060a01b03808251168452602082015116602084015260ff604082015116604084015260018060401b0380606083015116606085015280608083015116608085015260a08201511660a08401528160018060801b0391015116910152565b906102a0908181019060018060a01b038085511682526102c0602092828493848901511684830152806040890151166040830152806060890151166060830152608088015116608082015260018060401b03958660a08901511660a08301528660c08901511660c083015260e09680888a0151168884015261010081818b0151169084015261012081818b0151169084015261014081818b0151169084015261016081818b0151169084015261018081818b015116908401526101a081818b015116908401526101c081818b015116908401526101e081818b0151169084015261020090818a0151169083015260018060681b0361022081818b0151169084015261024081818b0151169084015261026090818a0151169083015261028080980151978201528651809552019401926000905b8382106122ef57505050505090565b90919293948382826123046001948a5161214a565b01960194939201906122e0565b601f909101601f19168101906001600160401b0382119082101761034157604052565b9060405161234360e082612311565b60c08193600260018060a01b03918281541685526001810154928316602086015260ff8360a01c16604086015260018060401b03809360a81c16606086015201549080821660808501528160401c1660a084015260801c910152565b80549091906001600160401b038111610341576040519260206123c7818460051b0186612311565b82855260009182528082208186015b8484106123e4575050505050565b6003836001926123f385612334565b8152019201930192906123d6565b356001600160a01b03811681036102905790565b356001600160401b03811681036102905790565b8054600160a01b600160e01b03191660a09290921b600160a01b600160e01b0316919091179055565b8054600160401b600160801b03191660409290921b600160401b600160801b0316919091179055565b8054600160801b600160c01b03191660809290921b600160801b600160c01b0316919091179055565b80546001600160c01b031660c09290921b6001600160c01b031916919091179055565b356001600160681b03811681036102905790565b8054600160681b600160d01b03191660689290921b600160681b600160d01b0316919091179055565b8060001904821181151516612517570290565b634e487b7160e01b600052601160045260246000fd5b8054600160a81b600160e81b03191660a89290921b600160a81b600160e81b0316919091179055565b80546001600160801b031660809290921b6001600160801b031916919091179055565b9061265b576001600160a01b038061259084612401565b169160018060a01b0319928382541617815560018101916125b360208601612401565b169182815494851617815560408501359060ff821682036102905760c0946002946126029360ff60a01b9060a01b169160018060a81b031916171781556125fc60608701612415565b9061252d565b01916001600160401b0361261860808301612415565b84546001600160401b031916911617835561263e61263860a08301612415565b84612452565b01356001600160801b03811681036102905761265991612556565b565b634e487b7160e01b600052600060045260246000fd5b6001600160a01b03806126838361210e565b1683526126926020830161210e565b16602083015260408101359060ff821680920361029057604083019190915260c0906001600160401b03806126c960608401612122565b166060850152806126dc60808401612122565b1660808501526126ee60a08301612122565b1660a084015201356001600160801b03811691908290036102905760c00152565b6001600160401b0391821681529116602082015260400190565b6001600160681b0391821681529116602082015260400190565b805482101561275f576000526003602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b9160009160018060a01b038094168352600193602085815261279c600a604087200161239f565b805195805b8781106127ba576040516367fa94e760e01b8152600490fd5b82518110156127ea5784848260051b850101515116858716146127de5788016127a1565b96505050505050915090565b634e487b7160e01b82526032600452602482fdfea2646970667358221220f554551ff3e729f1635fd04bc7387451e5771a9c1b86d6caec1a8972a1ab090764736f6c634300080f0033