Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 119 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Sell Tokens | 24422652 | 17 days ago | IN | 0 ETH | 0.0001372 | ||||
| Withdraw ETH | 24405123 | 19 days ago | IN | 0 ETH | 0.00007383 | ||||
| Sell Tokens | 24395046 | 20 days ago | IN | 0 ETH | 0.00036612 | ||||
| Buy Tokens | 24372939 | 24 days ago | IN | 0.00166666 ETH | 0.00015877 | ||||
| Sell Tokens | 24372917 | 24 days ago | IN | 0 ETH | 0.0001379 | ||||
| Buy Tokens | 24372895 | 24 days ago | IN | 0.00166666 ETH | 0.00015877 | ||||
| Buy Tokens | 24372872 | 24 days ago | IN | 0.00166666 ETH | 0.00015877 | ||||
| Sell Tokens | 24372846 | 24 days ago | IN | 0 ETH | 0.0001379 | ||||
| Buy Tokens | 24372825 | 24 days ago | IN | 0.00166666 ETH | 0.00015877 | ||||
| Sell Tokens | 24372795 | 24 days ago | IN | 0 ETH | 0.0001379 | ||||
| Buy Tokens | 24372781 | 24 days ago | IN | 0.00333333 ETH | 0.00015877 | ||||
| Sell Tokens | 24372760 | 24 days ago | IN | 0 ETH | 0.0001379 | ||||
| Buy Tokens | 24372745 | 24 days ago | IN | 0.00333333 ETH | 0.00014167 | ||||
| Withdraw ETH | 24372736 | 24 days ago | IN | 0 ETH | 0.00007419 | ||||
| Buy Tokens | 24372728 | 24 days ago | IN | 0.00333333 ETH | 0.00014167 | ||||
| Sell Tokens | 24372711 | 24 days ago | IN | 0 ETH | 0.00029702 | ||||
| Sell Tokens | 24372694 | 24 days ago | IN | 0 ETH | 0.00029791 | ||||
| Buy Tokens | 24372663 | 24 days ago | IN | 0.00194387 ETH | 0.00014167 | ||||
| Buy Tokens | 24372613 | 24 days ago | IN | 0.01666666 ETH | 0.00015877 | ||||
| Sell Tokens | 24372605 | 24 days ago | IN | 0 ETH | 0.00014101 | ||||
| Buy Tokens | 24372597 | 24 days ago | IN | 0.01435842 ETH | 0.00014167 | ||||
| Buy Tokens | 24372582 | 24 days ago | IN | 0.01586616 ETH | 0.00014789 | ||||
| Buy Tokens | 24345090 | 27 days ago | IN | 0.00617666 ETH | 0.00015877 | ||||
| Sell Tokens | 24345086 | 27 days ago | IN | 0 ETH | 0.0001379 | ||||
| Buy Tokens | 24345079 | 27 days ago | IN | 0.00758604 ETH | 0.00015877 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24405123 | 19 days ago | 0.13478572 ETH | ||||
| Transfer | 24395046 | 20 days ago | 0.02112737 ETH | ||||
| Transfer | 24372917 | 24 days ago | 0.00165211 ETH | ||||
| Transfer | 24372846 | 24 days ago | 0.00166101 ETH | ||||
| Transfer | 24372795 | 24 days ago | 0.00233416 ETH | ||||
| Transfer | 24372760 | 24 days ago | 0.00399898 ETH | ||||
| Transfer | 24372736 | 24 days ago | 0.04279074 ETH | ||||
| Transfer | 24372711 | 24 days ago | 0.00005247 ETH | ||||
| Transfer | 24372694 | 24 days ago | 0.01290352 ETH | ||||
| Transfer | 24372605 | 24 days ago | 0.01798913 ETH | ||||
| Transfer | 24345086 | 27 days ago | 0.00593068 ETH | ||||
| Transfer | 24345069 | 27 days ago | 0.00720661 ETH | ||||
| Transfer | 24344850 | 27 days ago | 0.00328215 ETH | ||||
| Transfer | 24344834 | 27 days ago | 0.0032694 ETH | ||||
| Transfer | 24344819 | 27 days ago | 0.0057096 ETH | ||||
| Transfer | 24344808 | 27 days ago | 0.00639605 ETH | ||||
| Transfer | 24344792 | 27 days ago | 0.00773617 ETH | ||||
| Transfer | 24342442 | 28 days ago | 0.00328451 ETH | ||||
| Transfer | 24341715 | 28 days ago | 0.00327021 ETH | ||||
| Transfer | 24337650 | 28 days ago | 0.00326754 ETH | ||||
| Transfer | 24336692 | 29 days ago | 0.00329452 ETH | ||||
| Transfer | 24336677 | 29 days ago | 0.00328851 ETH | ||||
| Transfer | 24336587 | 29 days ago | 0.00326159 ETH | ||||
| Transfer | 24336535 | 29 days ago | 0.00328372 ETH | ||||
| Transfer | 24335940 | 29 days ago | 0.0033054 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CMTDE_V3_TradingModule
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2026-01-03
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
/**
* ═══════════════════════════════════════════════════════════════════════════
* CMTDE V3 TRADING MODULE - BUY/SELL & ORACLE INTEGRATION
* ═══════════════════════════════════════════════════════════════════════════
*
* @title CMTDE_V3_TradingModule
* @dev Handles token purchases, sales, and gold price oracle integration
* @notice Deploy with: (CMTDE_V3 address, ConfigRegistry address, XAU/USD Feed, Backup XAU Feed, ETH/USD Feed)
*
* Changes to this module require 24-hour timelock via CMTDE_V3.
*
* MAINNET CHAINLINK ORACLES:
* - XAU/USD (Gold): 0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
* - ETH/USD: 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
*
* PRICING MODEL:
* - 100 CMTDE tokens = 1 oz of gold (XAU)
* - 1 CMTDE token = goldPrice / 100 (e.g., $4,313.49 / 100 = $43.13)
* - ETH/USD oracle converts user's ETH to USD value for calculations
* ═══════════════════════════════════════════════════════════════════════════
*/
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function latestRoundData() external view returns (
uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound
);
}
interface ICMTDE_V3_ConfigRegistry {
function minGoldPrice() external view returns (uint256);
function maxGoldPrice() external view returns (uint256);
function priceStalenessThreshold() external view returns (uint256);
function priceMarkup() external view returns (uint256);
function priceDiscount() external view returns (uint256);
function maxMintPerTx() external view returns (uint256);
function maxDailyMint() external view returns (uint256);
function maxPurchasePerTx() external view returns (uint256);
function maxDailyPurchase() external view returns (uint256);
function minPurchaseETH() external view returns (uint256);
function maxPurchaseETH() external view returns (uint256);
function maxSellPerTx() external view returns (uint256);
function maxDailySell() external view returns (uint256);
function minSellTokens() external view returns (uint256);
function minContractBalance() external view returns (uint256);
function purchaseEnabled() external view returns (bool);
function sellEnabled() external view returns (bool);
function manualPriceEnabled() external view returns (bool);
function emergencyFallbackEnabled() external view returns (bool);
}
interface ICMTDE_V3 {
function mint(address to, uint256 amount) external;
function moduleBurn(address account, uint256 amount) external;
function balanceOf(address account) external view returns (uint256);
}
contract CMTDE_V3_TradingModule {
// ═══════════════════════════════════════════════════════════════════
// STATE VARIABLES
// ═══════════════════════════════════════════════════════════════════
address public owner;
address public pendingOwner;
address public coreToken;
address public configRegistry;
AggregatorV3Interface public goldPriceFeed;
AggregatorV3Interface public backupPriceFeed;
AggregatorV3Interface public ethUsdPriceFeed;
uint256 public manualGoldPrice;
uint256 public manualPriceTimestamp;
uint256 public emergencyFallbackPrice;
// Daily limits tracking
uint256 public dailyPurchaseAmount;
uint256 public lastPurchaseResetTime;
uint256 public dailySellAmount;
uint256 public lastSellResetTime;
uint256 private constant MANUAL_PRICE_VALIDITY = 86400; // 24 hours
bool private _locked;
// ═══════════════════════════════════════════════════════════════════
// EVENTS
// ═══════════════════════════════════════════════════════════════════
event TokensPurchased(address indexed buyer, uint256 ethAmount, uint256 tokenAmount, uint256 tokenPrice);
event TokensSold(address indexed seller, uint256 tokenAmount, uint256 ethAmount, uint256 tokenPrice);
event LiquidityAdded(address indexed provider, uint256 amount);
event LiquidityWithdrawn(address indexed provider, uint256 amount);
event ManualPriceSet(uint256 price, uint256 timestamp);
event EmergencyFallbackSet(uint256 price);
event OracleUpdated(string indexed oracleType, address oldAddress, address newAddress);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
// ═══════════════════════════════════════════════════════════════════
// MODIFIERS
// ═══════════════════════════════════════════════════════════════════
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
modifier nonReentrant() {
require(!_locked, "Reentrant call");
_locked = true;
_;
_locked = false;
}
// ═══════════════════════════════════════════════════════════════════
// CONSTRUCTOR
// ═══════════════════════════════════════════════════════════════════
constructor(
address _coreToken,
address _configRegistry,
address _goldPriceFeed,
address _backupPriceFeed,
address _ethUsdPriceFeed
) {
require(_coreToken != address(0), "Zero token");
require(_configRegistry != address(0), "Zero config");
require(_goldPriceFeed != address(0), "Zero gold feed");
require(_ethUsdPriceFeed != address(0), "Zero ETH feed");
owner = msg.sender;
coreToken = _coreToken;
configRegistry = _configRegistry;
goldPriceFeed = AggregatorV3Interface(_goldPriceFeed);
backupPriceFeed = AggregatorV3Interface(_backupPriceFeed);
ethUsdPriceFeed = AggregatorV3Interface(_ethUsdPriceFeed);
lastPurchaseResetTime = block.timestamp;
lastSellResetTime = block.timestamp;
}
// ═══════════════════════════════════════════════════════════════════
// PRICE ORACLE
// ═══════════════════════════════════════════════════════════════════
function getLatestGoldPrice() public view returns (uint256) {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
// Check manual price first
if (config.manualPriceEnabled() && manualGoldPrice > 0) {
require(block.timestamp - manualPriceTimestamp <= MANUAL_PRICE_VALIDITY, "Manual price stale");
return manualGoldPrice;
}
return _getValidatedPrice(goldPriceFeed, config);
}
function _getValidatedPrice(AggregatorV3Interface priceFeed, ICMTDE_V3_ConfigRegistry config) internal view returns (uint256) {
(
uint80 roundId,
int256 price,
,
uint256 timeStamp,
uint80 answeredInRound
) = priceFeed.latestRoundData();
require(timeStamp > 0, "Invalid timestamp");
require(answeredInRound >= roundId, "Stale round");
require(block.timestamp - timeStamp <= config.priceStalenessThreshold(), "Oracle stale");
require(price > 0, "Invalid price");
uint256 uPrice = uint256(price);
require(uPrice >= config.minGoldPrice(), "Price below minimum");
require(uPrice <= config.maxGoldPrice(), "Price above maximum");
return uPrice;
}
function getGoldPriceWithFallback() public view returns (uint256) {
try this.getLatestGoldPrice() returns (uint256 price) {
return price;
} catch {
// Try backup feed
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
try this._tryBackupFeed() returns (uint256 backupPrice) {
return backupPrice;
} catch {
// Emergency fallback
require(config.emergencyFallbackEnabled(), "No fallback enabled");
require(emergencyFallbackPrice > 0, "No fallback price");
return emergencyFallbackPrice;
}
}
}
function _tryBackupFeed() external view returns (uint256) {
return _getValidatedPrice(backupPriceFeed, ICMTDE_V3_ConfigRegistry(configRegistry));
}
/**
* @dev Get current ETH/USD price from Chainlink
* @return ETH price in USD (8 decimals)
*/
function getEthUsdPrice() public view returns (uint256) {
(
uint80 roundId,
int256 price,
,
uint256 timeStamp,
uint80 answeredInRound
) = ethUsdPriceFeed.latestRoundData();
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
require(timeStamp > 0, "ETH: Invalid timestamp");
require(answeredInRound >= roundId, "ETH: Stale round");
require(block.timestamp - timeStamp <= config.priceStalenessThreshold(), "ETH: Oracle stale");
require(price > 0, "ETH: Invalid price");
uint256 uPrice = uint256(price);
// Sanity bounds for ETH: $100 - $100,000
require(uPrice >= 100 * 10**8, "ETH: Price too low");
require(uPrice <= 100000 * 10**8, "ETH: Price too high");
return uPrice;
}
/**
* @dev Convert ETH amount (wei) to USD value (8 decimals)
* @param ethAmount Amount of ETH in wei
* @return USD value with 8 decimals
*/
function ethToUsd(uint256 ethAmount) public view returns (uint256) {
uint256 ethPrice = getEthUsdPrice(); // 8 decimals
// ethAmount (18 decimals) * ethPrice (8 decimals) / 1e18 = USD (8 decimals)
return (ethAmount * ethPrice) / 1e18;
}
/**
* @dev Convert USD amount (8 decimals) to ETH value (wei)
* @param usdAmount Amount of USD with 8 decimals
* @return ETH value in wei (18 decimals)
*/
function usdToEth(uint256 usdAmount) public view returns (uint256) {
uint256 ethPrice = getEthUsdPrice(); // 8 decimals
// usdAmount (8 decimals) * 1e18 / ethPrice (8 decimals) = ETH (18 decimals)
return (usdAmount * 1e18) / ethPrice;
}
/**
* @dev Get current token value based on gold price
* @return Price per 1 token (8 decimals)
* @notice 100 tokens = 1 oz gold, so 1 token = goldPrice / 100
*/
function getCurrentTokenValue() public view returns (uint256) {
uint256 goldPrice = getGoldPriceWithFallback();
return (goldPrice + 50) / 100; // Price per 1 token, rounded
}
/**
* @dev Get token purchase price with markup
* @return Price per 1 token (8 decimals)
*/
function getTokenPurchasePrice() public view returns (uint256) {
uint256 basePrice = getCurrentTokenValue();
uint256 markup = ICMTDE_V3_ConfigRegistry(configRegistry).priceMarkup();
return (basePrice * markup) / 100;
}
/**
* @dev Get token sell price with discount
* @return Price per 1 token (8 decimals)
*/
function getTokenSellPrice() public view returns (uint256) {
uint256 basePrice = getCurrentTokenValue();
uint256 discount = ICMTDE_V3_ConfigRegistry(configRegistry).priceDiscount();
return (basePrice * discount) / 100;
}
// ═══════════════════════════════════════════════════════════════════
// BUY/SELL FUNCTIONS
// ═══════════════════════════════════════════════════════════════════
/**
* @dev Buy tokens with ETH
* @notice Converts ETH to USD value, then calculates tokens based on gold price
*
* Formula:
* 1. usdValue = ETH amount × ETH/USD price
* 2. tokens = usdValue / tokenPrice
*/
function buyTokens() external payable nonReentrant {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
require(config.purchaseEnabled(), "Purchases disabled");
require(msg.value >= config.minPurchaseETH(), "Below min ETH");
require(msg.value <= config.maxPurchaseETH(), "Above max ETH");
// Reset daily counter if needed
if (block.timestamp - lastPurchaseResetTime >= 86400) {
dailyPurchaseAmount = 0;
lastPurchaseResetTime = block.timestamp;
}
// Convert ETH to USD value (8 decimals)
uint256 usdValue = ethToUsd(msg.value);
// Get token price with markup (8 decimals, price per 1 token)
uint256 tokenPrice = getTokenPurchasePrice();
// Calculate tokens: (usdValue * 1e18) / tokenPrice
// usdValue (8 dec) * 1e18 / tokenPrice (8 dec) = tokens (18 dec)
uint256 tokensAmount = (usdValue * 1e18) / tokenPrice;
require(tokensAmount > 0, "Zero tokens");
require(tokensAmount <= config.maxPurchasePerTx(), "Exceeds tx limit");
require(dailyPurchaseAmount + tokensAmount <= config.maxDailyPurchase(), "Exceeds daily limit");
dailyPurchaseAmount += tokensAmount;
ICMTDE_V3(coreToken).mint(msg.sender, tokensAmount);
emit TokensPurchased(msg.sender, msg.value, tokensAmount, tokenPrice);
}
/**
* @dev Sell tokens for ETH
* @param tokenAmount Number of tokens to sell (18 decimals)
* @notice Converts token value to USD, then to ETH
*
* Formula:
* 1. usdValue = tokens × tokenPrice
* 2. ethAmount = usdValue / ETH price
*/
function sellTokens(uint256 tokenAmount) external nonReentrant {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
require(config.sellEnabled(), "Sales disabled");
require(tokenAmount >= config.minSellTokens(), "Below min tokens");
require(tokenAmount <= config.maxSellPerTx(), "Above max tokens");
require(ICMTDE_V3(coreToken).balanceOf(msg.sender) >= tokenAmount, "Insufficient balance");
// Reset daily counter if needed
if (block.timestamp - lastSellResetTime >= 86400) {
dailySellAmount = 0;
lastSellResetTime = block.timestamp;
}
require(dailySellAmount + tokenAmount <= config.maxDailySell(), "Exceeds daily limit");
// Get token price with discount (8 decimals, price per 1 token)
uint256 tokenPrice = getTokenSellPrice();
// Calculate USD value of tokens: (tokenAmount * tokenPrice) / 1e18
// tokenAmount (18 dec) * tokenPrice (8 dec) / 1e18 = usdValue (8 dec)
uint256 usdValue = (tokenAmount * tokenPrice) / 1e18;
// Convert USD value to ETH
uint256 ethAmount = usdToEth(usdValue);
require(address(this).balance >= ethAmount + config.minContractBalance(), "Insufficient liquidity");
dailySellAmount += tokenAmount;
ICMTDE_V3(coreToken).moduleBurn(msg.sender, tokenAmount);
(bool success, ) = payable(msg.sender).call{value: ethAmount}("");
require(success, "ETH transfer failed");
emit TokensSold(msg.sender, tokenAmount, ethAmount, tokenPrice);
}
// ═══════════════════════════════════════════════════════════════════
// PEG STATUS & ARBITRAGE
// ═══════════════════════════════════════════════════════════════════
/**
* @dev Get comprehensive peg status
*/
function getPegStatus() external view returns (
uint256 oracleGoldPrice,
uint256 contractBuyPrice,
uint256 contractSellPrice,
uint256 spreadBps,
uint256 ethLiquidity,
bool canAcceptSells,
uint256 maxBuyableTokens
) {
oracleGoldPrice = getGoldPriceWithFallback();
contractBuyPrice = getTokenPurchasePrice();
contractSellPrice = getTokenSellPrice();
if (contractBuyPrice > 0) {
spreadBps = ((contractBuyPrice - contractSellPrice) * 10000) / contractBuyPrice;
}
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
ethLiquidity = address(this).balance;
uint256 minBalance = config.minContractBalance();
canAcceptSells = ethLiquidity > minBalance;
if (canAcceptSells && contractSellPrice > 0) {
// Convert available ETH to USD, then calculate max tokens
uint256 availableUsd = ethToUsd(ethLiquidity - minBalance);
maxBuyableTokens = (availableUsd * 1e18) / contractSellPrice;
}
}
/**
* @dev Calculate arbitrage opportunity
* @param dexPrice Current DEX price (8 decimals, per 1 token in USD)
*/
function calculateArbitrageOpportunity(uint256 dexPrice) external view returns (
uint8 arbDirection,
uint256 profitBps,
uint256 optimalAmount,
string memory arbDescription
) {
uint256 contractBuyPrice = getTokenPurchasePrice();
uint256 contractSellPrice = getTokenSellPrice();
if (dexPrice == 0 || contractBuyPrice == 0 || contractSellPrice == 0) {
return (0, 0, 0, "Invalid prices");
}
// Buy on DEX, sell to contract
if (dexPrice < contractSellPrice) {
profitBps = ((contractSellPrice - dexPrice) * 10000) / dexPrice;
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
uint256 availableETH = address(this).balance;
uint256 minBalance = config.minContractBalance();
if (availableETH > minBalance) {
// Convert available ETH to USD, then calculate max tokens
uint256 availableUsd = ethToUsd(availableETH - minBalance);
uint256 maxSellable = (availableUsd * 1e18) / contractSellPrice;
uint256 dailyLimit = config.maxSellPerTx();
optimalAmount = maxSellable < dailyLimit ? maxSellable : dailyLimit;
}
return (1, profitBps, optimalAmount, "Buy on DEX, sell to contract");
}
// Buy from contract, sell on DEX
if (dexPrice > contractBuyPrice) {
profitBps = ((dexPrice - contractBuyPrice) * 10000) / contractBuyPrice;
optimalAmount = ICMTDE_V3_ConfigRegistry(configRegistry).maxPurchasePerTx();
return (2, profitBps, optimalAmount, "Buy from contract, sell on DEX");
}
return (0, 0, 0, "No profitable arbitrage");
}
/**
* @dev Check if DEX price is within tolerance of oracle price
*/
function checkPegHealth(uint256 dexPrice, uint256 toleranceBps) external view returns (
bool isPegged,
uint256 deviationBps,
uint8 deviationDirection
) {
uint256 oraclePrice = getCurrentTokenValue();
if (dexPrice == 0 || oraclePrice == 0) {
return (false, 10000, 0);
}
if (dexPrice >= oraclePrice) {
deviationBps = ((dexPrice - oraclePrice) * 10000) / oraclePrice;
deviationDirection = 2; // DEX above oracle
} else {
deviationBps = ((oraclePrice - dexPrice) * 10000) / oraclePrice;
deviationDirection = 1; // DEX below oracle
}
isPegged = deviationBps <= toleranceBps;
}
/**
* @dev Simulate a buy to preview results
*/
function simulateBuy(uint256 ethAmount) external view returns (
uint256 tokensOut,
uint256 effectivePrice,
bool withinLimits
) {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
if (ethAmount < config.minPurchaseETH() || ethAmount > config.maxPurchaseETH()) {
return (0, 0, false);
}
// Convert ETH to USD
uint256 usdValue = ethToUsd(ethAmount);
effectivePrice = getTokenPurchasePrice(); // Price per 1 token (8 decimals)
tokensOut = (usdValue * 1e18) / effectivePrice;
uint256 remainingDaily = config.maxDailyPurchase() - dailyPurchaseAmount;
withinLimits = tokensOut <= config.maxPurchasePerTx() && tokensOut <= remainingDaily;
}
/**
* @dev Simulate a sell to preview results
*/
function simulateSell(uint256 tokenAmount) external view returns (
uint256 ethOut,
uint256 effectivePrice,
bool withinLimits
) {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
if (tokenAmount < config.minSellTokens() || tokenAmount > config.maxSellPerTx()) {
return (0, 0, false);
}
effectivePrice = getTokenSellPrice(); // Price per 1 token (8 decimals)
// Calculate USD value then convert to ETH
uint256 usdValue = (tokenAmount * effectivePrice) / 1e18;
ethOut = usdToEth(usdValue);
uint256 remainingDaily = config.maxDailySell() - dailySellAmount;
bool withinDailyLimit = tokenAmount <= remainingDaily;
bool hasLiquidity = address(this).balance >= ethOut + config.minContractBalance();
withinLimits = withinDailyLimit && hasLiquidity;
}
// ═══════════════════════════════════════════════════════════════════
// LIQUIDITY MANAGEMENT
// ═══════════════════════════════════════════════════════════════════
function addLiquidity() external payable onlyOwner {
require(msg.value > 0, "No ETH sent");
emit LiquidityAdded(msg.sender, msg.value);
}
function withdrawETH(uint256 amount) external onlyOwner {
require(amount <= address(this).balance, "Insufficient balance");
(bool success, ) = payable(owner).call{value: amount}("");
require(success, "ETH transfer failed");
emit LiquidityWithdrawn(owner, amount);
}
function getETHBalance() external view returns (uint256) {
return address(this).balance;
}
receive() external payable {
require(msg.sender == owner, "Only owner can send ETH directly");
}
// ═══════════════════════════════════════════════════════════════════
// ORACLE MANAGEMENT
// ═══════════════════════════════════════════════════════════════════
function setManualGoldPrice(uint256 price) external onlyOwner {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
require(price >= config.minGoldPrice(), "Price below minimum");
require(price <= config.maxGoldPrice(), "Price above maximum");
manualGoldPrice = price;
manualPriceTimestamp = block.timestamp;
emit ManualPriceSet(price, block.timestamp);
}
function clearManualPrice() external onlyOwner {
manualGoldPrice = 0;
manualPriceTimestamp = 0;
}
function setEmergencyFallbackPrice(uint256 price) external onlyOwner {
ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
require(price >= config.minGoldPrice(), "Price below minimum");
require(price <= config.maxGoldPrice(), "Price above maximum");
emergencyFallbackPrice = price;
emit EmergencyFallbackSet(price);
}
function setPrimaryOracle(address _oracle) external onlyOwner {
require(_oracle != address(0), "Zero address");
address old = address(goldPriceFeed);
goldPriceFeed = AggregatorV3Interface(_oracle);
emit OracleUpdated("Primary", old, _oracle);
}
function setBackupOracle(address _oracle) external onlyOwner {
address old = address(backupPriceFeed);
backupPriceFeed = AggregatorV3Interface(_oracle);
emit OracleUpdated("Backup", old, _oracle);
}
function setEthUsdOracle(address _oracle) external onlyOwner {
require(_oracle != address(0), "Zero address");
address old = address(ethUsdPriceFeed);
ethUsdPriceFeed = AggregatorV3Interface(_oracle);
emit OracleUpdated("ETH/USD", old, _oracle);
}
// ═══════════════════════════════════════════════════════════════════
// OWNERSHIP (2-step)
// ═══════════════════════════════════════════════════════════════════
function transferOwnership(address newOwner) external onlyOwner {
require(newOwner != address(0), "Zero address");
pendingOwner = newOwner;
}
function acceptOwnership() external {
require(msg.sender == pendingOwner, "Not pending owner");
address oldOwner = owner;
owner = pendingOwner;
pendingOwner = address(0);
emit OwnershipTransferred(oldOwner, owner);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_coreToken","type":"address"},{"internalType":"address","name":"_configRegistry","type":"address"},{"internalType":"address","name":"_goldPriceFeed","type":"address"},{"internalType":"address","name":"_backupPriceFeed","type":"address"},{"internalType":"address","name":"_ethUsdPriceFeed","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"EmergencyFallbackSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ManualPriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oracleType","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"OracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenPrice","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenPrice","type":"uint256"}],"name":"TokensSold","type":"event"},{"inputs":[],"name":"_tryBackupFeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"backupPriceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dexPrice","type":"uint256"}],"name":"calculateArbitrageOpportunity","outputs":[{"internalType":"uint8","name":"arbDirection","type":"uint8"},{"internalType":"uint256","name":"profitBps","type":"uint256"},{"internalType":"uint256","name":"optimalAmount","type":"uint256"},{"internalType":"string","name":"arbDescription","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dexPrice","type":"uint256"},{"internalType":"uint256","name":"toleranceBps","type":"uint256"}],"name":"checkPegHealth","outputs":[{"internalType":"bool","name":"isPegged","type":"bool"},{"internalType":"uint256","name":"deviationBps","type":"uint256"},{"internalType":"uint8","name":"deviationDirection","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearManualPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"configRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coreToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailySellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyFallbackPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"ethToUsd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethUsdPriceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTokenValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGoldPriceWithFallback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestGoldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegStatus","outputs":[{"internalType":"uint256","name":"oracleGoldPrice","type":"uint256"},{"internalType":"uint256","name":"contractBuyPrice","type":"uint256"},{"internalType":"uint256","name":"contractSellPrice","type":"uint256"},{"internalType":"uint256","name":"spreadBps","type":"uint256"},{"internalType":"uint256","name":"ethLiquidity","type":"uint256"},{"internalType":"bool","name":"canAcceptSells","type":"bool"},{"internalType":"uint256","name":"maxBuyableTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPurchasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldPriceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPurchaseResetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSellResetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGoldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualPriceTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sellTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setBackupOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setEmergencyFallbackPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setEthUsdOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setManualGoldPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setPrimaryOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"simulateBuy","outputs":[{"internalType":"uint256","name":"tokensOut","type":"uint256"},{"internalType":"uint256","name":"effectivePrice","type":"uint256"},{"internalType":"bool","name":"withinLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"simulateSell","outputs":[{"internalType":"uint256","name":"ethOut","type":"uint256"},{"internalType":"uint256","name":"effectivePrice","type":"uint256"},{"internalType":"bool","name":"withinLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"usdToEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801562000010575f80fd5b506040516200324c3803806200324c8339810160408190526200003391620001e4565b6001600160a01b0385166200007c5760405162461bcd60e51b815260206004820152600a6024820152692d32b937903a37b5b2b760b11b60448201526064015b60405180910390fd5b6001600160a01b038416620000c25760405162461bcd60e51b815260206004820152600b60248201526a5a65726f20636f6e66696760a81b604482015260640162000073565b6001600160a01b0383166200010b5760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc819dbdb19081999595960921b604482015260640162000073565b6001600160a01b038116620001535760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc81155120819995959609a1b604482015260640162000073565b5f8054336001600160a01b0319918216179091556002805482166001600160a01b03978816179055600380548216958716959095179094556004805485169386169390931790925560058054841691851691909117905560068054909216921691909117905542600b819055600d5562000250565b80516001600160a01b0381168114620001df575f80fd5b919050565b5f805f805f60a08688031215620001f9575f80fd5b6200020486620001c8565b94506200021460208701620001c8565b93506200022460408701620001c8565b92506200023460608701620001c8565b91506200024460808701620001c8565b90509295509295909350565b612fee806200025e5f395ff3fe608060405260043610610241575f3560e01c806398b9a0f511610134578063da69d189116100b3578063e8078d9411610078578063e8078d94146106b7578063f14210a6146106bf578063f2188066146106de578063f2fde38b146106fd578063f79f6b591461071c578063fcd872cf1461074b575f80fd5b8063da69d18914610606578063ddca8e7c1461061a578063e1027bec14610665578063e30c397814610679578063e6b349b314610698575f80fd5b8063c0129e9b116100f9578063c0129e9b146105a3578063c422f9d0146105b7578063c9b3e736146105d6578063c9ce9c69146105ea578063d0febe4c146105fe575f80fd5b806398b9a0f5146104f65780639d8bce5114610515578063a0a8045e14610551578063a3cf3d4e14610565578063bcecf66714610584575f80fd5b80635e2de42a116101c057806379ba50971161018557806379ba50971461047b5780637a1c22131461048f5780637a296fd2146104a45780638da5cb5b146104b9578063946d1480146104d7575f80fd5b80635e2de42a1461040c5780636085aec314610421578063677aa974146104355780636c11bcd31461044a5780636e94729814610469575f80fd5b80632f7e177e116102065780632f7e177e146103865780633072f1f91461039a5780633c26651a146103af57806342f6fb29146103ce578063479069c7146103ed575f80fd5b806301eb1e0a146102aa5780630c2b72e9146102d25780630e1ac56e14610309578063244bb309146103485780632549840114610367575f80fd5b366102a6575f546001600160a01b031633146102a45760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722063616e2073656e6420455448206469726563746c7960448201526064015b60405180910390fd5b005b5f80fd5b3480156102b5575f80fd5b506102bf60075481565b6040519081526020015b60405180910390f35b3480156102dd575f80fd5b506002546102f1906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b348015610314575f80fd5b50610328610323366004612d4c565b610760565b604080519315158452602084019290925260ff16908201526060016102c9565b348015610353575f80fd5b506003546102f1906001600160a01b031681565b348015610372575f80fd5b506102a4610381366004612d6c565b6107f9565b348015610391575f80fd5b506102bf6108ab565b3480156103a5575f80fd5b506102bf600c5481565b3480156103ba575f80fd5b506102a46103c9366004612d92565b6109a4565b3480156103d9575f80fd5b506006546102f1906001600160a01b031681565b3480156103f8575f80fd5b506005546102f1906001600160a01b031681565b348015610417575f80fd5b506102bf600d5481565b34801561042c575f80fd5b506102a4610b15565b348015610440575f80fd5b506102bf60085481565b348015610455575f80fd5b506102a4610464366004612d92565b610b49565b348015610474575f80fd5b50476102bf565b348015610486575f80fd5b506102a4611147565b34801561049a575f80fd5b506102bf600b5481565b3480156104af575f80fd5b506102bf600a5481565b3480156104c4575f80fd5b505f546102f1906001600160a01b031681565b3480156104e2575f80fd5b506102bf6104f1366004612d92565b6111ee565b348015610501575f80fd5b506102a4610510366004612d92565b61121e565b348015610520575f80fd5b5061053461052f366004612d92565b611394565b6040805193845260208401929092521515908201526060016102c9565b34801561055c575f80fd5b506102bf6115c3565b348015610570575f80fd5b5061053461057f366004612d92565b611880565b34801561058f575f80fd5b506102bf61059e366004612d92565b611a99565b3480156105ae575f80fd5b506102bf611ab8565b3480156105c2575f80fd5b506004546102f1906001600160a01b031681565b3480156105e1575f80fd5b506102bf611adb565b3480156105f5575f80fd5b506102bf611b7b565b6102a4611d3f565b348015610611575f80fd5b506102bf61222c565b348015610625575f80fd5b5061062e61224f565b6040805197885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e0016102c9565b348015610670575f80fd5b506102bf612365565b348015610684575f80fd5b506001546102f1906001600160a01b031681565b3480156106a3575f80fd5b506102a46106b2366004612d6c565b6123c2565b6102a461244c565b3480156106ca575f80fd5b506102a46106d9366004612d92565b6124e9565b3480156106e9575f80fd5b506102a46106f8366004612d6c565b61262d565b348015610708575f80fd5b506102a4610717366004612d6c565b6126b7565b348015610727575f80fd5b5061073b610736366004612d92565b612728565b6040516102c99493929190612da9565b348015610756575f80fd5b506102bf60095481565b5f805f8061076c611ab8565b9050851580610779575080155b1561078f575f6127105f935093509350506107f2565b8086106107c257806107a18188612e21565b6107ad90612710612e34565b6107b79190612e4b565b9250600291506107ea565b806107cd8782612e21565b6107d990612710612e34565b6107e39190612e4b565b9250600191505b848311159350505b9250925092565b5f546001600160a01b031633146108225760405162461bcd60e51b815260040161029b90612e6a565b600580546001600160a01b038381166001600160a01b031983161790925560405191169061085c906504261636b75760d41b815260060190565b604080519182900382206001600160a01b03808516845285166020840152917f4c247df77fd31829837512d6c006db1212e42ae4ea8a129aec0b44c1019a23ad91015b60405180910390a25050565b60035460408051635fd2b6af60e01b815290515f926001600160a01b0316918291635fd2b6af916004808201926020929091908290030181865afa1580156108f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109199190612e8d565b801561092657505f600754115b1561098857620151806008544261093d9190612e21565b11156109805760405162461bcd60e51b81526020600482015260126024820152714d616e75616c207072696365207374616c6560701b604482015260640161029b565b505060075490565b60045461099e906001600160a01b031682612a58565b91505090565b5f546001600160a01b031633146109cd5760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015610a16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612eac565b821015610a595760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab99190612eac565b821115610ad85760405162461bcd60e51b815260040161029b90612ef0565b60098290556040518281527f67e14a6d7ceb1fe07cc9a741b4a87cf22d19a27f9e009ff5e7473b85bb13f262906020015b60405180910390a15050565b5f546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161029b90612e6a565b5f6007819055600855565b600e5460ff1615610b8d5760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff19166001179055600354604080516358197a9d60e01b815290516001600160a01b039092169182916358197a9d9160048083019260209291908290030181865afa158015610be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c079190612e8d565b610c445760405162461bcd60e51b815260206004820152600e60248201526d14d85b195cc8191a5cd8589b195960921b604482015260640161029b565b806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca49190612eac565b821015610ce65760405162461bcd60e51b815260206004820152601060248201526f42656c6f77206d696e20746f6b656e7360801b604482015260640161029b565b806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d469190612eac565b821115610d885760405162461bcd60e51b815260206004820152601060248201526f41626f7665206d617820746f6b656e7360801b604482015260640161029b565b6002546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015610dce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df29190612eac565b1015610e375760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b62015180600d5442610e499190612e21565b10610e57575f600c5542600d555b806001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb79190612eac565b82600c54610ec59190612f1d565b1115610f095760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b5f610f12611adb565b90505f670de0b6b3a7640000610f288386612e34565b610f329190612e4b565b90505f610f3e82611a99565b9050836001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa09190612eac565b610faa9082612f1d565b471015610ff25760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206c697175696469747960501b604482015260640161029b565b84600c5f8282546110039190612f1d565b90915550506002546040516348dcc70760e11b8152336004820152602481018790526001600160a01b03909116906391b98e0e906044015f604051808303815f87803b158015611051575f80fd5b505af1158015611063573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f81146110a6576040519150601f19603f3d011682016040523d82523d5f602084013e6110ab565b606091505b50509050806110f25760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b604080518781526020810184905290810185905233907f6db63bebf1e6540277744df32846ebdb98385b1a73f2d5de49b28348add63f509060600160405180910390a25050600e805460ff1916905550505050565b6001546001600160a01b031633146111955760405162461bcd60e51b81526020600482015260116024820152702737ba103832b73234b7339037bbb732b960791b604482015260640161029b565b5f8054600180546001600160a01b038082166001600160a01b031980861682178755909216909255604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f806111f86115c3565b9050670de0b6b3a764000061120d8285612e34565b6112179190612e4b565b9392505050565b5f546001600160a01b031633146112475760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015611290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b49190612eac565b8210156112d35760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113339190612eac565b8211156113525760405162461bcd60e51b815260040161029b90612ef0565b60078290554260088190556040805184815260208101929092527fb4e7056b10bc2d2d4fe5b2ff374b24edf94410f4620866b12b3bcf1765d918949101610b09565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140f9190612eac565b85108061147a5750806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611453573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114779190612eac565b85115b1561148e575f805f935093509350506115bc565b611496611adb565b92505f670de0b6b3a76400006114ac8588612e34565b6114b69190612e4b565b90506114c181611a99565b94505f600c54836001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190612eac565b6115319190612e21565b90505f8188111590505f846001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190612eac565b6115a59089612f1d565b47101590508180156115b45750805b955050505050505b9193909250565b5f805f805f60065f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611618573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163c9190612f46565b6003549498509296509450909250506001600160a01b03168261169a5760405162461bcd60e51b815260206004820152601660248201527504554483a20496e76616c69642074696d657374616d760541b604482015260640161029b565b846001600160501b0316826001600160501b031610156116ef5760405162461bcd60e51b815260206004820152601060248201526f1155120e8814dd185b19481c9bdd5b9960821b604482015260640161029b565b806001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174f9190612eac565b6117598442612e21565b111561179b5760405162461bcd60e51b81526020600482015260116024820152704554483a204f7261636c65207374616c6560781b604482015260640161029b565b5f84136117df5760405162461bcd60e51b81526020600482015260126024820152714554483a20496e76616c696420707269636560701b604482015260640161029b565b836402540be40081101561182a5760405162461bcd60e51b81526020600482015260126024820152714554483a20507269636520746f6f206c6f7760701b604482015260640161029b565b6509184e72a0008111156118765760405162461bcd60e51b815260206004820152601360248201527208aa8907440a0e4d2c6ca40e8dede40d0d2ced606b1b604482015260640161029b565b9695505050505050565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118fb9190612eac565b8510806119665750806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190612eac565b85115b1561197a575f805f935093509350506115bc565b5f611984866111ee565b905061198e612365565b9350836119a382670de0b6b3a7640000612e34565b6119ad9190612e4b565b94505f600a54836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a139190612eac565b611a1d9190612e21565b9050826001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7f9190612eac565b8611158015611a8e5750808611155b959794965050505050565b5f80611aa36115c3565b90508061120d84670de0b6b3a7640000612e34565b5f80611ac2611b7b565b90506064611ad1826032612f1d565b61099e9190612e4b565b5f80611ae5611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663aa8930d26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5c9190612eac565b90506064611b6a8284612e34565b611b749190612e4b565b9250505090565b5f306001600160a01b0316632f7e177e6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bd6575060408051601f3d908101601f19168201909252611bd391810190612eac565b60015b611d3a576003546040805163da69d18960e01b815290516001600160a01b0390921691309163da69d1899160048083019260209291908290030181865afa925050508015611c41575060408051601f3d908101601f19168201909252611c3e91810190612eac565b60015b611d3457806001600160a01b031663248276696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca59190612e8d565b611ce75760405162461bcd60e51b8152602060048201526013602482015272139bc819985b1b189858dac8195b98589b1959606a1b604482015260640161029b565b5f60095411611d2c5760405162461bcd60e51b81526020600482015260116024820152704e6f2066616c6c6261636b20707269636560781b604482015260640161029b565b505060095490565b92915050565b919050565b600e5460ff1615611d835760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff191660011790556003546040805163a162f01960e01b815290516001600160a01b0390921691829163a162f0199160048083019260209291908290030181865afa158015611dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfd9190612e8d565b611e3e5760405162461bcd60e51b8152602060048201526012602482015271141d5c98da185cd95cc8191a5cd8589b195960721b604482015260640161029b565b806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e9190612eac565b341015611edd5760405162461bcd60e51b815260206004820152600d60248201526c084cad8deee40dad2dc408aa89609b1b604482015260640161029b565b806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3d9190612eac565b341115611f7c5760405162461bcd60e51b815260206004820152600d60248201526c082c4deecca40dac2f0408aa89609b1b604482015260640161029b565b62015180600b5442611f8e9190612e21565b10611f9c575f600a5542600b555b5f611fa6346111ee565b90505f611fb1612365565b90505f81611fc784670de0b6b3a7640000612e34565b611fd19190612e4b565b90505f81116120105760405162461bcd60e51b815260206004820152600b60248201526a5a65726f20746f6b656e7360a81b604482015260640161029b565b836001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120709190612eac565b8111156120b25760405162461bcd60e51b815260206004820152601060248201526f115e18d959591cc81d1e081b1a5b5a5d60821b604482015260640161029b565b836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121129190612eac565b81600a546121209190612f1d565b11156121645760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b80600a5f8282546121759190612f1d565b90915550506002546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044015f604051808303815f87803b1580156121c3575f80fd5b505af11580156121d5573d5f803e3d5ffd5b505060408051348152602081018590529081018590523392507f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f1915060600160405180910390a25050600e805460ff191690555050565b6005546003545f9161224a916001600160a01b039182169116612a58565b905090565b5f805f805f805f61225e611b7b565b9650612268612365565b9550612272611adb565b9450851561229e57856122858682612e21565b61229190612710612e34565b61229b9190612e4b565b93505b60035460408051631a75515560e21b815290514795506001600160a01b03909216915f9183916369d54554916004808201926020929091908290030181865afa1580156122ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123119190612eac565b9050808511935083801561232457505f87115b1561235a575f6123376104f18388612e21565b90508761234c82670de0b6b3a7640000612e34565b6123569190612e4b565b9350505b505090919293949596565b5f8061236f611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b0316633e04619d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b5f546001600160a01b031633146123eb5760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166124115760405162461bcd60e51b815260040161029b90612f92565b600680546001600160a01b038381166001600160a01b031983161790925560405191169061085c90661155120bd554d160ca1b815260070190565b5f546001600160a01b031633146124755760405162461bcd60e51b815260040161029b90612e6a565b5f34116124b25760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015260640161029b565b60405134815233907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb3120889060200160405180910390a2565b5f546001600160a01b031633146125125760405162461bcd60e51b815260040161029b90612e6a565b478111156125595760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146125a3576040519150601f19603f3d011682016040523d82523d5f602084013e6125a8565b606091505b50509050806125ef5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b5f546040518381526001600160a01b03909116907fb1cce8684b4ffa8667b4577654e61ee3480d661ee9c27522ac80e211f6bd4d259060200161089f565b5f546001600160a01b031633146126565760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b03811661267c5760405162461bcd60e51b815260040161029b90612f92565b600480546001600160a01b038381166001600160a01b031983161790925560405191169061085c90665072696d61727960c81b815260070190565b5f546001600160a01b031633146126e05760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166127065760405162461bcd60e51b815260040161029b90612f92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f805f60605f612736612365565b90505f612741611adb565b905086158061274e575081155b80612757575080155b15612795575f805f6040518060400160405280600e81526020016d496e76616c69642070726963657360901b81525095509550955095505050612a51565b8087101561292957866127a88183612e21565b6127b490612710612e34565b6127be9190612e4b565b60035460408051631a75515560e21b815290519297506001600160a01b039091169147915f9184916369d545549160048083019260209291908290030181865afa15801561280e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128329190612eac565b9050808211156128e4575f61284a6104f18385612e21565b90505f8561286083670de0b6b3a7640000612e34565b61286a9190612e4b565b90505f856001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cd9190612eac565b90508082106128dc57806128de565b815b99505050505b505060408051808201909152601c81527f427579206f6e204445582c2073656c6c20746f20636f6e7472616374000000006020820152600197509350612a5192505050565b81871115612a0d578161293c8189612e21565b61294890612710612e34565b6129529190612e4b565b945060035f9054906101000a90046001600160a01b03166001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c89190612eac565b60408051808201909152601e81527f4275792066726f6d20636f6e74726163742c2073656c6c206f6e2044455800006020820152600297509094509250612a51915050565b5f805f6040518060400160405280601781526020017f4e6f2070726f66697461626c6520617262697472616765000000000000000000815250955095509550955050505b9193509193565b5f805f805f866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612a99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abd9190612f46565b9450945050935093505f8211612b095760405162461bcd60e51b81526020600482015260116024820152700496e76616c69642074696d657374616d7607c1b604482015260640161029b565b836001600160501b0316816001600160501b03161015612b595760405162461bcd60e51b815260206004820152600b60248201526a14dd185b19481c9bdd5b9960aa1b604482015260640161029b565b856001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb99190612eac565b612bc38342612e21565b1115612c005760405162461bcd60e51b815260206004820152600c60248201526b4f7261636c65207374616c6560a01b604482015260640161029b565b5f8313612c3f5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015260640161029b565b5f839050866001600160a01b031663d197ae186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca39190612eac565b811015612cc25760405162461bcd60e51b815260040161029b90612ec3565b866001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d229190612eac565b811115612d415760405162461bcd60e51b815260040161029b90612ef0565b979650505050505050565b5f8060408385031215612d5d575f80fd5b50508035926020909101359150565b5f60208284031215612d7c575f80fd5b81356001600160a01b0381168114611217575f80fd5b5f60208284031215612da2575f80fd5b5035919050565b60ff851681525f602085818401528460408401526080606084015283518060808501525f5b81811015612dea5785810183015185820160a001528201612dce565b505f60a0828601015260a0601f19601f8301168501019250505095945050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611d3457611d34612e0d565b8082028115828204841417611d3457611d34612e0d565b5f82612e6557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b5f60208284031215612e9d575f80fd5b81518015158114611217575f80fd5b5f60208284031215612ebc575f80fd5b5051919050565b60208082526013908201527250726963652062656c6f77206d696e696d756d60681b604082015260600190565b60208082526013908201527250726963652061626f7665206d6178696d756d60681b604082015260600190565b80820180821115611d3457611d34612e0d565b80516001600160501b0381168114611d3a575f80fd5b5f805f805f60a08688031215612f5a575f80fd5b612f6386612f30565b9450602086015193506040860151925060608601519150612f8660808701612f30565b90509295509295909350565b6020808252600c908201526b5a65726f206164647265737360a01b60408201526060019056fea264697066735822122079aaf001245da8e83ef9d16851eadcb339f81f66599e0c8af50b02ace751733364736f6c63430008150033000000000000000000000000cd8eabac84ed4bf824a414a04cc6be7e3b0d140d000000000000000000000000b24adaacebb8f84025a89816ce4784177610b288000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d60000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Deployed Bytecode
0x608060405260043610610241575f3560e01c806398b9a0f511610134578063da69d189116100b3578063e8078d9411610078578063e8078d94146106b7578063f14210a6146106bf578063f2188066146106de578063f2fde38b146106fd578063f79f6b591461071c578063fcd872cf1461074b575f80fd5b8063da69d18914610606578063ddca8e7c1461061a578063e1027bec14610665578063e30c397814610679578063e6b349b314610698575f80fd5b8063c0129e9b116100f9578063c0129e9b146105a3578063c422f9d0146105b7578063c9b3e736146105d6578063c9ce9c69146105ea578063d0febe4c146105fe575f80fd5b806398b9a0f5146104f65780639d8bce5114610515578063a0a8045e14610551578063a3cf3d4e14610565578063bcecf66714610584575f80fd5b80635e2de42a116101c057806379ba50971161018557806379ba50971461047b5780637a1c22131461048f5780637a296fd2146104a45780638da5cb5b146104b9578063946d1480146104d7575f80fd5b80635e2de42a1461040c5780636085aec314610421578063677aa974146104355780636c11bcd31461044a5780636e94729814610469575f80fd5b80632f7e177e116102065780632f7e177e146103865780633072f1f91461039a5780633c26651a146103af57806342f6fb29146103ce578063479069c7146103ed575f80fd5b806301eb1e0a146102aa5780630c2b72e9146102d25780630e1ac56e14610309578063244bb309146103485780632549840114610367575f80fd5b366102a6575f546001600160a01b031633146102a45760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722063616e2073656e6420455448206469726563746c7960448201526064015b60405180910390fd5b005b5f80fd5b3480156102b5575f80fd5b506102bf60075481565b6040519081526020015b60405180910390f35b3480156102dd575f80fd5b506002546102f1906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b348015610314575f80fd5b50610328610323366004612d4c565b610760565b604080519315158452602084019290925260ff16908201526060016102c9565b348015610353575f80fd5b506003546102f1906001600160a01b031681565b348015610372575f80fd5b506102a4610381366004612d6c565b6107f9565b348015610391575f80fd5b506102bf6108ab565b3480156103a5575f80fd5b506102bf600c5481565b3480156103ba575f80fd5b506102a46103c9366004612d92565b6109a4565b3480156103d9575f80fd5b506006546102f1906001600160a01b031681565b3480156103f8575f80fd5b506005546102f1906001600160a01b031681565b348015610417575f80fd5b506102bf600d5481565b34801561042c575f80fd5b506102a4610b15565b348015610440575f80fd5b506102bf60085481565b348015610455575f80fd5b506102a4610464366004612d92565b610b49565b348015610474575f80fd5b50476102bf565b348015610486575f80fd5b506102a4611147565b34801561049a575f80fd5b506102bf600b5481565b3480156104af575f80fd5b506102bf600a5481565b3480156104c4575f80fd5b505f546102f1906001600160a01b031681565b3480156104e2575f80fd5b506102bf6104f1366004612d92565b6111ee565b348015610501575f80fd5b506102a4610510366004612d92565b61121e565b348015610520575f80fd5b5061053461052f366004612d92565b611394565b6040805193845260208401929092521515908201526060016102c9565b34801561055c575f80fd5b506102bf6115c3565b348015610570575f80fd5b5061053461057f366004612d92565b611880565b34801561058f575f80fd5b506102bf61059e366004612d92565b611a99565b3480156105ae575f80fd5b506102bf611ab8565b3480156105c2575f80fd5b506004546102f1906001600160a01b031681565b3480156105e1575f80fd5b506102bf611adb565b3480156105f5575f80fd5b506102bf611b7b565b6102a4611d3f565b348015610611575f80fd5b506102bf61222c565b348015610625575f80fd5b5061062e61224f565b6040805197885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e0016102c9565b348015610670575f80fd5b506102bf612365565b348015610684575f80fd5b506001546102f1906001600160a01b031681565b3480156106a3575f80fd5b506102a46106b2366004612d6c565b6123c2565b6102a461244c565b3480156106ca575f80fd5b506102a46106d9366004612d92565b6124e9565b3480156106e9575f80fd5b506102a46106f8366004612d6c565b61262d565b348015610708575f80fd5b506102a4610717366004612d6c565b6126b7565b348015610727575f80fd5b5061073b610736366004612d92565b612728565b6040516102c99493929190612da9565b348015610756575f80fd5b506102bf60095481565b5f805f8061076c611ab8565b9050851580610779575080155b1561078f575f6127105f935093509350506107f2565b8086106107c257806107a18188612e21565b6107ad90612710612e34565b6107b79190612e4b565b9250600291506107ea565b806107cd8782612e21565b6107d990612710612e34565b6107e39190612e4b565b9250600191505b848311159350505b9250925092565b5f546001600160a01b031633146108225760405162461bcd60e51b815260040161029b90612e6a565b600580546001600160a01b038381166001600160a01b031983161790925560405191169061085c906504261636b75760d41b815260060190565b604080519182900382206001600160a01b03808516845285166020840152917f4c247df77fd31829837512d6c006db1212e42ae4ea8a129aec0b44c1019a23ad91015b60405180910390a25050565b60035460408051635fd2b6af60e01b815290515f926001600160a01b0316918291635fd2b6af916004808201926020929091908290030181865afa1580156108f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109199190612e8d565b801561092657505f600754115b1561098857620151806008544261093d9190612e21565b11156109805760405162461bcd60e51b81526020600482015260126024820152714d616e75616c207072696365207374616c6560701b604482015260640161029b565b505060075490565b60045461099e906001600160a01b031682612a58565b91505090565b5f546001600160a01b031633146109cd5760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015610a16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612eac565b821015610a595760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab99190612eac565b821115610ad85760405162461bcd60e51b815260040161029b90612ef0565b60098290556040518281527f67e14a6d7ceb1fe07cc9a741b4a87cf22d19a27f9e009ff5e7473b85bb13f262906020015b60405180910390a15050565b5f546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161029b90612e6a565b5f6007819055600855565b600e5460ff1615610b8d5760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff19166001179055600354604080516358197a9d60e01b815290516001600160a01b039092169182916358197a9d9160048083019260209291908290030181865afa158015610be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c079190612e8d565b610c445760405162461bcd60e51b815260206004820152600e60248201526d14d85b195cc8191a5cd8589b195960921b604482015260640161029b565b806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca49190612eac565b821015610ce65760405162461bcd60e51b815260206004820152601060248201526f42656c6f77206d696e20746f6b656e7360801b604482015260640161029b565b806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d469190612eac565b821115610d885760405162461bcd60e51b815260206004820152601060248201526f41626f7665206d617820746f6b656e7360801b604482015260640161029b565b6002546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015610dce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df29190612eac565b1015610e375760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b62015180600d5442610e499190612e21565b10610e57575f600c5542600d555b806001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb79190612eac565b82600c54610ec59190612f1d565b1115610f095760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b5f610f12611adb565b90505f670de0b6b3a7640000610f288386612e34565b610f329190612e4b565b90505f610f3e82611a99565b9050836001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa09190612eac565b610faa9082612f1d565b471015610ff25760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206c697175696469747960501b604482015260640161029b565b84600c5f8282546110039190612f1d565b90915550506002546040516348dcc70760e11b8152336004820152602481018790526001600160a01b03909116906391b98e0e906044015f604051808303815f87803b158015611051575f80fd5b505af1158015611063573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f81146110a6576040519150601f19603f3d011682016040523d82523d5f602084013e6110ab565b606091505b50509050806110f25760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b604080518781526020810184905290810185905233907f6db63bebf1e6540277744df32846ebdb98385b1a73f2d5de49b28348add63f509060600160405180910390a25050600e805460ff1916905550505050565b6001546001600160a01b031633146111955760405162461bcd60e51b81526020600482015260116024820152702737ba103832b73234b7339037bbb732b960791b604482015260640161029b565b5f8054600180546001600160a01b038082166001600160a01b031980861682178755909216909255604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f806111f86115c3565b9050670de0b6b3a764000061120d8285612e34565b6112179190612e4b565b9392505050565b5f546001600160a01b031633146112475760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015611290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b49190612eac565b8210156112d35760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113339190612eac565b8211156113525760405162461bcd60e51b815260040161029b90612ef0565b60078290554260088190556040805184815260208101929092527fb4e7056b10bc2d2d4fe5b2ff374b24edf94410f4620866b12b3bcf1765d918949101610b09565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140f9190612eac565b85108061147a5750806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611453573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114779190612eac565b85115b1561148e575f805f935093509350506115bc565b611496611adb565b92505f670de0b6b3a76400006114ac8588612e34565b6114b69190612e4b565b90506114c181611a99565b94505f600c54836001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190612eac565b6115319190612e21565b90505f8188111590505f846001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190612eac565b6115a59089612f1d565b47101590508180156115b45750805b955050505050505b9193909250565b5f805f805f60065f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611618573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163c9190612f46565b6003549498509296509450909250506001600160a01b03168261169a5760405162461bcd60e51b815260206004820152601660248201527504554483a20496e76616c69642074696d657374616d760541b604482015260640161029b565b846001600160501b0316826001600160501b031610156116ef5760405162461bcd60e51b815260206004820152601060248201526f1155120e8814dd185b19481c9bdd5b9960821b604482015260640161029b565b806001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174f9190612eac565b6117598442612e21565b111561179b5760405162461bcd60e51b81526020600482015260116024820152704554483a204f7261636c65207374616c6560781b604482015260640161029b565b5f84136117df5760405162461bcd60e51b81526020600482015260126024820152714554483a20496e76616c696420707269636560701b604482015260640161029b565b836402540be40081101561182a5760405162461bcd60e51b81526020600482015260126024820152714554483a20507269636520746f6f206c6f7760701b604482015260640161029b565b6509184e72a0008111156118765760405162461bcd60e51b815260206004820152601360248201527208aa8907440a0e4d2c6ca40e8dede40d0d2ced606b1b604482015260640161029b565b9695505050505050565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118fb9190612eac565b8510806119665750806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190612eac565b85115b1561197a575f805f935093509350506115bc565b5f611984866111ee565b905061198e612365565b9350836119a382670de0b6b3a7640000612e34565b6119ad9190612e4b565b94505f600a54836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a139190612eac565b611a1d9190612e21565b9050826001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7f9190612eac565b8611158015611a8e5750808611155b959794965050505050565b5f80611aa36115c3565b90508061120d84670de0b6b3a7640000612e34565b5f80611ac2611b7b565b90506064611ad1826032612f1d565b61099e9190612e4b565b5f80611ae5611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663aa8930d26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5c9190612eac565b90506064611b6a8284612e34565b611b749190612e4b565b9250505090565b5f306001600160a01b0316632f7e177e6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bd6575060408051601f3d908101601f19168201909252611bd391810190612eac565b60015b611d3a576003546040805163da69d18960e01b815290516001600160a01b0390921691309163da69d1899160048083019260209291908290030181865afa925050508015611c41575060408051601f3d908101601f19168201909252611c3e91810190612eac565b60015b611d3457806001600160a01b031663248276696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca59190612e8d565b611ce75760405162461bcd60e51b8152602060048201526013602482015272139bc819985b1b189858dac8195b98589b1959606a1b604482015260640161029b565b5f60095411611d2c5760405162461bcd60e51b81526020600482015260116024820152704e6f2066616c6c6261636b20707269636560781b604482015260640161029b565b505060095490565b92915050565b919050565b600e5460ff1615611d835760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff191660011790556003546040805163a162f01960e01b815290516001600160a01b0390921691829163a162f0199160048083019260209291908290030181865afa158015611dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfd9190612e8d565b611e3e5760405162461bcd60e51b8152602060048201526012602482015271141d5c98da185cd95cc8191a5cd8589b195960721b604482015260640161029b565b806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e9190612eac565b341015611edd5760405162461bcd60e51b815260206004820152600d60248201526c084cad8deee40dad2dc408aa89609b1b604482015260640161029b565b806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3d9190612eac565b341115611f7c5760405162461bcd60e51b815260206004820152600d60248201526c082c4deecca40dac2f0408aa89609b1b604482015260640161029b565b62015180600b5442611f8e9190612e21565b10611f9c575f600a5542600b555b5f611fa6346111ee565b90505f611fb1612365565b90505f81611fc784670de0b6b3a7640000612e34565b611fd19190612e4b565b90505f81116120105760405162461bcd60e51b815260206004820152600b60248201526a5a65726f20746f6b656e7360a81b604482015260640161029b565b836001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120709190612eac565b8111156120b25760405162461bcd60e51b815260206004820152601060248201526f115e18d959591cc81d1e081b1a5b5a5d60821b604482015260640161029b565b836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121129190612eac565b81600a546121209190612f1d565b11156121645760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b80600a5f8282546121759190612f1d565b90915550506002546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044015f604051808303815f87803b1580156121c3575f80fd5b505af11580156121d5573d5f803e3d5ffd5b505060408051348152602081018590529081018590523392507f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f1915060600160405180910390a25050600e805460ff191690555050565b6005546003545f9161224a916001600160a01b039182169116612a58565b905090565b5f805f805f805f61225e611b7b565b9650612268612365565b9550612272611adb565b9450851561229e57856122858682612e21565b61229190612710612e34565b61229b9190612e4b565b93505b60035460408051631a75515560e21b815290514795506001600160a01b03909216915f9183916369d54554916004808201926020929091908290030181865afa1580156122ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123119190612eac565b9050808511935083801561232457505f87115b1561235a575f6123376104f18388612e21565b90508761234c82670de0b6b3a7640000612e34565b6123569190612e4b565b9350505b505090919293949596565b5f8061236f611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b0316633e04619d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b5f546001600160a01b031633146123eb5760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166124115760405162461bcd60e51b815260040161029b90612f92565b600680546001600160a01b038381166001600160a01b031983161790925560405191169061085c90661155120bd554d160ca1b815260070190565b5f546001600160a01b031633146124755760405162461bcd60e51b815260040161029b90612e6a565b5f34116124b25760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015260640161029b565b60405134815233907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb3120889060200160405180910390a2565b5f546001600160a01b031633146125125760405162461bcd60e51b815260040161029b90612e6a565b478111156125595760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146125a3576040519150601f19603f3d011682016040523d82523d5f602084013e6125a8565b606091505b50509050806125ef5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b5f546040518381526001600160a01b03909116907fb1cce8684b4ffa8667b4577654e61ee3480d661ee9c27522ac80e211f6bd4d259060200161089f565b5f546001600160a01b031633146126565760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b03811661267c5760405162461bcd60e51b815260040161029b90612f92565b600480546001600160a01b038381166001600160a01b031983161790925560405191169061085c90665072696d61727960c81b815260070190565b5f546001600160a01b031633146126e05760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166127065760405162461bcd60e51b815260040161029b90612f92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f805f60605f612736612365565b90505f612741611adb565b905086158061274e575081155b80612757575080155b15612795575f805f6040518060400160405280600e81526020016d496e76616c69642070726963657360901b81525095509550955095505050612a51565b8087101561292957866127a88183612e21565b6127b490612710612e34565b6127be9190612e4b565b60035460408051631a75515560e21b815290519297506001600160a01b039091169147915f9184916369d545549160048083019260209291908290030181865afa15801561280e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128329190612eac565b9050808211156128e4575f61284a6104f18385612e21565b90505f8561286083670de0b6b3a7640000612e34565b61286a9190612e4b565b90505f856001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cd9190612eac565b90508082106128dc57806128de565b815b99505050505b505060408051808201909152601c81527f427579206f6e204445582c2073656c6c20746f20636f6e7472616374000000006020820152600197509350612a5192505050565b81871115612a0d578161293c8189612e21565b61294890612710612e34565b6129529190612e4b565b945060035f9054906101000a90046001600160a01b03166001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c89190612eac565b60408051808201909152601e81527f4275792066726f6d20636f6e74726163742c2073656c6c206f6e2044455800006020820152600297509094509250612a51915050565b5f805f6040518060400160405280601781526020017f4e6f2070726f66697461626c6520617262697472616765000000000000000000815250955095509550955050505b9193509193565b5f805f805f866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612a99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abd9190612f46565b9450945050935093505f8211612b095760405162461bcd60e51b81526020600482015260116024820152700496e76616c69642074696d657374616d7607c1b604482015260640161029b565b836001600160501b0316816001600160501b03161015612b595760405162461bcd60e51b815260206004820152600b60248201526a14dd185b19481c9bdd5b9960aa1b604482015260640161029b565b856001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb99190612eac565b612bc38342612e21565b1115612c005760405162461bcd60e51b815260206004820152600c60248201526b4f7261636c65207374616c6560a01b604482015260640161029b565b5f8313612c3f5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015260640161029b565b5f839050866001600160a01b031663d197ae186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca39190612eac565b811015612cc25760405162461bcd60e51b815260040161029b90612ec3565b866001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d229190612eac565b811115612d415760405162461bcd60e51b815260040161029b90612ef0565b979650505050505050565b5f8060408385031215612d5d575f80fd5b50508035926020909101359150565b5f60208284031215612d7c575f80fd5b81356001600160a01b0381168114611217575f80fd5b5f60208284031215612da2575f80fd5b5035919050565b60ff851681525f602085818401528460408401526080606084015283518060808501525f5b81811015612dea5785810183015185820160a001528201612dce565b505f60a0828601015260a0601f19601f8301168501019250505095945050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611d3457611d34612e0d565b8082028115828204841417611d3457611d34612e0d565b5f82612e6557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b5f60208284031215612e9d575f80fd5b81518015158114611217575f80fd5b5f60208284031215612ebc575f80fd5b5051919050565b60208082526013908201527250726963652062656c6f77206d696e696d756d60681b604082015260600190565b60208082526013908201527250726963652061626f7665206d6178696d756d60681b604082015260600190565b80820180821115611d3457611d34612e0d565b80516001600160501b0381168114611d3a575f80fd5b5f805f805f60a08688031215612f5a575f80fd5b612f6386612f30565b9450602086015193506040860151925060608601519150612f8660808701612f30565b90509295509295909350565b6020808252600c908201526b5a65726f206164647265737360a01b60408201526060019056fea264697066735822122079aaf001245da8e83ef9d16851eadcb339f81f66599e0c8af50b02ace751733364736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cd8eabac84ed4bf824a414a04cc6be7e3b0d140d000000000000000000000000b24adaacebb8f84025a89816ce4784177610b288000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d60000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
-----Decoded View---------------
Arg [0] : _coreToken (address): 0xCd8eAbAc84eD4Bf824a414A04CC6bE7E3B0D140D
Arg [1] : _configRegistry (address): 0xB24adaAceBb8F84025a89816cE4784177610b288
Arg [2] : _goldPriceFeed (address): 0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
Arg [3] : _backupPriceFeed (address): 0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
Arg [4] : _ethUsdPriceFeed (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd8eabac84ed4bf824a414a04cc6be7e3b0d140d
Arg [1] : 000000000000000000000000b24adaacebb8f84025a89816ce4784177610b288
Arg [2] : 000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6
Arg [3] : 000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6
Arg [4] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Deployed Bytecode Sourcemap
3246:25345:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25332:5;;-1:-1:-1;;;;;25332:5:0;25318:10;:19;25310:64;;;;-1:-1:-1;;;25310:64:0;;216:2:1;25310:64:0;;;198:21:1;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;25310:64:0;;;;;;;;;3246:25345;;;;;4056:30;;;;;;;;;;;;;;;;;;;521:25:1;;;509:2;494:18;4056:30:0;;;;;;;;3826:24;;;;;;;;;;-1:-1:-1;3826:24:0;;;;-1:-1:-1;;;;;3826:24:0;;;;;;-1:-1:-1;;;;;721:32:1;;;703:51;;691:2;676:18;3826:24:0;557:203:1;21489:766:0;;;;;;;;;;-1:-1:-1;21489:766:0;;;;;:::i;:::-;;:::i;:::-;;;;1235:14:1;;1228:22;1210:41;;1282:2;1267:18;;1260:34;;;;1342:4;1330:17;1310:18;;;1303:45;1198:2;1183:18;21489:766:0;1018:336:1;3857:29:0;;;;;;;;;;-1:-1:-1;3857:29:0;;;;-1:-1:-1;;;;;3857:29:0;;;27146:230;;;;;;;;;;-1:-1:-1;27146:230:0;;;;;:::i;:::-;;:::i;8132:493::-;;;;;;;;;;;;;:::i;4299:30::-;;;;;;;;;;;;;;;;26443:402;;;;;;;;;;-1:-1:-1;26443:402:0;;;;;:::i;:::-;;:::i;3999:44::-;;;;;;;;;;-1:-1:-1;3999:44:0;;;;-1:-1:-1;;;;;3999:44:0;;;3948;;;;;;;;;;-1:-1:-1;3948:44:0;;;;-1:-1:-1;;;;;3948:44:0;;;4336:32;;;;;;;;;;;;;;;;26315:120;;;;;;;;;;;;;:::i;4093:35::-;;;;;;;;;;;;;;;;15964:1702;;;;;;;;;;-1:-1:-1;15964:1702:0;;;;;:::i;:::-;;:::i;25160:104::-;;;;;;;;;;-1:-1:-1;25235:21:0;25160:104;;28322:266;;;;;;;;;;;;;:::i;4256:36::-;;;;;;;;;;;;;;;;4215:34;;;;;;;;;;;;;;;;3765:20;;;;;;;;;;-1:-1:-1;3765:20:0;;;;-1:-1:-1;;;;;3765:20:0;;;11567:268;;;;;;;;;;-1:-1:-1;11567:268:0;;;;;:::i;:::-;;:::i;25859:448::-;;;;;;;;;;-1:-1:-1;25859:448:0;;;;;:::i;:::-;;:::i;23231:967::-;;;;;;;;;;-1:-1:-1;23231:967:0;;;;;:::i;:::-;;:::i;:::-;;;;2267:25:1;;;2323:2;2308:18;;2301:34;;;;2378:14;2371:22;2351:18;;;2344:50;2255:2;2240:18;23231:967:0;2071:329:1;10475:914:0;;;;;;;;;;;;;:::i;22328:829::-;;;;;;;;;;-1:-1:-1;22328:829:0;;;;;:::i;:::-;;:::i;12027:268::-;;;;;;;;;;-1:-1:-1;12027:268:0;;;;;:::i;:::-;;:::i;12494:197::-;;;;;;;;;;;;;:::i;3899:42::-;;;;;;;;;;-1:-1:-1;3899:42:0;;;;-1:-1:-1;;;;;3899:42:0;;;13185:252;;;;;;;;;;;;;:::i;9471:709::-;;;;;;;;;;;;;:::i;14171:1498::-;;;:::i;10188:161::-;;;;;;;;;;;;;:::i;18208:1152::-;;;;;;;;;;;;;:::i;:::-;;;;2714:25:1;;;2770:2;2755:18;;2748:34;;;;2798:18;;;2791:34;;;;2856:2;2841:18;;2834:34;;;;2899:3;2884:19;;2877:35;2956:14;2949:22;2943:3;2928:19;;2921:51;3003:3;2988:19;;2981:35;2701:3;2686:19;18208:1152:0;2405:617:1;12814:250:0;;;;;;;;;;;;;:::i;3792:27::-;;;;;;;;;;-1:-1:-1;3792:27:0;;;;-1:-1:-1;;;;;3792:27:0;;;27384:288;;;;;;;;;;-1:-1:-1;27384:288:0;;;;;:::i;:::-;;:::i;24678:160::-;;;:::i;24846:306::-;;;;;;;;;;-1:-1:-1;24846:306:0;;;;;:::i;:::-;;:::i;26853:285::-;;;;;;;;;;-1:-1:-1;26853:285:0;;;;;:::i;:::-;;:::i;28150:164::-;;;;;;;;;;-1:-1:-1;28150:164:0;;;;;:::i;:::-;;:::i;19506:1889::-;;;;;;;;;;-1:-1:-1;19506:1889:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;4135:37::-;;;;;;;;;;;;;;;;21489:766;21586:13;21610:20;21641:24;21684:19;21706:22;:20;:22::i;:::-;21684:44;-1:-1:-1;21753:13:0;;;:33;;-1:-1:-1;21770:16:0;;21753:33;21749:90;;;21811:5;21818;21825:1;21803:24;;;;;;;;;21749:90;21875:11;21863:8;:23;21859:329;;21955:11;21920:22;21955:11;21920:8;:22;:::i;:::-;21919:32;;21946:5;21919:32;:::i;:::-;21918:48;;;;:::i;:::-;21903:63;;22002:1;21981:22;;21859:329;;;22108:11;22073:22;22087:8;22108:11;22073:22;:::i;:::-;22072:32;;22099:5;22072:32;:::i;:::-;22071:48;;;;:::i;:::-;22056:63;;22155:1;22134:22;;21859:329;22235:12;22219;:28;;22208:39;;21673:582;21489:766;;;;;;:::o;27146:230::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;27240:15:::1;::::0;;-1:-1:-1;;;;;27267:48:0;;::::1;-1:-1:-1::0;;;;;;27267:48:0;::::1;;::::0;;;27331:37:::1;::::0;27240:15;::::1;::::0;27331:37:::1;::::0;-1:-1:-1;;;5004:21:1;;5050:1;5041:11;;4802:256;27331:37:0::1;;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;5293:15:1;;;5275:34;;5345:15;;5340:2;5325:18;;5318:43;27331:37:0;::::1;::::0;5210:18:1;27331:37:0::1;;;;;;;;27207:169;27146:230:::0;:::o;8132:493::-;8262:14;;8339:27;;;-1:-1:-1;;;8339:27:0;;;;8183:7;;-1:-1:-1;;;;;8262:14:0;;;;8339:25;;:27;;;;;;;;;;;;;;;8262:14;8339:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;;8388:1;8370:15;;:19;8339:50;8335:214;;;4430:5;8432:20;;8414:15;:38;;;;:::i;:::-;:63;;8406:94;;;;-1:-1:-1;;;8406:94:0;;5856:2:1;8406:94:0;;;5838:21:1;5895:2;5875:18;;;5868:30;-1:-1:-1;;;5914:18:1;;;5907:48;5972:18;;8406:94:0;5654:342:1;8406:94:0;-1:-1:-1;;8522:15:0;;;8132:493::o;8335:214::-;8595:13;;8576:41;;-1:-1:-1;;;;;8595:13:0;8610:6;8576:18;:41::i;:::-;8569:48;;;8132:493;:::o;26443:402::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;26582:14:::1;::::0;26625:21:::1;::::0;;-1:-1:-1;;;26625:21:0;;;;-1:-1:-1;;;;;26582:14:0;;::::1;::::0;;;26625:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;26582:14;26625:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26616:5;:30;;26608:62;;;;-1:-1:-1::0;;;26608:62:0::1;;;;;;;:::i;:::-;26698:6;-1:-1:-1::0;;;;;26698:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26689:5;:30;;26681:62;;;;-1:-1:-1::0;;;26681:62:0::1;;;;;;;:::i;:::-;26764:22;:30:::0;;;26810:27:::1;::::0;521:25:1;;;26810:27:0::1;::::0;509:2:1;494:18;26810:27:0::1;;;;;;;;26512:333;26443:402:::0;:::o;26315:120::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;26391:1:::1;26373:15;:19:::0;;;26403:20:::1;:24:::0;26315:120::o;15964:1702::-;6220:7;;;;6219:8;6211:35;;;;-1:-1:-1;;;6211:35:0;;7088:2:1;6211:35:0;;;7070:21:1;7127:2;7107:18;;;7100:30;-1:-1:-1;;;7146:18:1;;;7139:44;7200:18;;6211:35:0;6886:338:1;6211:35:0;6257:7;:14;;-1:-1:-1;;6257:14:0;6267:4;6257:14;;;16097::::1;::::0;16141:20:::1;::::0;;-1:-1:-1;;;16141:20:0;;;;-1:-1:-1;;;;;16097:14:0;;::::1;::::0;;;16141:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;16097:14;16141:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16133:47;;;::::0;-1:-1:-1;;;16133:47:0;;7431:2:1;16133:47:0::1;::::0;::::1;7413:21:1::0;7470:2;7450:18;;;7443:30;-1:-1:-1;;;7489:18:1;;;7482:44;7543:18;;16133:47:0::1;7229:338:1::0;16133:47:0::1;16214:6;-1:-1:-1::0;;;;;16214:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16199:11;:37;;16191:66;;;::::0;-1:-1:-1;;;16191:66:0;;7774:2:1;16191:66:0::1;::::0;::::1;7756:21:1::0;7813:2;7793:18;;;7786:30;-1:-1:-1;;;7832:18:1;;;7825:46;7888:18;;16191:66:0::1;7572:340:1::0;16191:66:0::1;16291:6;-1:-1:-1::0;;;;;16291:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16276:11;:36;;16268:65;;;::::0;-1:-1:-1;;;16268:65:0;;8119:2:1;16268:65:0::1;::::0;::::1;8101:21:1::0;8158:2;8138:18;;;8131:30;-1:-1:-1;;;8177:18:1;;;8170:46;8233:18;;16268:65:0::1;7917:340:1::0;16268:65:0::1;16362:9;::::0;16352:42:::1;::::0;-1:-1:-1;;;16352:42:0;;16383:10:::1;16352:42;::::0;::::1;703:51:1::0;16398:11:0;;-1:-1:-1;;;;;16362:9:0::1;::::0;16352:30:::1;::::0;676:18:1;;16352:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;16344:90;;;::::0;-1:-1:-1;;;16344:90:0;;8464:2:1;16344:90:0::1;::::0;::::1;8446:21:1::0;8503:2;8483:18;;;8476:30;-1:-1:-1;;;8522:18:1;;;8515:50;8582:18;;16344:90:0::1;8262:344:1::0;16344:90:0::1;16540:5;16519:17;;16501:15;:35;;;;:::i;:::-;:44;16497:146;;16580:1;16562:15;:19:::0;16616:15:::1;16596:17;:35:::0;16497:146:::1;16694:6;-1:-1:-1::0;;;;;16694:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16679:11;16661:15;;:29;;;;:::i;:::-;:54;;16653:86;;;::::0;-1:-1:-1;;;16653:86:0;;8943:2:1;16653:86:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;-1:-1:-1;;;9001:18:1;;;8994:49;9060:18;;16653:86:0::1;8741:343:1::0;16653:86:0::1;16834:18;16855:19;:17;:19::i;:::-;16834:40:::0;-1:-1:-1;17052:16:0::1;17100:4;17072:24;16834:40:::0;17072:11;:24:::1;:::i;:::-;17071:33;;;;:::i;:::-;17052:52;;17162:17;17182:18;17191:8;17182;:18::i;:::-;17162:38;;17266:6;-1:-1:-1::0;;;;;17266:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17254:39;::::0;:9;:39:::1;:::i;:::-;17229:21;:64;;17221:99;;;::::0;-1:-1:-1;;;17221:99:0;;9291:2:1;17221:99:0::1;::::0;::::1;9273:21:1::0;9330:2;9310:18;;;9303:30;-1:-1:-1;;;9349:18:1;;;9342:52;9411:18;;17221:99:0::1;9089:346:1::0;17221:99:0::1;17360:11;17341:15;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;17392:9:0::1;::::0;17382:56:::1;::::0;-1:-1:-1;;;17382:56:0;;17414:10:::1;17382:56;::::0;::::1;9614:51:1::0;9681:18;;;9674:34;;;-1:-1:-1;;;;;17392:9:0;;::::1;::::0;17382:31:::1;::::0;9587:18:1;;17382:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17478:46:0::1;::::0;17460:12:::1;::::0;-1:-1:-1;17486:10:0::1;::::0;-1:-1:-1;17510:9:0;;17460:12;17478:46;17460:12;17478:46;17510:9;17486:10;17478:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17459:65;;;17543:7;17535:39;;;::::0;-1:-1:-1;;;17535:39:0;;10131:2:1;17535:39:0::1;::::0;::::1;10113:21:1::0;10170:2;10150:18;;;10143:30;-1:-1:-1;;;10189:18:1;;;10182:49;10248:18;;17535:39:0::1;9929:343:1::0;17535:39:0::1;17600:58;::::0;;10479:25:1;;;10535:2;10520:18;;10513:34;;;10563:18;;;10556:34;;;17611:10:0::1;::::0;17600:58:::1;::::0;10467:2:1;10452:18;17600:58:0::1;;;;;;;-1:-1:-1::0;;6294:7:0;:15;;-1:-1:-1;;6294:15:0;;;-1:-1:-1;;;;15964:1702:0:o;28322:266::-;28391:12;;-1:-1:-1;;;;;28391:12:0;28377:10;:26;28369:56;;;;-1:-1:-1;;;28369:56:0;;10803:2:1;28369:56:0;;;10785:21:1;10842:2;10822:18;;;10815:30;-1:-1:-1;;;10861:18:1;;;10854:47;10918:18;;28369:56:0;10601:341:1;28369:56:0;28436:16;28455:5;;;28479:12;;-1:-1:-1;;;;;28479:12:0;;;-1:-1:-1;;;;;;28471:20:0;;;;;;;28502:25;;;;;;28543:37;;28455:5;;;;;;;28543:37;;28436:16;28543:37;28358:230;28322:266::o;11567:268::-;11625:7;11645:16;11664;:14;:16::i;:::-;11645:35;-1:-1:-1;11823:4:0;11799:20;11645:35;11799:9;:20;:::i;:::-;11798:29;;;;:::i;:::-;11791:36;11567:268;-1:-1:-1;;;11567:268:0:o;25859:448::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;25991:14:::1;::::0;26034:21:::1;::::0;;-1:-1:-1;;;26034:21:0;;;;-1:-1:-1;;;;;25991:14:0;;::::1;::::0;;;26034:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;25991:14;26034:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26025:5;:30;;26017:62;;;;-1:-1:-1::0;;;26017:62:0::1;;;;;;;:::i;:::-;26107:6;-1:-1:-1::0;;;;;26107:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26098:5;:30;;26090:62;;;;-1:-1:-1::0;;;26090:62:0::1;;;;;;;:::i;:::-;26173:15;:23:::0;;;26230:15:::1;26207:20;:38:::0;;;26261::::1;::::0;;11121:25:1;;;11177:2;11162:18;;11155:34;;;;26261:38:0::1;::::0;11094:18:1;26261:38:0::1;10947:248:1::0;23231:967:0;23307:14;23332:22;23365:17;23401:31;23460:14;;;;;;;;;-1:-1:-1;;;;;23460:14:0;23401:74;;23514:6;-1:-1:-1;;;;;23514:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23500:11;:36;:75;;;;23554:6;-1:-1:-1;;;;;23554:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23540:11;:35;23500:75;23496:128;;;23600:1;23603;23606:5;23592:20;;;;;;;;;23496:128;23661:19;:17;:19::i;:::-;23644:36;-1:-1:-1;23787:16:0;23839:4;23807:28;23644:36;23807:11;:28;:::i;:::-;23806:37;;;;:::i;:::-;23787:56;;23863:18;23872:8;23863;:18::i;:::-;23854:27;;23902:22;23951:15;;23927:6;-1:-1:-1;;;;;23927:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;23902:64;;23977:21;24016:14;24001:11;:29;;23977:53;;24041:17;24095:6;-1:-1:-1;;;;;24095:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24086:36;;:6;:36;:::i;:::-;24061:21;:61;;24041:81;;24158:16;:32;;;;;24178:12;24158:32;24143:47;;23390:808;;;;;23231:967;;;;;;:::o;10475:914::-;10522:7;10557:14;10586:12;10628:17;10660:22;10696:15;;;;;;;;;-1:-1:-1;;;;;10696:15:0;-1:-1:-1;;;;;10696:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10809:14;;10542:187;;-1:-1:-1;10542:187:0;;-1:-1:-1;10542:187:0;-1:-1:-1;10542:187:0;;-1:-1:-1;;;;;;;10809:14:0;10853:13;10845:48;;;;-1:-1:-1;;;10845:48:0;;12064:2:1;10845:48:0;;;12046:21:1;12103:2;12083:18;;;12076:30;-1:-1:-1;;;12122:18:1;;;12115:52;12184:18;;10845:48:0;11862:346:1;10845:48:0;10931:7;-1:-1:-1;;;;;10912:26:0;:15;-1:-1:-1;;;;;10912:26:0;;;10904:55;;;;-1:-1:-1;;;10904:55:0;;12415:2:1;10904:55:0;;;12397:21:1;12454:2;12434:18;;;12427:30;-1:-1:-1;;;12473:18:1;;;12466:46;12529:18;;10904:55:0;12213:340:1;10904:55:0;11009:6;-1:-1:-1;;;;;11009:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10978:27;10996:9;10978:15;:27;:::i;:::-;:63;;10970:93;;;;-1:-1:-1;;;10970:93:0;;12760:2:1;10970:93:0;;;12742:21:1;12799:2;12779:18;;;12772:30;-1:-1:-1;;;12818:18:1;;;12811:47;12875:18;;10970:93:0;12558:341:1;10970:93:0;11090:1;11082:5;:9;11074:40;;;;-1:-1:-1;;;11074:40:0;;13106:2:1;11074:40:0;;;13088:21:1;13145:2;13125:18;;;13118:30;-1:-1:-1;;;13164:18:1;;;13157:48;13222:18;;11074:40:0;12904:342:1;11074:40:0;11160:5;11246:11;11236:21;;;11228:52;;;;-1:-1:-1;;;11228:52:0;;13453:2:1;11228:52:0;;;13435:21:1;13492:2;13472:18;;;13465:30;-1:-1:-1;;;13511:18:1;;;13504:48;13569:18;;11228:52:0;13251:342:1;11228:52:0;11309:14;11299:6;:24;;11291:56;;;;-1:-1:-1;;;11291:56:0;;13800:2:1;11291:56:0;;;13782:21:1;13839:2;13819:18;;;13812:30;-1:-1:-1;;;13858:18:1;;;13851:49;13917:18;;11291:56:0;13598:343:1;11291:56:0;11375:6;10475:914;-1:-1:-1;;;;;;10475:914:0:o;22328:829::-;22401:17;22429:22;22462:17;22498:31;22557:14;;;;;;;;;-1:-1:-1;;;;;22557:14:0;22498:74;;22609:6;-1:-1:-1;;;;;22609:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22597:9;:35;:74;;;;22648:6;-1:-1:-1;;;;;22648:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22636:9;:35;22597:74;22593:127;;;22696:1;22699;22702:5;22688:20;;;;;;;;;22593:127;22771:16;22790:19;22799:9;22790:8;:19::i;:::-;22771:38;;22847:23;:21;:23::i;:::-;22830:40;-1:-1:-1;22830:40:0;22928:15;:8;22939:4;22928:15;:::i;:::-;22927:34;;;;:::i;:::-;22915:46;;22982:22;23035:19;;23007:6;-1:-1:-1;;;;;23007:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;22982:72;;23093:6;-1:-1:-1;;;;;23093:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23080:9;:38;;:69;;;;;23135:14;23122:9;:27;;23080:69;22328:829;;;;-1:-1:-1;;;;;22328:829:0:o;12027:268::-;12085:7;12105:16;12124;:14;:16::i;:::-;12105:35;-1:-1:-1;12105:35:0;12259:16;:9;12271:4;12259:16;:::i;12494:197::-;12547:7;12567:17;12587:26;:24;:26::i;:::-;12567:46;-1:-1:-1;12650:3:0;12632:14;12567:46;12644:2;12632:14;:::i;:::-;12631:22;;;;:::i;13185:252::-;13235:7;13255:17;13275:22;:20;:22::i;:::-;13255:42;;13308:16;13352:14;;;;;;;;;-1:-1:-1;;;;;13352:14:0;-1:-1:-1;;;;;13327:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13308:75;-1:-1:-1;13426:3:0;13402:20;13308:75;13402:9;:20;:::i;:::-;13401:28;;;;:::i;:::-;13394:35;;;;13185:252;:::o;9471:709::-;9528:7;9552:4;-1:-1:-1;;;;;9552:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9552:25:0;;;;;;;;-1:-1:-1;;9552:25:0;;;;;;;;;;;;:::i;:::-;;;9548:625;;9754:14;;9788:21;;;-1:-1:-1;;;9788:21:0;;;;-1:-1:-1;;;;;9754:14:0;;;;9788:4;;:19;;:21;;;;;;;;;;;;;;:4;:21;;;;;;;;;;-1:-1:-1;9788:21:0;;;;;;;;-1:-1:-1;;9788:21:0;;;;;;;;;;;;:::i;:::-;;;9784:378;;9966:6;-1:-1:-1;;;;;9966:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9958:65;;;;-1:-1:-1;;;9958:65:0;;14148:2:1;9958:65:0;;;14130:21:1;14187:2;14167:18;;;14160:30;-1:-1:-1;;;14206:18:1;;;14199:49;14265:18;;9958:65:0;13946:343:1;9958:65:0;10075:1;10050:22;;:26;10042:56;;;;-1:-1:-1;;;10042:56:0;;14496:2:1;10042:56:0;;;14478:21:1;14535:2;14515:18;;;14508:30;-1:-1:-1;;;14554:18:1;;;14547:47;14611:18;;10042:56:0;14294:341:1;10042:56:0;-1:-1:-1;;10124:22:0;;;9471:709::o;9784:378::-;9866:11;9471:709;-1:-1:-1;;9471:709:0:o;9548:625::-;9624:5;9471:709;-1:-1:-1;9471:709:0:o;14171:1498::-;6220:7;;;;6219:8;6211:35;;;;-1:-1:-1;;;6211:35:0;;7088:2:1;6211:35:0;;;7070:21:1;7127:2;7107:18;;;7100:30;-1:-1:-1;;;7146:18:1;;;7139:44;7200:18;;6211:35:0;6886:338:1;6211:35:0;6257:7;:14;;-1:-1:-1;;6257:14:0;6267:4;6257:14;;;14292::::1;::::0;14336:24:::1;::::0;;-1:-1:-1;;;14336:24:0;;;;-1:-1:-1;;;;;14292:14:0;;::::1;::::0;;;14336:22:::1;::::0;:24:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;14292:14;14336:24:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14328:55;;;::::0;-1:-1:-1;;;14328:55:0;;14842:2:1;14328:55:0::1;::::0;::::1;14824:21:1::0;14881:2;14861:18;;;14854:30;-1:-1:-1;;;14900:18:1;;;14893:48;14958:18;;14328:55:0::1;14640:342:1::0;14328:55:0::1;14415:6;-1:-1:-1::0;;;;;14415:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14402:9;:36;;14394:62;;;::::0;-1:-1:-1;;;14394:62:0;;15189:2:1;14394:62:0::1;::::0;::::1;15171:21:1::0;15228:2;15208:18;;;15201:30;-1:-1:-1;;;15247:18:1;;;15240:43;15300:18;;14394:62:0::1;14987:337:1::0;14394:62:0::1;14488:6;-1:-1:-1::0;;;;;14488:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14475:9;:36;;14467:62;;;::::0;-1:-1:-1;;;14467:62:0;;15531:2:1;14467:62:0::1;::::0;::::1;15513:21:1::0;15570:2;15550:18;;;15543:30;-1:-1:-1;;;15589:18:1;;;15582:43;15642:18;;14467:62:0::1;15329:337:1::0;14467:62:0::1;14639:5;14614:21;;14596:15;:39;;;;:::i;:::-;:48;14592:158;;14683:1;14661:19;:23:::0;14723:15:::1;14699:21;:39:::0;14592:158:::1;14820:16;14839:19;14848:9;14839:8;:19::i;:::-;14820:38;;14951:18;14972:23;:21;:23::i;:::-;14951:44:::0;-1:-1:-1;15152:20:0::1;14951:44:::0;15176:15:::1;:8:::0;15187:4:::1;15176:15;:::i;:::-;15175:30;;;;:::i;:::-;15152:53;;15249:1;15234:12;:16;15226:40;;;::::0;-1:-1:-1;;;15226:40:0;;15873:2:1;15226:40:0::1;::::0;::::1;15855:21:1::0;15912:2;15892:18;;;15885:30;-1:-1:-1;;;15931:18:1;;;15924:41;15982:18;;15226:40:0::1;15671:335:1::0;15226:40:0::1;15301:6;-1:-1:-1::0;;;;;15301:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15285:12;:41;;15277:70;;;::::0;-1:-1:-1;;;15277:70:0;;16213:2:1;15277:70:0::1;::::0;::::1;16195:21:1::0;16252:2;16232:18;;;16225:30;-1:-1:-1;;;16271:18:1;;;16264:46;16327:18;;15277:70:0::1;16011:340:1::0;15277:70:0::1;15404:6;-1:-1:-1::0;;;;;15404:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15388:12;15366:19;;:34;;;;:::i;:::-;:63;;15358:95;;;::::0;-1:-1:-1;;;15358:95:0;;8943:2:1;15358:95:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;-1:-1:-1;;;9001:18:1;;;8994:49;9060:18;;15358:95:0::1;8741:343:1::0;15358:95:0::1;15497:12;15474:19;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15530:9:0::1;::::0;15520:51:::1;::::0;-1:-1:-1;;;15520:51:0;;15546:10:::1;15520:51;::::0;::::1;9614::1::0;9681:18;;;9674:34;;;-1:-1:-1;;;;;15530:9:0;;::::1;::::0;15520:25:::1;::::0;9587:18:1;;15520:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15597:64:0::1;::::0;;15625:9:::1;10479:25:1::0;;10535:2;10520:18;;10513:34;;;10563:18;;;10556:34;;;15613:10:0::1;::::0;-1:-1:-1;15597:64:0::1;::::0;-1:-1:-1;10467:2:1;10452:18;15597:64:0::1;;;;;;;-1:-1:-1::0;;6294:7:0;:15;;-1:-1:-1;;6294:15:0;;;-1:-1:-1;;14171:1498:0:o;10188:161::-;10283:15;;10325:14;;10237:7;;10264:77;;-1:-1:-1;;;;;10283:15:0;;;;10325:14;10264:18;:77::i;:::-;10257:84;;10188:161;:::o;18208:1152::-;18265:23;18299:24;18334:25;18370:17;18398:20;18429:19;18459:24;18520:26;:24;:26::i;:::-;18502:44;;18576:23;:21;:23::i;:::-;18557:42;;18630:19;:17;:19::i;:::-;18610:39;-1:-1:-1;18674:20:0;;18670:132;;18774:16;18725:36;18744:17;18774:16;18725:36;:::i;:::-;18724:46;;18765:5;18724:46;:::i;:::-;18723:67;;;;:::i;:::-;18711:79;;18670:132;18881:14;;18975:27;;;-1:-1:-1;;;18975:27:0;;;;18922:21;;-1:-1:-1;;;;;;18881:14:0;;;;18822:31;;18881:14;;18975:25;;:27;;;;;;;;;;;;;;;18881:14;18975:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18954:48;;19045:10;19030:12;:25;19013:42;;19080:14;:39;;;;;19118:1;19098:17;:21;19080:39;19076:277;;;19208:20;19231:35;19240:25;19255:10;19240:12;:25;:::i;19231:35::-;19208:58;-1:-1:-1;19324:17:0;19301:19;19208:58;19316:4;19301:19;:::i;:::-;19300:41;;;;:::i;:::-;19281:60;;19121:232;19076:277;18491:869;;18208:1152;;;;;;;:::o;12814:250::-;12868:7;12888:17;12908:22;:20;:22::i;:::-;12888:42;;12941:14;12983;;;;;;;;;-1:-1:-1;;;;;12983:14:0;-1:-1:-1;;;;;12958:52:0;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27384:288;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27464:21:0;::::1;27456:46;;;;-1:-1:-1::0;;;27456:46:0::1;;;;;;;:::i;:::-;27535:15;::::0;;-1:-1:-1;;;;;27562:48:0;;::::1;-1:-1:-1::0;;;;;;27562:48:0;::::1;;::::0;;;27626:38:::1;::::0;27535:15;::::1;::::0;27626:38:::1;::::0;-1:-1:-1;;;16899:22:1;;16946:1;16937:11;;16697:257;24678:160:0;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;24760:1:::1;24748:9;:13;24740:37;;;::::0;-1:-1:-1;;;24740:37:0;;17161:2:1;24740:37:0::1;::::0;::::1;17143:21:1::0;17200:2;17180:18;;;17173:30;-1:-1:-1;;;17219:18:1;;;17212:41;17270:18;;24740:37:0::1;16959:335:1::0;24740:37:0::1;24793;::::0;24820:9:::1;521:25:1::0;;24808:10:0::1;::::0;24793:37:::1;::::0;509:2:1;494:18;24793:37:0::1;;;;;;;24678:160::o:0;24846:306::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;24931:21:::1;24921:6;:31;;24913:64;;;::::0;-1:-1:-1;;;24913:64:0;;8464:2:1;24913:64:0::1;::::0;::::1;8446:21:1::0;8503:2;8483:18;;;8476:30;-1:-1:-1;;;8522:18:1;;;8515:50;8582:18;;24913:64:0::1;8262:344:1::0;24913:64:0::1;24989:12;25015:5:::0;;25007:38:::1;::::0;-1:-1:-1;;;;;25015:5:0;;::::1;::::0;25034:6;;24989:12;25007:38;24989:12;25007:38;25034:6;25015:5;25007:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24988:57;;;25064:7;25056:39;;;::::0;-1:-1:-1;;;25056:39:0;;10131:2:1;25056:39:0::1;::::0;::::1;10113:21:1::0;10170:2;10150:18;;;10143:30;-1:-1:-1;;;10189:18:1;;;10182:49;10248:18;;25056:39:0::1;9929:343:1::0;25056:39:0::1;25130:5;::::0;25111:33:::1;::::0;521:25:1;;;-1:-1:-1;;;;;25130:5:0;;::::1;::::0;25111:33:::1;::::0;509:2:1;494:18;25111:33:0::1;375:177:1::0;26853:285:0;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26934:21:0;::::1;26926:46;;;;-1:-1:-1::0;;;26926:46:0::1;;;;;;;:::i;:::-;27005:13;::::0;;-1:-1:-1;;;;;27030:46:0;;::::1;-1:-1:-1::0;;;;;;27030:46:0;::::1;;::::0;;;27092:38:::1;::::0;27005:13;::::1;::::0;27092:38:::1;::::0;-1:-1:-1;;;17501:22:1;;17548:1;17539:11;;17299:257;28150:164:0;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28233:22:0;::::1;28225:47;;;;-1:-1:-1::0;;;28225:47:0::1;;;;;;;:::i;:::-;28283:12;:23:::0;;-1:-1:-1;;;;;;28283:23:0::1;-1:-1:-1::0;;;;;28283:23:0;;;::::1;::::0;;;::::1;::::0;;28150:164::o;19506:1889::-;19596:18;19625:17;19653:21;19685:28;19732:24;19759:23;:21;:23::i;:::-;19732:50;;19793:25;19821:19;:17;:19::i;:::-;19793:47;-1:-1:-1;19865:13:0;;;:38;;-1:-1:-1;19882:21:0;;19865:38;:64;;;-1:-1:-1;19907:22:0;;19865:64;19861:131;;;19954:1;19957;19960;19946:34;;;;;;;;;;;;;-1:-1:-1;;;19946:34:0;;;;;;;;;;;;;;;19861:131;20068:17;20057:8;:28;20053:903;;;20157:8;20116:28;20157:8;20116:17;:28;:::i;:::-;20115:38;;20148:5;20115:38;:::i;:::-;20114:51;;;;:::i;:::-;20253:14;;20363:27;;;-1:-1:-1;;;20363:27:0;;;;20102:63;;-1:-1:-1;;;;;;20253:14:0;;;;20306:21;;20194:31;;20253:14;;20363:25;;:27;;;;;;;;;;;;;;20253:14;20363:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20342:48;;20438:10;20423:12;:25;20419:429;;;20545:20;20568:35;20577:25;20592:10;20577:12;:25;:::i;20568:35::-;20545:58;-1:-1:-1;20622:19:0;20668:17;20645:19;20545:58;20660:4;20645:19;:::i;:::-;20644:41;;;;:::i;:::-;20622:63;;20704:18;20725:6;-1:-1:-1;;;;;20725:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20704:42;;20795:10;20781:11;:24;:51;;20822:10;20781:51;;;20808:11;20781:51;20765:67;;20450:398;;;20419:429;-1:-1:-1;;20876:68:0;;;;;;;;;;;;;;;;;20884:1;;-1:-1:-1;20876:68:0;-1:-1:-1;20876:68:0;;-1:-1:-1;;;20876:68:0;20053:903;21034:16;21023:8;:27;21019:305;;;21121:16;21081:27;21121:16;21081:8;:27;:::i;:::-;21080:37;;21112:5;21080:37;:::i;:::-;21079:58;;;;:::i;:::-;21067:70;;21193:14;;;;;;;;;-1:-1:-1;;;;;21193:14:0;-1:-1:-1;;;;;21168:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21242:70;;;;;;;;;;;;;;;;;21250:1;;-1:-1:-1;21152:75:0;;-1:-1:-1;21242:70:0;-1:-1:-1;21242:70:0;;-1:-1:-1;;21242:70:0;21019:305;21352:1;21355;21358;21344:43;;;;;;;;;;;;;;;;;;;;;;;;;;;19506:1889;;;;;;:::o;8633:830::-;8750:7;8785:14;8814:12;8856:17;8888:22;8924:9;-1:-1:-1;;;;;8924:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8770:181;;;;;;;;;8992:1;8980:9;:13;8972:43;;;;-1:-1:-1;;;8972:43:0;;17763:2:1;8972:43:0;;;17745:21:1;17802:2;17782:18;;;17775:30;-1:-1:-1;;;17821:18:1;;;17814:47;17878:18;;8972:43:0;17561:341:1;8972:43:0;9053:7;-1:-1:-1;;;;;9034:26:0;:15;-1:-1:-1;;;;;9034:26:0;;;9026:50;;;;-1:-1:-1;;;9026:50:0;;18109:2:1;9026:50:0;;;18091:21:1;18148:2;18128:18;;;18121:30;-1:-1:-1;;;18167:18:1;;;18160:41;18218:18;;9026:50:0;17907:335:1;9026:50:0;9126:6;-1:-1:-1;;;;;9126:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9095:27;9113:9;9095:15;:27;:::i;:::-;:63;;9087:88;;;;-1:-1:-1;;;9087:88:0;;18449:2:1;9087:88:0;;;18431:21:1;18488:2;18468:18;;;18461:30;-1:-1:-1;;;18507:18:1;;;18500:42;18559:18;;9087:88:0;18247:336:1;9087:88:0;9202:1;9194:5;:9;9186:35;;;;-1:-1:-1;;;9186:35:0;;18790:2:1;9186:35:0;;;18772:21:1;18829:2;18809:18;;;18802:30;-1:-1:-1;;;18848:18:1;;;18841:43;18901:18;;9186:35:0;18588:337:1;9186:35:0;9242:14;9267:5;9242:31;;9302:6;-1:-1:-1;;;;;9302:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9292:6;:31;;9284:63;;;;-1:-1:-1;;;9284:63:0;;;;;;;:::i;:::-;9376:6;-1:-1:-1;;;;;9376:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9366:6;:31;;9358:63;;;;-1:-1:-1;;;9358:63:0;;;;;;;:::i;:::-;9449:6;8633:830;-1:-1:-1;;;;;;;8633:830:0:o;765:248:1:-;833:6;841;894:2;882:9;873:7;869:23;865:32;862:52;;;910:1;907;900:12;862:52;-1:-1:-1;;933:23:1;;;1003:2;988:18;;;975:32;;-1:-1:-1;765:248:1:o;1359:286::-;1418:6;1471:2;1459:9;1450:7;1446:23;1442:32;1439:52;;;1487:1;1484;1477:12;1439:52;1513:23;;-1:-1:-1;;;;;1565:31:1;;1555:42;;1545:70;;1611:1;1608;1601:12;1650:180;1709:6;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;-1:-1:-1;1801:23:1;;1650:180;-1:-1:-1;1650:180:1:o;3027:773::-;3268:4;3260:6;3256:17;3245:9;3238:36;3219:4;3293:2;3331:6;3326:2;3315:9;3311:18;3304:34;3374:6;3369:2;3358:9;3354:18;3347:34;3417:3;3412:2;3401:9;3397:18;3390:31;3450:6;3444:13;3494:6;3488:3;3477:9;3473:19;3466:35;3519:1;3529:141;3543:6;3540:1;3537:13;3529:141;;;3639:14;;;3635:23;;3629:30;3604:17;;;3623:3;3600:27;3593:67;3558:10;;3529:141;;;3533:3;3720:1;3714:3;3705:6;3694:9;3690:22;3686:32;3679:43;3790:3;3783:2;3779:7;3774:2;3766:6;3762:15;3758:29;3747:9;3743:45;3739:55;3731:63;;;;3027:773;;;;;;;:::o;3805:127::-;3866:10;3861:3;3857:20;3854:1;3847:31;3897:4;3894:1;3887:15;3921:4;3918:1;3911:15;3937:128;4004:9;;;4025:11;;;4022:37;;;4039:18;;:::i;4070:168::-;4143:9;;;4174;;4191:15;;;4185:22;;4171:37;4161:71;;4212:18;;:::i;4243:217::-;4283:1;4309;4299:132;;4353:10;4348:3;4344:20;4341:1;4334:31;4388:4;4385:1;4378:15;4416:4;4413:1;4406:15;4299:132;-1:-1:-1;4445:9:1;;4243:217::o;4465:332::-;4667:2;4649:21;;;4706:1;4686:18;;;4679:29;-1:-1:-1;;;4739:2:1;4724:18;;4717:39;4788:2;4773:18;;4465:332::o;5372:277::-;5439:6;5492:2;5480:9;5471:7;5467:23;5463:32;5460:52;;;5508:1;5505;5498:12;5460:52;5540:9;5534:16;5593:5;5586:13;5579:21;5572:5;5569:32;5559:60;;5615:1;5612;5605:12;6001:184;6071:6;6124:2;6112:9;6103:7;6099:23;6095:32;6092:52;;;6140:1;6137;6130:12;6092:52;-1:-1:-1;6163:16:1;;6001:184;-1:-1:-1;6001:184:1:o;6190:343::-;6392:2;6374:21;;;6431:2;6411:18;;;6404:30;-1:-1:-1;;;6465:2:1;6450:18;;6443:49;6524:2;6509:18;;6190:343::o;6538:::-;6740:2;6722:21;;;6779:2;6759:18;;;6752:30;-1:-1:-1;;;6813:2:1;6798:18;;6791:49;6872:2;6857:18;;6538:343::o;8611:125::-;8676:9;;;8697:10;;;8694:36;;;8710:18;;:::i;11200:179::-;11278:13;;-1:-1:-1;;;;;11320:34:1;;11310:45;;11300:73;;11369:1;11366;11359:12;11384:473;11487:6;11495;11503;11511;11519;11572:3;11560:9;11551:7;11547:23;11543:33;11540:53;;;11589:1;11586;11579:12;11540:53;11612:39;11641:9;11612:39;:::i;:::-;11602:49;;11691:2;11680:9;11676:18;11670:25;11660:35;;11735:2;11724:9;11720:18;11714:25;11704:35;;11779:2;11768:9;11764:18;11758:25;11748:35;;11802:49;11846:3;11835:9;11831:19;11802:49;:::i;:::-;11792:59;;11384:473;;;;;;;;:::o;16356:336::-;16558:2;16540:21;;;16597:2;16577:18;;;16570:30;-1:-1:-1;;;16631:2:1;16616:18;;16609:42;16683:2;16668:18;;16356:336::o
Swarm Source
ipfs://79aaf001245da8e83ef9d16851eadcb339f81f66599e0c8af50b02ace7517333
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.