ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
6
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
162.844532977052416018 FARMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FARMER
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-03 */ /** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // OpenZeppelin Contracts v5.0.1 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Contract module that helps prevent reentrant calls to a function. */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "R1"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert("O1"); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == msg.sender, "O2"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "O1"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is IERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0) && to != address(0), "E1"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "E2"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "E3"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0) && spender != address(0), "E4"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= amount, "E5"); unchecked { _approve(owner, spender, currentAllowance - amount); } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); // Mevcut fonksiyonlar function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); // Yeni eklenen fonksiyonlar function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); // WETH ile ilgili fonksiyonlar function swapExactTokensForWETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactWETHForETH( uint wethAmount, uint amountOutMin, address to, uint deadline ) external returns (uint[] memory amounts); } interface IMetropolisFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // Pair interface'ini de ekleyelim interface IMetropolisPair { function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; } // FARMER Token Contract contract FARMER is ERC20, ReentrancyGuard, Ownable { // Constants uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18; uint256 private constant TAX_RATE = 5; // 5% uint256 private constant LIQUIDITY_TAX = 25; // 2.5% uint256 private constant AIRDROP_TAX = 25; // 2.5% uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity uint256 private constant MAX_SLIPPAGE = 50; // 50% slippage tolerance (artırıldı) // Metropolis DEX addresses IMetropolisRouter public metropolisRouter; IMetropolisFactory public metropolisFactory; address public sonicToken; address public liquidityPair; address public treasuryWallet; // Holder tracking mapping(address => bool) public isHolder; address[] public holders; // Events event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount); event AirdropDistributed(uint256 amount, uint256 holdersCount); event SwapFailed(string reason); event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop); event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived); event TreasuryWalletUpdated(address oldTreasury, address newTreasury); event LiquidityAddFailed(string reason); event AirdropFailed(string reason); event ApprovalRefreshed(address token, address spender, uint256 amount); event WaitingForTreasuryTransfer(uint256 amount); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; bool private _inSwap; constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) { address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0; address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175; require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1"); metropolisRouter = IMetropolisRouter(_metropolisRouter); metropolisFactory = IMetropolisFactory(_metropolisFactory); sonicToken = _sonicToken; treasuryWallet = _treasuryWallet; _mint(address(this), TOTAL_SUPPLY); } function initialize() external onlyOwner { require(!_initialized, "F2"); _initialized = true; // Try to get existing pair first liquidityPair = metropolisFactory.getPair(address(this), sonicToken); // If pair doesn't exist, create it if (liquidityPair == address(0)) { liquidityPair = metropolisFactory.createPair(address(this), sonicToken); } require(liquidityPair != address(0), "F3"); _approve(address(this), address(metropolisRouter), type(uint256).max); require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4"); IERC20(sonicToken).approve(liquidityPair, type(uint256).max); IERC20(address(this)).approve(liquidityPair, type(uint256).max); } function _transfer( address from, address to, uint256 amount ) internal virtual override { // Vergi işleme mantığı if ( !_inSwap && from != owner() && to != owner() && from != address(this) && to == liquidityPair ) { // Vergi hesapla uint256 taxAmount = amount * TAX_RATE / 100; if (taxAmount > 0) { // Vergiyi likidite ve airdrop için ayır uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100; uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100; // Vergi miktarını ana miktardan düş uint256 transferAmount = amount - taxAmount; // Vergiyi kontrata aktar super._transfer(from, address(this), taxAmount); // Kalan miktarı alıcıya aktar super._transfer(from, to, transferAmount); // Bekleyen miktarları güncelle _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; // Büyük miktarlarda satış için işlem sınırlaması // Eğer bekleyen tokenlar belirli bir miktarı aşarsa, işlemi başlatmadan önce bekle // Bu, arka arkaya büyük satışlarda slippage sorununu önlemeye yardımcı olur if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS && _pendingLiquidityTokens + _pendingAirdropTokens < 1000 * 10**18) { // 1000 token üst sınırı try this.processLiquidityAndAirdrop() {} catch {} } // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); return; } } // Normal transfer super._transfer(from, to, amount); // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); } function _updateHolder(address account, bool isHolderStatus) private { if (account != liquidityPair && account != address(this)) { if (isHolderStatus && !isHolder[account]) { isHolder[account] = true; holders.push(account); } else if (!isHolderStatus && isHolder[account]) { isHolder[account] = false; // Remove from holders array for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == account) { holders[i] = holders[holders.length - 1]; holders.pop(); break; } } } } } function processLiquidityAndAirdrop() external nonReentrant { require(!_inSwap, "AP"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Reset pending amounts _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Büyük miktarlarda işlem için kontrol uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Eğer toplam token miktarı çok büyükse, işlemi daha küçük parçalara böl if (totalTokensToSwap > 1000 * 10**18) { // 1000 token üst sınırı uint256 processAmount = 1000 * 10**18; // İşlenecek maksimum miktar uint256 remainingAmount = totalTokensToSwap - processAmount; // Kalan miktarı bekleyen tokenlara geri ekle _pendingLiquidityTokens = remainingAmount * tokensForLiquidity / totalTokensToSwap; _pendingAirdropTokens = remainingAmount * tokensForAirdrop / totalTokensToSwap; // İşlenecek miktarları güncelle tokensForLiquidity = processAmount * tokensForLiquidity / totalTokensToSwap; tokensForAirdrop = processAmount * tokensForAirdrop / totalTokensToSwap; totalTokensToSwap = processAmount; } // Process swap uint256 wethReceived = _processSwap(totalTokensToSwap); if (wethReceived == 0) { _inSwap = false; return; } // Treasury wallet'tan WETH transferini bekle emit WaitingForTreasuryTransfer(wethReceived); // Treasury wallet'tan WETH'yi kontrata transfer etmeyi dene uint256 treasuryWethBalance = IERC20(sonicToken).balanceOf(treasuryWallet); if (treasuryWethBalance >= wethReceived) { // Treasury wallet'ın WETH'yi kontrata transfer etmesi için onayı kontrol et if (IERC20(sonicToken).allowance(treasuryWallet, address(this)) >= wethReceived) { // Treasury wallet'tan WETH'yi kontrata transfer et bool success = IERC20(sonicToken).transferFrom(treasuryWallet, address(this), wethReceived); if (!success) { emit SwapFailed("WETH transfer from treasury failed"); _inSwap = false; return; } } else { emit SwapFailed("Treasury wallet has not approved WETH transfer"); _inSwap = false; return; } } else { emit SwapFailed("Treasury wallet does not have enough WETH"); _inSwap = false; return; } // Kontratın WETH bakiyesini kontrol et uint256 contractWETHBalance = IERC20(sonicToken).balanceOf(address(this)); if (contractWETHBalance == 0) { emit SwapFailed("No WETH received from treasury wallet"); _inSwap = false; return; } // Calculate amounts uint256 wethForLiquidity = contractWETHBalance * tokensForLiquidity / totalTokensToSwap; uint256 wethForAirdrop = contractWETHBalance - wethForLiquidity; // WETH'nin bir kısmını ETH'ye çevir ve likidite ekle if (wethForLiquidity > 0) { _processLiquidity(wethForLiquidity, tokensForLiquidity); } // Process airdrop with WETH if (wethForAirdrop > 0) { _processAirdropWithWETH(wethForAirdrop); } _inSwap = false; } // Likidite işlemini ayrı bir fonksiyona taşıdık function _processLiquidity(uint256 wethAmount, uint256 tokenAmount) private { // WETH -> ETH dönüşümü için onay ver IERC20(sonicToken).approve(address(metropolisRouter), wethAmount); // Adres dizisini oluştur address[] memory path = new address[](2); path[0] = sonicToken; path[1] = metropolisRouter.WETH(); // WETH -> ETH dönüşümü için fee-on-transfer destekli fonksiyonu kullan try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( wethAmount, 0, // Minimum çıktı miktarı 0 olarak ayarlandı (slippage toleransını artırmak için) path, address(this), block.timestamp + 600 ) { // ETH alındı, şimdi likidite ekle uint256 ethBalance = address(this).balance; if (ethBalance > 0) { _addLiquidity(ethBalance, tokenAmount); } } catch Error(string memory reason) { emit SwapFailed(reason); } catch { emit SwapFailed("WETH to ETH swap failed"); } } // Likidite ekleme işlemini ayrı bir fonksiyona taşıdık function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { // Daha yüksek slippage toleransı için minimum miktarları düşür uint256 minTokenAmount = tokenAmount * (100 - MAX_SLIPPAGE) / 100; uint256 minEthAmount = ethAmount * (100 - MAX_SLIPPAGE) / 100; try metropolisRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, minTokenAmount, minEthAmount, address(this), block.timestamp + 600 ) { emit LiquidityAdded(tokenAmount, ethAmount); } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("E"); } } function _processSwap(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; address[] memory path = new address[](2); path[0] = address(this); path[1] = sonicToken; // Swap işlemi için minimum çıktı miktarını hesapla // Daha yüksek slippage toleransı için minimum çıktı miktarını düşük tutuyoruz uint256 minAmountOut = 0; // Minimum çıktı miktarı 0 olarak ayarlandı // FARMER -> WETH swap işlemi try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, minAmountOut, path, treasuryWallet, // WETH'yi treasury wallet'a gönder block.timestamp + 600 ) { // Swap başarılı oldu, treasury wallet'ın WETH bakiyesini kontrol et uint256 treasuryWethBalance = IERC20(sonicToken).balanceOf(treasuryWallet); emit SwapSuccessful(tokenAmount, treasuryWethBalance); return treasuryWethBalance; } catch Error(string memory reason) { emit SwapFailed(reason); return 0; } catch { emit SwapFailed("E"); return 0; } } // WETH ile airdrop işlemi function _processAirdropWithWETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 amountPerHolder = amount / holdersCount; if (amountPerHolder == 0) return; for (uint256 i = 0; i < holdersCount; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { bool success = IERC20(sonicToken).transfer(holder, amountPerHolder); if (!success) { // Başarısız olursa sessizce devam et } } } emit AirdropDistributed(amount, holdersCount); } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } // Initial liquidity function with WSonic function addInitialLiquidityWithWSonic(uint256 tokenAmount, uint256 sonicAmount) external onlyOwner { require(tokenAmount > 0, "NT"); require(sonicAmount > 0, "NS"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB" ); require( IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount, "IS" ); // WSonic token'ları kontrata transfer et require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum sonic miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } // Kalan WSonic token'ları geri gönder uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } // Tüm FARMER tokenlarını likiditeye eklemek için fonksiyon function addInitialLiquidityWithAllTokens(uint256 sonicAmount) external onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(sonicAmount > 0, "NS"); require( IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount, "IS" ); // WSonic token'ları kontrata transfer et require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum sonic miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } // Kalan WSonic token'ları geri gönder uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } // ETH ile başlangıç likidite ekleme fonksiyonu function addInitialLiquidityWithETH(uint256 tokenAmount) external payable onlyOwner { require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum ETH miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert("FL"); } } // Tüm FARMER tokenlarını ETH ile likiditeye eklemek için fonksiyon function addInitialLiquidityWithAllTokensAndETH() external payable onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum ETH miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert("FL"); } } function setRouter(address _router) external onlyOwner { require(_router != address(0), "IR"); metropolisRouter = IMetropolisRouter(_router); } function rescueTokens(address _token, uint256 _amount) external onlyOwner { require(_token != address(this), "CF"); IERC20(_token).transfer(owner(), _amount); } // View functions for pending amounts function getPendingLiquidityTokens() external view returns (uint256) { return _pendingLiquidityTokens; } function getPendingAirdropTokens() external view returns (uint256) { return _pendingAirdropTokens; } // Manual trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP"); require(holders.length > 0, "NH"); try this.processLiquidityAndAirdrop() { // Process successful } catch { emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } } // Router için onayları yenile function refreshAllApprovals() external onlyOwner { // Router için onayları yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // Sonic token için onayları yenile try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) { emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max); } catch {} // Likidite çifti için onayları yenile if (liquidityPair != address(0)) { try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(sonicToken, liquidityPair, type(uint256).max); } catch {} try IERC20(address(this)).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(address(this), liquidityPair, type(uint256).max); } catch {} } } // Set treasury wallet (only owner) function setTreasuryWallet(address _treasuryWallet) external onlyOwner { require(_treasuryWallet != address(0), "IT"); address oldTreasury = treasuryWallet; treasuryWallet = _treasuryWallet; emit TreasuryWalletUpdated(oldTreasury, _treasuryWallet); } // Treasury wallet'ın kontrata WSonic token transferi için onay vermesini sağla function approveTreasuryToContract() external { require(msg.sender == treasuryWallet, "OT"); require(IERC20(sonicToken).approve(address(this), type(uint256).max), "AF"); } function manualLiquidityAndAirdrop() external onlyOwner { require(!_inSwap, "AP"); _inSwap = true; // Calculate amounts based on tax rates uint256 contractBalance = IERC20(address(this)).balanceOf(address(this)); require(contractBalance > 0, "NB"); uint256 tokensForLiquidity = contractBalance * LIQUIDITY_TAX / (LIQUIDITY_TAX + AIRDROP_TAX); uint256 tokensForAirdrop = contractBalance - tokensForLiquidity; emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Process swap uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; uint256 wethReceived = _processSwap(totalTokensToSwap); if (wethReceived == 0) { _inSwap = false; return; } // Treasury wallet'tan WETH transferini bekle emit WaitingForTreasuryTransfer(wethReceived); // Kontratın WETH bakiyesini kontrol et uint256 contractWETHBalance = IERC20(sonicToken).balanceOf(address(this)); if (contractWETHBalance == 0) { emit SwapFailed("No WETH received from treasury wallet"); _inSwap = false; return; } // Calculate amounts uint256 wethForLiquidity = contractWETHBalance * tokensForLiquidity / totalTokensToSwap; uint256 wethForAirdrop = contractWETHBalance - wethForLiquidity; // WETH'nin bir kısmını ETH'ye çevir ve likidite ekle if (wethForLiquidity > 0) { _processLiquidity(wethForLiquidity, tokensForLiquidity); } // Process airdrop with WETH if (wethForAirdrop > 0) { _processAirdropWithWETH(wethForAirdrop); } _inSwap = false; } receive() external payable {} // ETH ile airdrop işlemi function _processAirdropWithETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 amountPerHolder = amount / holdersCount; if (amountPerHolder == 0) return; for (uint256 i = 0; i < holdersCount; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { (bool success, ) = payable(holder).call{value: amountPerHolder}(""); if (!success) { // Başarısız olursa sessizce devam et } } } emit AirdropDistributed(amount, holdersCount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","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":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WaitingForTreasuryTransfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addInitialLiquidityWithAllTokensAndETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidityWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithWSonic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveTreasuryToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b613f0480620004186000396000f3fe6080604052600436106102085760003560e01c80637ac84fc111610118578063ac3508e8116100a0578063dd62ed3e1161006f578063dd62ed3e146105ba578063e3a8fa5514610600578063ed9cacfe14610608578063f2fde38b1461061d578063fd7c9fab1461063d57600080fd5b8063ac3508e814610542578063c0d7865514610555578063c5eaf1e914610575578063d4d7b19a1461058a57600080fd5b80638da5cb5b116100e75780638da5cb5b146104af57806395d89b41146104cd578063975b87e8146104e2578063a8602fea14610502578063a9059cbb1461052257600080fd5b80637ac84fc1146104505780637ff793d314610465578063808a54571461047a5780638129fc1c1461049a57600080fd5b8063397883d21161019b5780635d76b04c1161016a5780635d76b04c146103ae5780635fe8e7cc146103c357806362b6327a146103e557806370a08231146104055780637136982b1461043b57600080fd5b8063397883d214610339578063461a3a951461034e5780634626402b1461036e578063573761981461038e57600080fd5b80631fed05c3116101d75780631fed05c3146102a357806323b872dd146102c55780632a11ced0146102e5578063313ce5671461031d57600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022961065d565b6040516102369190613916565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e610279366004613979565b6106ef565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b506102c36102be3660046139a5565b610709565b005b3480156102d157600080fd5b5061027e6102e03660046139be565b610ddb565b3480156102f157600080fd5b506103056103003660046139a5565b610dff565b6040516001600160a01b039091168152602001610236565b34801561032957600080fd5b5060405160128152602001610236565b34801561034557600080fd5b506102c3610e29565b34801561035a57600080fd5b50600954610305906001600160a01b031681565b34801561037a57600080fd5b50600b54610305906001600160a01b031681565b34801561039a57600080fd5b506102c36103a9366004613979565b610f42565b3480156103ba57600080fd5b50600f54610250565b3480156103cf57600080fd5b506103d8611009565b6040516102369190613a43565b3480156103f157600080fd5b50600754610305906001600160a01b031681565b34801561041157600080fd5b50610250610420366004613a5d565b6001600160a01b031660009081526020819052604090205490565b34801561044757600080fd5b50600d54610250565b34801561045c57600080fd5b506102c361106a565b34801561047157600080fd5b506102c3611643565b34801561048657600080fd5b50600a54610305906001600160a01b031681565b3480156104a657600080fd5b506102c361172a565b3480156104bb57600080fd5b506006546001600160a01b0316610305565b3480156104d957600080fd5b50610229611aa0565b3480156104ee57600080fd5b506102c36104fd366004613a7a565b611aaf565b34801561050e57600080fd5b506102c361051d366004613a5d565b611fe4565b34801561052e57600080fd5b5061027e61053d366004613979565b612088565b6102c36105503660046139a5565b612096565b34801561056157600080fd5b506102c3610570366004613a5d565b612302565b34801561058157600080fd5b506102c3612367565b34801561059657600080fd5b5061027e6105a5366004613a5d565b600c6020526000908152604090205460ff1681565b3480156105c657600080fd5b506102506105d5366004613a9c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c3612652565b34801561061457600080fd5b506102c3612713565b34801561062957600080fd5b506102c3610638366004613a5d565b61298c565b34801561064957600080fd5b50600854610305906001600160a01b031681565b60606003805461066c90613ad5565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613ad5565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b6000336106fd8185856129d8565b60019150505b92915050565b610711612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190613b0f565b90506000811161079e5760405162461bcd60e51b815260040161079590613b28565b60405180910390fd5b600082116107d35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6009546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190613b0f565b10156108725760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906108a690339030908790600401613b44565b6020604051808303816000875af11580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e99190613b68565b61091a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b6007546109329030906001600160a01b0316836129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610968929116908690600401613b8a565b6020604051808303816000875af1158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190613b68565b506007546009546001600160a01b039182169163e8e33700913091168486600080336109d942610258613bb9565b6040518963ffffffff1660e01b81526004016109fc989796959493929190613bcc565b6060604051808303816000875af1925050508015610a37575060408051601f3d908101601f19168201909252610a3491810190613c15565b60015b610cbf57610a43613c43565b806308c379a003610b865750610a57613c9a565b80610a625750610b88565b600754610a7b9030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610ab292911690600090600401613b8a565b6020604051808303816000875af1158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908790600401613b8a565b6020604051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613b68565b508060405162461bcd60e51b81526004016107959190613916565b505b600754610ba19030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610bd892911690600090600401613b8a565b6020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908690600401613b8a565b6020604051808303816000875af1158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190613b68565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610795565b50506040805183815260208101859052600080516020613eaf8339815191529250015b60405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613b0f565b90508015610dd65760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d919033908590600401613b8a565b6020604051808303816000875af1158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613b68565b505b505050565b600033610de9858285612ad8565b610df4858585612b40565b506001949350505050565b600d8181548110610e0f57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e31612a8a565b6000600e541180610e4457506000600f54115b610e755760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610795565b600d54610ea95760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610795565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f40577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610f37929190918252602082015260400190565b60405180910390a15b565b610f4a612a8a565b306001600160a01b03831603610f875760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610795565b816001600160a01b031663a9059cbb610fa86006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610fc6929190613b8a565b6020604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd69190613b68565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611043575050505050905090565b6002600554036110a15760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610795565b6002600555601054610100900460ff16156110e35760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff001916610100179055600e54600f5481158015611104575080155b1561111b5750506010805461ff001916905561163c565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f556007546111789030906001600160a01b03166000196129d8565b60006111848284613bb9565b9050683635c9adc5dea0000081111561121257683635c9adc5dea0000060006111ad8284613d24565b9050826111ba8683613d37565b6111c49190613d4e565b600e55826111d28583613d37565b6111dc9190613d4e565b600f55826111ea8684613d37565b6111f49190613d4e565b9450826112018584613d37565b61120b9190613d4e565b9350909150505b600061121d82612dbd565b90508060000361123c5750506010805461ff00191690555061163c9050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a1600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190613b0f565b90508181106114f157600954600b54604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190613b0f565b1061146f57600954600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926113a8929091169030908890600401613b44565b6020604051808303816000875af11580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb9190613b68565b90508061146957600080516020613e8f83398151915260405161144a9060208082526022908201527f57455448207472616e736665722066726f6d207472656173757279206661696c604082015261195960f21b606082015260800190565b60405180910390a150506010805461ff00191690555061163c92505050565b50611550565b600080516020613e8f8339815191526040516114d3906020808252602e908201527f54726561737572792077616c6c657420686173206e6f7420617070726f76656460408201526d102ba2aa24103a3930b739b332b960911b606082015260800190565b60405180910390a150506010805461ff00191690555061163c915050565b600080516020613e8f8339815191526040516114d39060208082526029908201527f54726561737572792077616c6c657420646f6573206e6f74206861766520656e6040820152680deeaced040ae8aa8960bb1b606082015260800190565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190613b0f565b9050806000036115e257600080516020613e8f83398151915260405161144a90613d70565b6000846115ef8884613d37565b6115f99190613d4e565b905060006116078284613d24565b90508115611619576116198289613015565b8015611628576116288161329e565b50506010805461ff00191690555050505050505b6001600555565b600b546001600160a01b031633146116825760405162461bcd60e51b815260206004820152600260248201526113d560f21b6044820152606401610795565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906116b690309060001990600401613b8a565b6020604051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f99190613b68565b610f405760405162461bcd60e51b815260206004820152600260248201526120a360f11b6044820152606401610795565b611732612a8a565b60105460ff161561176a5760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610795565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed9190613db5565b600a80546001600160a01b0319166001600160a01b039290921691821790556118a9576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190613db5565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166118e65760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610795565b6007546119009030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119389291169060001990600401613b8a565b6020604051808303816000875af1158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197b9190613b68565b6119ac5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610795565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119e49291169060001990600401613b8a565b6020604051808303816000875af1158015611a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a279190613b68565b50600a5460405163095ea7b360e01b8152309163095ea7b391611a5a916001600160a01b03169060001990600401613b8a565b6020604051808303816000875af1158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613b68565b50565b60606004805461066c90613ad5565b611ab7612a8a565b60008211611ad75760405162461bcd60e51b815260040161079590613b28565b60008111611b0c5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d9190613b0f565b1015611ba05760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190613b0f565b1015611c3f5760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611c7390339030908690600401613b44565b6020604051808303816000875af1158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190613b68565b611ce75760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b600754611cff9030906001600160a01b0316846129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d35929116908590600401613b8a565b6020604051808303816000875af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190613b68565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611da642610258613bb9565b6040518963ffffffff1660e01b8152600401611dc9989796959493929190613bcc565b6060604051808303816000875af1925050508015611e04575060408051601f3d908101601f19168201909252611e0191810190613c15565b60015b611fbd57611e10613c43565b806308c379a003611ef55750611e24613c9a565b80611e2f5750611ef7565b600754611e489030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611e7f92911690600090600401613b8a565b6020604051808303816000875af1158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908690600401613b8a565b505b600754611f109030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611f4792911690600090600401613b8a565b6020604051808303816000875af1158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a9190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908590600401613b8a565b50506040805184815260208101849052600080516020613eaf833981519152925001610ce2565b611fec612a8a565b6001600160a01b0381166120275760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610795565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336106fd818585612b40565b61209e612a8a565b600081116120be5760405162461bcd60e51b815260040161079590613b28565b600034116120f35760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190613b0f565b10156121875760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b60075461219f9030906001600160a01b0316836129d8565b6007546001600160a01b031663f305d719343084600080336121c342610258613bb9565b6040518863ffffffff1660e01b81526004016121e496959493929190613dd2565b60606040518083038185885af19350505050801561221f575060408051601f3d908101601f1916820190925261221c91810190613c15565b60015b6122d65761222b613c43565b806308c379a00361228f575061223f613c9a565b8061224a5750612291565b6007546122639030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610b6b573d6000803e3d6000fd5b505b6007546122aa9030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610c91573d6000803e3d6000fd5b505060408051838152346020820152600080516020613eaf83398151915292500160405180910390a150565b61230a612a8a565b6001600160a01b0381166123455760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610795565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61236f612a8a565b601054610100900460ff16156123ac5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff0019166101001790556040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156123f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241d9190613b0f565b9050600081116124545760405162461bcd60e51b8152602060048201526002602482015261272160f11b6044820152606401610795565b6000612461601980613bb9565b61246c601984613d37565b6124769190613d4e565b905060006124848284613d24565b60408051848152602081018390529192507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16007546124da9030906001600160a01b03166000196129d8565b60006124e68284613bb9565b905060006124f382612dbd565b9050806000036125135750506010805461ff001916905550610f40915050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b39190613b0f565b9050806000036125f757600080516020613e8f8339815191526040516125d890613d70565b60405180910390a150506010805461ff001916905550610f4092505050565b6000836126048784613d37565b61260e9190613d4e565b9050600061261c8284613d24565b9050811561262e5761262e8288613015565b801561263d5761263d8161329e565b50506010805461ff0019169055505050505050565b61265a612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc9190613b0f565b9050600081116126de5760405162461bcd60e51b815260040161079590613b28565b600034116121875760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b61271b612a8a565b6007546127359030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261276d9291169060001990600401613b8a565b6020604051808303816000875af19250505080156127a8575060408051601f3d908101601f191682019092526127a591810190613b68565b60015b156127fe57506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926127f5926001600160a01b039182169291169060001990613b44565b60405180910390a15b600a546001600160a01b031615610f4057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926128479291169060001990600401613b8a565b6020604051808303816000875af1925050508015612882575060408051601f3d908101601f1916820190925261287f91810190613b68565b60015b156128d85750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926128cf926001600160a01b039182169291169060001990613b44565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b39161290a916001600160a01b03169060001990600401613b8a565b6020604051808303816000875af1925050508015612945575060408051601f3d908101601f1916820190925261294291810190613b68565b60015b15610f405750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91610f379130916001600160a01b03169060001990613b44565b612994612a8a565b6001600160a01b0381166129cf5760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610795565b611a9d81613401565b6001600160a01b038316158015906129f857506001600160a01b03821615155b612a295760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b33612a9d6006546001600160a01b031690565b6001600160a01b031614610f405760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610795565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612b335760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610795565b610dd484848484036129d8565b601054610100900460ff16158015612b6657506006546001600160a01b03848116911614155b8015612b8057506006546001600160a01b03838116911614155b8015612b9557506001600160a01b0383163014155b8015612bae5750600a546001600160a01b038381169116145b15612d5a5760006064612bc2600584613d37565b612bcc9190613d4e565b90508015612d585760006064612be3601984613d37565b612bed9190613d4e565b905060006064612bfe601985613d37565b612c089190613d4e565b90506000612c168486613d24565b9050612c23873086613453565b612c2e878783613453565b82600e6000828254612c409190613bb9565b9250508190555081600f6000828254612c599190613bb9565b9091555050600f54600e5468056bc75e2d6310000091612c7891613bb9565b10158015612c9d5750683635c9adc5dea00000600f54600e54612c9b9190613bb9565b105b15612cf057306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cdd57600080fd5b505af1925050508015612cee575060015b505b612d2387678ac7230489e80000612d1c8a6001600160a01b031660009081526020819052604090205490565b1015613558565b612d4f86678ac7230489e80000612d1c896001600160a01b031660009081526020819052604090205490565b50505050505050565b505b612d65838383613453565b612d9183678ac7230489e80000612d1c866001600160a01b031660009081526020819052604090205490565b610dd682678ac7230489e80000612d1c856001600160a01b031660009081526020819052604090205490565b600081600003612dcf57506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e0457612e04613e0d565b6001600160a01b039283166020918202929092010152600954825191169082906001908110612e3557612e35613e0d565b6001600160a01b039283166020918202929092010152600754600b5460009291821691635c11d7959187918591879116612e7142610258613bb9565b6040518663ffffffff1660e01b8152600401612e91959493929190613e23565b600060405180830381600087803b158015612eab57600080fd5b505af1925050508015612ebc575060015b612f5c57612ec8613c43565b806308c379a003612f175750612edc613c9a565b80612ee75750612f19565b600080516020613e8f83398151915281604051612f049190613916565b60405180910390a1506000949350505050565b505b600080516020613e8f833981519152604051612f4a906020808252600190820152604560f81b604082015260600190565b60405180910390a15060009392505050565b600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd19190613b0f565b60408051878152602081018390529192507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1949350505050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261304b929116908690600401613b8a565b6020604051808303816000875af115801561306a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308e9190613b68565b50604080516002808252606082018352600092602083019080368337505060095482519293506001600160a01b0316918391506000906130d0576130d0613e0d565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190613db5565b8160018151811061316057613160613e0d565b6001600160a01b0392831660209182029290920101526007541663791ac947846000843061319042610258613bb9565b6040518663ffffffff1660e01b81526004016131b0959493929190613e23565b600060405180830381600087803b1580156131ca57600080fd5b505af19250505080156131db575060015b61328d576131e7613c43565b806308c379a00361323157506131fb613c9a565b806132065750613233565b600080516020613e8f833981519152816040516132239190613916565b60405180910390a150505050565b505b600080516020613e8f8339815191526040516132809060208082526017908201527f5745544820746f204554482073776170206661696c6564000000000000000000604082015260600190565b60405180910390a1505050565b478015610dd457610dd4818461376b565b600d548015806132ac575081155b156132b5575050565b60006132c18284613d4e565b9050806000036132d057505050565b60005b828110156133ca576000600d82815481106132f0576132f0613e0d565b6000918252602090912001546001600160a01b03169050801580159061331f57506001600160a01b0381163014155b80156133395750600a546001600160a01b03828116911614155b156133b75760095460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906133719085908890600401613b8a565b6020604051808303816000875af1158015613390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b49190613b68565b50505b50806133c281613e5f565b9150506132d3565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101613280565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061347357506001600160a01b03821615155b6134a45760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610795565b6001600160a01b038316600090815260208190526040902054818110156134f25760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd4565b600a546001600160a01b0383811691161480159061357f57506001600160a01b0382163014155b15613767578080156135aa57506001600160a01b0382166000908152600c602052604090205460ff16155b1561361657506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b8015801561363c57506001600160a01b0382166000908152600c602052604090205460ff165b15613767576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dd657826001600160a01b0316600d828154811061368957613689613e0d565b6000918252602090912001546001600160a01b03160361375557600d80546136b390600190613d24565b815481106136c3576136c3613e0d565b600091825260209091200154600d80546001600160a01b0390921691839081106136ef576136ef613e0d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061372e5761372e613e78565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061375f81613e5f565b915050613662565b5050565b6000606461377a603282613d24565b6137849084613d37565b61378e9190613d4e565b90506000606461379f603282613d24565b6137a99086613d37565b6137b39190613d4e565b6007549091506001600160a01b031663f305d7198530868686836137d942610258613bb9565b6040518863ffffffff1660e01b81526004016137fa96959493929190613dd2565b60606040518083038185885af193505050508015613835575060408051601f3d908101601f1916820190925261383291810190613c15565b60015b6138ef57613841613c43565b806308c379a00361389d5750613855613c9a565b80613860575061389f565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161388f9190613916565b60405180910390a150610dd4565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516138e2906020808252600190820152604560f81b604082015260600190565b60405180910390a1610dd4565b50506040805185815260208101879052600080516020613eaf833981519152925001613223565b600060208083528351808285015260005b8181101561394357858101830151858201604001528201613927565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a9d57600080fd5b6000806040838503121561398c57600080fd5b823561399781613964565b946020939093013593505050565b6000602082840312156139b757600080fd5b5035919050565b6000806000606084860312156139d357600080fd5b83356139de81613964565b925060208401356139ee81613964565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015613a385781516001600160a01b031687529582019590820190600101613a13565b509495945050505050565b602081526000613a5660208301846139ff565b9392505050565b600060208284031215613a6f57600080fd5b8135613a5681613964565b60008060408385031215613a8d57600080fd5b50508035926020909101359150565b60008060408385031215613aaf57600080fd5b8235613aba81613964565b91506020830135613aca81613964565b809150509250929050565b600181811c90821680613ae957607f821691505b602082108103613b0957634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613b2157600080fd5b5051919050565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613b7a57600080fd5b81518015158114613a5657600080fd5b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613ba3565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b600080600060608486031215613c2a57600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613c5c5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715613c9357634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015613ca85790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613cd857505050505090565b8285019150815181811115613cf05750505050505090565b843d8701016020828501011115613d0a5750505050505090565b613d1960208286010187613c5f565b509095945050505050565b8181038181111561070357610703613ba3565b808202811582820484141761070357610703613ba3565b600082613d6b57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4e6f20574554482072656365697665642066726f6d2074726561737572792077604082015264185b1b195d60da1b606082015260800190565b600060208284031215613dc757600080fd5b8151613a5681613964565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613e4260a08301866139ff565b6001600160a01b0394909416606083015250608001529392505050565b600060018201613e7157613e71613ba3565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba264697066735822122033fc93180de82e8c6454bb2bf37219eeb2c35de89b7feb94232440e26303e9c464736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102085760003560e01c80637ac84fc111610118578063ac3508e8116100a0578063dd62ed3e1161006f578063dd62ed3e146105ba578063e3a8fa5514610600578063ed9cacfe14610608578063f2fde38b1461061d578063fd7c9fab1461063d57600080fd5b8063ac3508e814610542578063c0d7865514610555578063c5eaf1e914610575578063d4d7b19a1461058a57600080fd5b80638da5cb5b116100e75780638da5cb5b146104af57806395d89b41146104cd578063975b87e8146104e2578063a8602fea14610502578063a9059cbb1461052257600080fd5b80637ac84fc1146104505780637ff793d314610465578063808a54571461047a5780638129fc1c1461049a57600080fd5b8063397883d21161019b5780635d76b04c1161016a5780635d76b04c146103ae5780635fe8e7cc146103c357806362b6327a146103e557806370a08231146104055780637136982b1461043b57600080fd5b8063397883d214610339578063461a3a951461034e5780634626402b1461036e578063573761981461038e57600080fd5b80631fed05c3116101d75780631fed05c3146102a357806323b872dd146102c55780632a11ced0146102e5578063313ce5671461031d57600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022961065d565b6040516102369190613916565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e610279366004613979565b6106ef565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b506102c36102be3660046139a5565b610709565b005b3480156102d157600080fd5b5061027e6102e03660046139be565b610ddb565b3480156102f157600080fd5b506103056103003660046139a5565b610dff565b6040516001600160a01b039091168152602001610236565b34801561032957600080fd5b5060405160128152602001610236565b34801561034557600080fd5b506102c3610e29565b34801561035a57600080fd5b50600954610305906001600160a01b031681565b34801561037a57600080fd5b50600b54610305906001600160a01b031681565b34801561039a57600080fd5b506102c36103a9366004613979565b610f42565b3480156103ba57600080fd5b50600f54610250565b3480156103cf57600080fd5b506103d8611009565b6040516102369190613a43565b3480156103f157600080fd5b50600754610305906001600160a01b031681565b34801561041157600080fd5b50610250610420366004613a5d565b6001600160a01b031660009081526020819052604090205490565b34801561044757600080fd5b50600d54610250565b34801561045c57600080fd5b506102c361106a565b34801561047157600080fd5b506102c3611643565b34801561048657600080fd5b50600a54610305906001600160a01b031681565b3480156104a657600080fd5b506102c361172a565b3480156104bb57600080fd5b506006546001600160a01b0316610305565b3480156104d957600080fd5b50610229611aa0565b3480156104ee57600080fd5b506102c36104fd366004613a7a565b611aaf565b34801561050e57600080fd5b506102c361051d366004613a5d565b611fe4565b34801561052e57600080fd5b5061027e61053d366004613979565b612088565b6102c36105503660046139a5565b612096565b34801561056157600080fd5b506102c3610570366004613a5d565b612302565b34801561058157600080fd5b506102c3612367565b34801561059657600080fd5b5061027e6105a5366004613a5d565b600c6020526000908152604090205460ff1681565b3480156105c657600080fd5b506102506105d5366004613a9c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c3612652565b34801561061457600080fd5b506102c3612713565b34801561062957600080fd5b506102c3610638366004613a5d565b61298c565b34801561064957600080fd5b50600854610305906001600160a01b031681565b60606003805461066c90613ad5565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613ad5565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b6000336106fd8185856129d8565b60019150505b92915050565b610711612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190613b0f565b90506000811161079e5760405162461bcd60e51b815260040161079590613b28565b60405180910390fd5b600082116107d35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6009546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190613b0f565b10156108725760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906108a690339030908790600401613b44565b6020604051808303816000875af11580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e99190613b68565b61091a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b6007546109329030906001600160a01b0316836129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610968929116908690600401613b8a565b6020604051808303816000875af1158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190613b68565b506007546009546001600160a01b039182169163e8e33700913091168486600080336109d942610258613bb9565b6040518963ffffffff1660e01b81526004016109fc989796959493929190613bcc565b6060604051808303816000875af1925050508015610a37575060408051601f3d908101601f19168201909252610a3491810190613c15565b60015b610cbf57610a43613c43565b806308c379a003610b865750610a57613c9a565b80610a625750610b88565b600754610a7b9030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610ab292911690600090600401613b8a565b6020604051808303816000875af1158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908790600401613b8a565b6020604051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613b68565b508060405162461bcd60e51b81526004016107959190613916565b505b600754610ba19030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610bd892911690600090600401613b8a565b6020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908690600401613b8a565b6020604051808303816000875af1158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190613b68565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610795565b50506040805183815260208101859052600080516020613eaf8339815191529250015b60405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613b0f565b90508015610dd65760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d919033908590600401613b8a565b6020604051808303816000875af1158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613b68565b505b505050565b600033610de9858285612ad8565b610df4858585612b40565b506001949350505050565b600d8181548110610e0f57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e31612a8a565b6000600e541180610e4457506000600f54115b610e755760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610795565b600d54610ea95760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610795565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f40577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610f37929190918252602082015260400190565b60405180910390a15b565b610f4a612a8a565b306001600160a01b03831603610f875760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610795565b816001600160a01b031663a9059cbb610fa86006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610fc6929190613b8a565b6020604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd69190613b68565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611043575050505050905090565b6002600554036110a15760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610795565b6002600555601054610100900460ff16156110e35760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff001916610100179055600e54600f5481158015611104575080155b1561111b5750506010805461ff001916905561163c565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f556007546111789030906001600160a01b03166000196129d8565b60006111848284613bb9565b9050683635c9adc5dea0000081111561121257683635c9adc5dea0000060006111ad8284613d24565b9050826111ba8683613d37565b6111c49190613d4e565b600e55826111d28583613d37565b6111dc9190613d4e565b600f55826111ea8684613d37565b6111f49190613d4e565b9450826112018584613d37565b61120b9190613d4e565b9350909150505b600061121d82612dbd565b90508060000361123c5750506010805461ff00191690555061163c9050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a1600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190613b0f565b90508181106114f157600954600b54604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190613b0f565b1061146f57600954600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926113a8929091169030908890600401613b44565b6020604051808303816000875af11580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb9190613b68565b90508061146957600080516020613e8f83398151915260405161144a9060208082526022908201527f57455448207472616e736665722066726f6d207472656173757279206661696c604082015261195960f21b606082015260800190565b60405180910390a150506010805461ff00191690555061163c92505050565b50611550565b600080516020613e8f8339815191526040516114d3906020808252602e908201527f54726561737572792077616c6c657420686173206e6f7420617070726f76656460408201526d102ba2aa24103a3930b739b332b960911b606082015260800190565b60405180910390a150506010805461ff00191690555061163c915050565b600080516020613e8f8339815191526040516114d39060208082526029908201527f54726561737572792077616c6c657420646f6573206e6f74206861766520656e6040820152680deeaced040ae8aa8960bb1b606082015260800190565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190613b0f565b9050806000036115e257600080516020613e8f83398151915260405161144a90613d70565b6000846115ef8884613d37565b6115f99190613d4e565b905060006116078284613d24565b90508115611619576116198289613015565b8015611628576116288161329e565b50506010805461ff00191690555050505050505b6001600555565b600b546001600160a01b031633146116825760405162461bcd60e51b815260206004820152600260248201526113d560f21b6044820152606401610795565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906116b690309060001990600401613b8a565b6020604051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f99190613b68565b610f405760405162461bcd60e51b815260206004820152600260248201526120a360f11b6044820152606401610795565b611732612a8a565b60105460ff161561176a5760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610795565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed9190613db5565b600a80546001600160a01b0319166001600160a01b039290921691821790556118a9576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190613db5565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166118e65760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610795565b6007546119009030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119389291169060001990600401613b8a565b6020604051808303816000875af1158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197b9190613b68565b6119ac5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610795565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119e49291169060001990600401613b8a565b6020604051808303816000875af1158015611a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a279190613b68565b50600a5460405163095ea7b360e01b8152309163095ea7b391611a5a916001600160a01b03169060001990600401613b8a565b6020604051808303816000875af1158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613b68565b50565b60606004805461066c90613ad5565b611ab7612a8a565b60008211611ad75760405162461bcd60e51b815260040161079590613b28565b60008111611b0c5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d9190613b0f565b1015611ba05760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190613b0f565b1015611c3f5760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611c7390339030908690600401613b44565b6020604051808303816000875af1158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190613b68565b611ce75760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b600754611cff9030906001600160a01b0316846129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d35929116908590600401613b8a565b6020604051808303816000875af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190613b68565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611da642610258613bb9565b6040518963ffffffff1660e01b8152600401611dc9989796959493929190613bcc565b6060604051808303816000875af1925050508015611e04575060408051601f3d908101601f19168201909252611e0191810190613c15565b60015b611fbd57611e10613c43565b806308c379a003611ef55750611e24613c9a565b80611e2f5750611ef7565b600754611e489030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611e7f92911690600090600401613b8a565b6020604051808303816000875af1158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908690600401613b8a565b505b600754611f109030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611f4792911690600090600401613b8a565b6020604051808303816000875af1158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a9190613b68565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908590600401613b8a565b50506040805184815260208101849052600080516020613eaf833981519152925001610ce2565b611fec612a8a565b6001600160a01b0381166120275760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610795565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336106fd818585612b40565b61209e612a8a565b600081116120be5760405162461bcd60e51b815260040161079590613b28565b600034116120f35760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190613b0f565b10156121875760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b60075461219f9030906001600160a01b0316836129d8565b6007546001600160a01b031663f305d719343084600080336121c342610258613bb9565b6040518863ffffffff1660e01b81526004016121e496959493929190613dd2565b60606040518083038185885af19350505050801561221f575060408051601f3d908101601f1916820190925261221c91810190613c15565b60015b6122d65761222b613c43565b806308c379a00361228f575061223f613c9a565b8061224a5750612291565b6007546122639030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610b6b573d6000803e3d6000fd5b505b6007546122aa9030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610c91573d6000803e3d6000fd5b505060408051838152346020820152600080516020613eaf83398151915292500160405180910390a150565b61230a612a8a565b6001600160a01b0381166123455760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610795565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61236f612a8a565b601054610100900460ff16156123ac5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff0019166101001790556040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156123f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241d9190613b0f565b9050600081116124545760405162461bcd60e51b8152602060048201526002602482015261272160f11b6044820152606401610795565b6000612461601980613bb9565b61246c601984613d37565b6124769190613d4e565b905060006124848284613d24565b60408051848152602081018390529192507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16007546124da9030906001600160a01b03166000196129d8565b60006124e68284613bb9565b905060006124f382612dbd565b9050806000036125135750506010805461ff001916905550610f40915050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b39190613b0f565b9050806000036125f757600080516020613e8f8339815191526040516125d890613d70565b60405180910390a150506010805461ff001916905550610f4092505050565b6000836126048784613d37565b61260e9190613d4e565b9050600061261c8284613d24565b9050811561262e5761262e8288613015565b801561263d5761263d8161329e565b50506010805461ff0019169055505050505050565b61265a612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc9190613b0f565b9050600081116126de5760405162461bcd60e51b815260040161079590613b28565b600034116121875760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b61271b612a8a565b6007546127359030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261276d9291169060001990600401613b8a565b6020604051808303816000875af19250505080156127a8575060408051601f3d908101601f191682019092526127a591810190613b68565b60015b156127fe57506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926127f5926001600160a01b039182169291169060001990613b44565b60405180910390a15b600a546001600160a01b031615610f4057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926128479291169060001990600401613b8a565b6020604051808303816000875af1925050508015612882575060408051601f3d908101601f1916820190925261287f91810190613b68565b60015b156128d85750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926128cf926001600160a01b039182169291169060001990613b44565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b39161290a916001600160a01b03169060001990600401613b8a565b6020604051808303816000875af1925050508015612945575060408051601f3d908101601f1916820190925261294291810190613b68565b60015b15610f405750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91610f379130916001600160a01b03169060001990613b44565b612994612a8a565b6001600160a01b0381166129cf5760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610795565b611a9d81613401565b6001600160a01b038316158015906129f857506001600160a01b03821615155b612a295760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b33612a9d6006546001600160a01b031690565b6001600160a01b031614610f405760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610795565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612b335760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610795565b610dd484848484036129d8565b601054610100900460ff16158015612b6657506006546001600160a01b03848116911614155b8015612b8057506006546001600160a01b03838116911614155b8015612b9557506001600160a01b0383163014155b8015612bae5750600a546001600160a01b038381169116145b15612d5a5760006064612bc2600584613d37565b612bcc9190613d4e565b90508015612d585760006064612be3601984613d37565b612bed9190613d4e565b905060006064612bfe601985613d37565b612c089190613d4e565b90506000612c168486613d24565b9050612c23873086613453565b612c2e878783613453565b82600e6000828254612c409190613bb9565b9250508190555081600f6000828254612c599190613bb9565b9091555050600f54600e5468056bc75e2d6310000091612c7891613bb9565b10158015612c9d5750683635c9adc5dea00000600f54600e54612c9b9190613bb9565b105b15612cf057306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cdd57600080fd5b505af1925050508015612cee575060015b505b612d2387678ac7230489e80000612d1c8a6001600160a01b031660009081526020819052604090205490565b1015613558565b612d4f86678ac7230489e80000612d1c896001600160a01b031660009081526020819052604090205490565b50505050505050565b505b612d65838383613453565b612d9183678ac7230489e80000612d1c866001600160a01b031660009081526020819052604090205490565b610dd682678ac7230489e80000612d1c856001600160a01b031660009081526020819052604090205490565b600081600003612dcf57506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e0457612e04613e0d565b6001600160a01b039283166020918202929092010152600954825191169082906001908110612e3557612e35613e0d565b6001600160a01b039283166020918202929092010152600754600b5460009291821691635c11d7959187918591879116612e7142610258613bb9565b6040518663ffffffff1660e01b8152600401612e91959493929190613e23565b600060405180830381600087803b158015612eab57600080fd5b505af1925050508015612ebc575060015b612f5c57612ec8613c43565b806308c379a003612f175750612edc613c9a565b80612ee75750612f19565b600080516020613e8f83398151915281604051612f049190613916565b60405180910390a1506000949350505050565b505b600080516020613e8f833981519152604051612f4a906020808252600190820152604560f81b604082015260600190565b60405180910390a15060009392505050565b600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd19190613b0f565b60408051878152602081018390529192507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1949350505050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261304b929116908690600401613b8a565b6020604051808303816000875af115801561306a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308e9190613b68565b50604080516002808252606082018352600092602083019080368337505060095482519293506001600160a01b0316918391506000906130d0576130d0613e0d565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190613db5565b8160018151811061316057613160613e0d565b6001600160a01b0392831660209182029290920101526007541663791ac947846000843061319042610258613bb9565b6040518663ffffffff1660e01b81526004016131b0959493929190613e23565b600060405180830381600087803b1580156131ca57600080fd5b505af19250505080156131db575060015b61328d576131e7613c43565b806308c379a00361323157506131fb613c9a565b806132065750613233565b600080516020613e8f833981519152816040516132239190613916565b60405180910390a150505050565b505b600080516020613e8f8339815191526040516132809060208082526017908201527f5745544820746f204554482073776170206661696c6564000000000000000000604082015260600190565b60405180910390a1505050565b478015610dd457610dd4818461376b565b600d548015806132ac575081155b156132b5575050565b60006132c18284613d4e565b9050806000036132d057505050565b60005b828110156133ca576000600d82815481106132f0576132f0613e0d565b6000918252602090912001546001600160a01b03169050801580159061331f57506001600160a01b0381163014155b80156133395750600a546001600160a01b03828116911614155b156133b75760095460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906133719085908890600401613b8a565b6020604051808303816000875af1158015613390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b49190613b68565b50505b50806133c281613e5f565b9150506132d3565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101613280565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061347357506001600160a01b03821615155b6134a45760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610795565b6001600160a01b038316600090815260208190526040902054818110156134f25760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd4565b600a546001600160a01b0383811691161480159061357f57506001600160a01b0382163014155b15613767578080156135aa57506001600160a01b0382166000908152600c602052604090205460ff16155b1561361657506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b8015801561363c57506001600160a01b0382166000908152600c602052604090205460ff165b15613767576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dd657826001600160a01b0316600d828154811061368957613689613e0d565b6000918252602090912001546001600160a01b03160361375557600d80546136b390600190613d24565b815481106136c3576136c3613e0d565b600091825260209091200154600d80546001600160a01b0390921691839081106136ef576136ef613e0d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061372e5761372e613e78565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061375f81613e5f565b915050613662565b5050565b6000606461377a603282613d24565b6137849084613d37565b61378e9190613d4e565b90506000606461379f603282613d24565b6137a99086613d37565b6137b39190613d4e565b6007549091506001600160a01b031663f305d7198530868686836137d942610258613bb9565b6040518863ffffffff1660e01b81526004016137fa96959493929190613dd2565b60606040518083038185885af193505050508015613835575060408051601f3d908101601f1916820190925261383291810190613c15565b60015b6138ef57613841613c43565b806308c379a00361389d5750613855613c9a565b80613860575061389f565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161388f9190613916565b60405180910390a150610dd4565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516138e2906020808252600190820152604560f81b604082015260600190565b60405180910390a1610dd4565b50506040805185815260208101879052600080516020613eaf833981519152925001613223565b600060208083528351808285015260005b8181101561394357858101830151858201604001528201613927565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a9d57600080fd5b6000806040838503121561398c57600080fd5b823561399781613964565b946020939093013593505050565b6000602082840312156139b757600080fd5b5035919050565b6000806000606084860312156139d357600080fd5b83356139de81613964565b925060208401356139ee81613964565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015613a385781516001600160a01b031687529582019590820190600101613a13565b509495945050505050565b602081526000613a5660208301846139ff565b9392505050565b600060208284031215613a6f57600080fd5b8135613a5681613964565b60008060408385031215613a8d57600080fd5b50508035926020909101359150565b60008060408385031215613aaf57600080fd5b8235613aba81613964565b91506020830135613aca81613964565b809150509250929050565b600181811c90821680613ae957607f821691505b602082108103613b0957634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613b2157600080fd5b5051919050565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613b7a57600080fd5b81518015158114613a5657600080fd5b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613ba3565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b600080600060608486031215613c2a57600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613c5c5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715613c9357634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015613ca85790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613cd857505050505090565b8285019150815181811115613cf05750505050505090565b843d8701016020828501011115613d0a5750505050505090565b613d1960208286010187613c5f565b509095945050505050565b8181038181111561070357610703613ba3565b808202811582820484141761070357610703613ba3565b600082613d6b57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4e6f20574554482072656365697665642066726f6d2074726561737572792077604082015264185b1b195d60da1b606082015260800190565b600060208284031215613dc757600080fd5b8151613a5681613964565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613e4260a08301866139ff565b6001600160a01b0394909416606083015250608001529392505050565b600060018201613e7157613e71613ba3565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba264697066735822122033fc93180de82e8c6454bb2bf37219eeb2c35de89b7feb94232440e26303e9c464736f6c63430008110033
Deployed Bytecode Sourcemap
9147:28401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32371:118;;;;;;;;;;-1:-1:-1;32458:23:0;;32371:118;;;713:25:1;;;701:2;686:18;32371:118:0;567:177:1;3740:190:0;;;;;;;;;;-1:-1:-1;3740:190:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;3740:190:0;1205:187:1;3167:99:0;;;;;;;;;;-1:-1:-1;3246:12:0;;3167:99;;26919:2187;;;;;;;;;;-1:-1:-1;26919:2187:0;;;;;:::i;:::-;;:::i;:::-;;3938:250;;;;;;;;;;-1:-1:-1;3938:250:0;;;;;:::i;:::-;;:::i;10225:24::-;;;;;;;;;;-1:-1:-1;10225:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2207:32:1;;;2189:51;;2177:2;2162:18;10225:24:0;2043:203:1;3075:84:0;;;;;;;;;;-1:-1:-1;3075:84:0;;3149:2;2393:36:1;;2381:2;2366:18;3075:84:0;2251:184:1;32670:378:0;;;;;;;;;;;;;:::i;10049:25::-;;;;;;;;;;-1:-1:-1;10049:25:0;;;;-1:-1:-1;;;;;10049:25:0;;;10116:29;;;;;;;;;;-1:-1:-1;10116:29:0;;;;-1:-1:-1;;;;;10116:29:0;;;32137:183;;;;;;;;;;-1:-1:-1;32137:183:0;;;;;:::i;:::-;;:::i;32497:114::-;;;;;;;;;;-1:-1:-1;32582:21:0;;32497:114;;24431:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9951:41::-;;;;;;;;;;-1:-1:-1;9951:41:0;;;;-1:-1:-1;;;;;9951:41:0;;;3274:118;;;;;;;;;;-1:-1:-1;3274:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;24321:98;;;;;;;;;;-1:-1:-1;24397:7:0;:14;24321:98;;15930:4123;;;;;;;;;;;;;:::i;34488:194::-;;;;;;;;;;;;;:::i;10081:28::-;;;;;;;;;;-1:-1:-1;10081:28:0;;;;-1:-1:-1;;;;;10081:28:0;;;11861:836;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;1934:6:0;1861:87;;2972:95;;;;;;;;;;;;;:::i;24582:2260::-;;;;;;;;;;-1:-1:-1;24582:2260:0;;;;;:::i;:::-;;:::i;34101:291::-;;;;;;;;;;-1:-1:-1;34101:291:0;;;;;:::i;:::-;;:::i;3400:182::-;;;;;;;;;;-1:-1:-1;3400:182:0;;;;;:::i;:::-;;:::i;29170:1381::-;;;;;;:::i;:::-;;:::i;31963:166::-;;;;;;;;;;-1:-1:-1;31963:166:0;;;;;:::i;:::-;;:::i;34690:2007::-;;;;;;;;;;;;;:::i;10178:40::-;;;;;;;;;;-1:-1:-1;10178:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3590:142;;;;;;;;;;-1:-1:-1;3590:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3697:18:0;;;3670:7;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3590:142;30636:1319;;;:::i;33094:958::-;;;;;;;;;;;;;:::i;2064:165::-;;;;;;;;;;-1:-1:-1;2064:165:0;;;;;:::i;:::-;;:::i;9999:43::-;;;;;;;;;;-1:-1:-1;9999:43:0;;;;-1:-1:-1;;;;;9999:43:0;;;2873:91;2918:13;2951:5;2944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;:::o;3740:190::-;3814:4;3847:10;3868:32;3847:10;3884:7;3893:6;3868:8;:32::i;:::-;3918:4;3911:11;;;3740:190;;;;;:::o;26919:2187::-;1820:13;:11;:13::i;:::-;27034:46:::1;::::0;-1:-1:-1;;;27034:46:0;;27049:4:::1;27034:46;::::0;::::1;2189:51:1::0;;;27012:19:0::1;::::0;27034:31:::1;::::0;2162:18:1;;27034:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27012:68;;27113:1;27099:11;:15;27091:30;;;;-1:-1:-1::0;;;27091:30:0::1;;;;;;;:::i;:::-;;;;;;;;;27154:1;27140:11;:15;27132:30;;;::::0;-1:-1:-1;;;27132:30:0;;5643:2:1;27132:30:0::1;::::0;::::1;5625:21:1::0;5682:1;5662:18;;;5655:29;-1:-1:-1;;;5700:18:1;;;5693:32;5742:18;;27132:30:0::1;5441:325:1::0;27132:30:0::1;27212:10;::::0;27205:40:::1;::::0;-1:-1:-1;;;27205:40:0;;27234:10:::1;27205:40;::::0;::::1;2189:51:1::0;27249:11:0;;-1:-1:-1;;;;;27212:10:0::1;::::0;27205:28:::1;::::0;2162:18:1;;27205:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;27183:107;;;::::0;-1:-1:-1;;;27183:107:0;;5973:2:1;27183:107:0::1;::::0;::::1;5955:21:1::0;6012:1;5992:18;;;5985:29;-1:-1:-1;;;6030:18:1;;;6023:32;6072:18;;27183:107:0::1;5771:325:1::0;27183:107:0::1;27392:10;::::0;27385:71:::1;::::0;-1:-1:-1;;;27385:71:0;;-1:-1:-1;;;;;27392:10:0;;::::1;::::0;27385:31:::1;::::0;:71:::1;::::0;27417:10:::1;::::0;27437:4:::1;::::0;27444:11;;27385:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27363:123;;;::::0;-1:-1:-1;;;27363:123:0;;6965:2:1;27363:123:0::1;::::0;::::1;6947:21:1::0;7004:1;6984:18;;;6977:29;-1:-1:-1;;;7022:18:1;;;7015:32;7064:18;;27363:123:0::1;6763:325:1::0;27363:123:0::1;27565:16;::::0;27533:63:::1;::::0;27550:4:::1;::::0;-1:-1:-1;;;;;27565:16:0::1;27584:11:::0;27533:8:::1;:63::i;:::-;27614:10;::::0;27642:16:::1;::::0;27607:66:::1;::::0;-1:-1:-1;;;27607:66:0;;-1:-1:-1;;;;;27614:10:0;;::::1;::::0;27607:26:::1;::::0;:66:::1;::::0;27642:16;::::1;::::0;27661:11;;27607:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27698:16:0::1;::::0;27770:10:::1;::::0;-1:-1:-1;;;;;27698:16:0;;::::1;::::0;:29:::1;::::0;27750:4:::1;::::0;27770:10:::1;27795:11:::0;27821;27698:16:::1;::::0;27971:10:::1;27996:21;:15;28014:3;27996:21;:::i;:::-;27698:356;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27698:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27698:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27694:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;28209:16;::::0;28177:53:::1;::::0;28194:4:::1;::::0;-1:-1:-1;;;;;28209:16:0::1;;28177:8;:53::i;:::-;28252:10;::::0;28280:16:::1;::::0;28245:56:::1;::::0;-1:-1:-1;;;28245:56:0;;-1:-1:-1;;;;;28252:10:0;;::::1;::::0;28245:26:::1;::::0;:56:::1;::::0;28280:16;::::1;::::0;28252:10:::1;::::0;28245:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28385:10:0::1;::::0;28378:52:::1;::::0;-1:-1:-1;;;28378:52:0;;-1:-1:-1;;;;;28385:10:0;;::::1;::::0;28378:27:::1;::::0;:52:::1;::::0;28406:10:::1;::::0;28418:11;;28378:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28466:6;28459:14;;-1:-1:-1::0;;;28459:14:0::1;;;;;;;;:::i;27694:1147::-;;;28567:16;::::0;28535:53:::1;::::0;28552:4:::1;::::0;-1:-1:-1;;;;;28567:16:0::1;;28535:8;:53::i;:::-;28610:10;::::0;28638:16:::1;::::0;28603:56:::1;::::0;-1:-1:-1;;;28603:56:0;;-1:-1:-1;;;;;28610:10:0;;::::1;::::0;28603:26:::1;::::0;:56:::1;::::0;28638:16;::::1;::::0;28610:10:::1;::::0;28603:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28743:10:0::1;::::0;28736:52:::1;::::0;-1:-1:-1;;;28736:52:0;;-1:-1:-1;;;;;28743:10:0;;::::1;::::0;28736:27:::1;::::0;:52:::1;::::0;28764:10:::1;::::0;28776:11;;28736:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28817:12:0::1;::::0;-1:-1:-1;;;28817:12:0;;10542:2:1;28817:12:0::1;::::0;::::1;10524:21:1::0;10581:1;10561:18;;;10554:29;-1:-1:-1;;;10599:18:1;;;10592:32;10641:18;;28817:12:0::1;10340:325:1::0;27694:1147:0::1;-1:-1:-1::0;;28075:40:0::1;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;-1:-1:-1;;;;;;;;;;;28075:40:0;-1:-1:-1;10817:18:1;28075:40:0::1;;;;;;;;28944:10;::::0;28937:43:::1;::::0;-1:-1:-1;;;28937:43:0;;28974:4:::1;28937:43;::::0;::::1;2189:51:1::0;28911:23:0::1;::::0;-1:-1:-1;;;;;28944:10:0::1;::::0;28937:28:::1;::::0;2162:18:1;;28937:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28911:69:::0;-1:-1:-1;28995:19:0;;28991:108:::1;;29038:10;::::0;29031:56:::1;::::0;-1:-1:-1;;;29031:56:0;;-1:-1:-1;;;;;29038:10:0;;::::1;::::0;29031:27:::1;::::0;:56:::1;::::0;29059:10:::1;::::0;29071:15;;29031:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28991:108;27001:2105;;26919:2187:::0;:::o;3938:250::-;4026:4;4061:10;4082:38;4098:4;4061:10;4113:6;4082:15;:38::i;:::-;4131:27;4141:4;4147:2;4151:6;4131:9;:27::i;:::-;-1:-1:-1;4176:4:0;;3938:250;-1:-1:-1;;;;3938:250:0:o;10225:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10225:24:0;;-1:-1:-1;10225:24:0;:::o;32670:378::-;1820:13;:11;:13::i;:::-;32763:1:::1;32737:23;;:27;:56;;;;32792:1;32768:21;;:25;32737:56;32729:71;;;::::0;-1:-1:-1;;;32729:71:0;;11125:2:1;32729:71:0::1;::::0;::::1;11107:21:1::0;11164:1;11144:18;;;11137:29;-1:-1:-1;;;11182:18:1;;;11175:32;11224:18;;32729:71:0::1;10923:325:1::0;32729:71:0::1;32819:7;:14:::0;32811:33:::1;;;::::0;-1:-1:-1;;;32811:33:0;;11455:2:1;32811:33:0::1;::::0;::::1;11437:21:1::0;11494:1;11474:18;;;11467:29;-1:-1:-1;;;11512:18:1;;;11505:32;11554:18;;32811:33:0::1;11253:325:1::0;32811:33:0::1;32859:4;-1:-1:-1::0;;;;;32859:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;32855:186;;32967:62;32982:23;;33007:21;;32967:62;;;;;;10844:25:1::0;;;10900:2;10885:18;;10878:34;10832:2;10817:18;;10670:248;32967:62:0::1;;;;;;;;32855:186;32670:378::o:0;32137:183::-;1820:13;:11;:13::i;:::-;32248:4:::1;-1:-1:-1::0;;;;;32230:23:0;::::1;::::0;32222:38:::1;;;::::0;-1:-1:-1;;;32222:38:0;;11785:2:1;32222:38:0::1;::::0;::::1;11767:21:1::0;11824:1;11804:18;;;11797:29;-1:-1:-1;;;11842:18:1;;;11835:32;11884:18;;32222:38:0::1;11583:325:1::0;32222:38:0::1;32278:6;-1:-1:-1::0;;;;;32271:23:0::1;;32295:7;1934:6:::0;;-1:-1:-1;;;;;1934:6:0;;1861:87;32295:7:::1;32304;32271:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24431:96::-:0;24476:16;24512:7;24505:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24505:14:0;;;;;;;;;;;;;;;;;;;;;;24431:96;:::o;15930:4123::-;1114:1;1260:7;;:19;1252:34;;;;-1:-1:-1;;;1252:34:0;;12115:2:1;1252:34:0;;;12097:21:1;12154:1;12134:18;;;12127:29;-1:-1:-1;;;12172:18:1;;;12165:32;12214:18;;1252:34:0;11913:325:1;1252:34:0;1114:1;1297:7;:18;16010:7:::1;::::0;::::1;::::0;::::1;;;16009:8;16001:23;;;::::0;-1:-1:-1;;;16001:23:0;;12445:2:1;16001:23:0::1;::::0;::::1;12427:21:1::0;12484:1;12464:18;;;12457:29;-1:-1:-1;;;12502:18:1;;;12495:32;12544:18;;16001:23:0::1;12243:325:1::0;16001:23:0::1;16035:7;:14:::0;;-1:-1:-1;;16035:14:0::1;;;::::0;;16099:23:::1;::::0;16160:21:::1;::::0;16206:23;;:48;::::1;;;-1:-1:-1::0;16233:21:0;;16206:48:::1;16202:117;;;-1:-1:-1::0;;16271:7:0::1;:15:::0;;-1:-1:-1;;16271:15:0::1;::::0;;16301:7:::1;;16202:117;16344:52;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;16344:52:0::1;::::0;10817:18:1;16344:52:0::1;;;;;;;16477:1;16451:23;:27:::0;;;16489:21:::1;:25:::0;16597:16:::1;::::0;16565:69:::1;::::0;16582:4:::1;::::0;-1:-1:-1;;;;;16597:16:0::1;-1:-1:-1::0;;16565:8:0::1;:69::i;:::-;16708:25;16736:37;16757:16:::0;16736:18;:37:::1;:::i;:::-;16708:65;;16912:13;16892:17;:33;16888:789;;;16995:13;16971:21;17080:33;16995:13:::0;17080:17;:33:::1;:::i;:::-;17054:59:::0;-1:-1:-1;17267:17:0;17228:36:::1;17246:18:::0;17054:59;17228:36:::1;:::i;:::-;:56;;;;:::i;:::-;17202:23;:82:::0;17360:17;17323:34:::1;17341:16:::0;17323:15;:34:::1;:::i;:::-;:54;;;;:::i;:::-;17299:21;:78:::0;17514:17;17477:34:::1;17493:18:::0;17477:13;:34:::1;:::i;:::-;:54;;;;:::i;:::-;17456:75:::0;-1:-1:-1;17600:17:0;17565:32:::1;17581:16:::0;17565:13;:32:::1;:::i;:::-;:52;;;;:::i;:::-;17546:71:::0;-1:-1:-1;17652:13:0;;-1:-1:-1;;16888:789:0::1;17722:20;17745:31;17758:17;17745:12;:31::i;:::-;17722:54;;17801:12;17817:1;17801:17:::0;17797:86:::1;;-1:-1:-1::0;;17835:7:0::1;:15:::0;;-1:-1:-1;;17835:15:0::1;::::0;;-1:-1:-1;17865:7:0::1;::::0;-1:-1:-1;17865:7:0::1;17797:86;17963:40;::::0;713:25:1;;;17963:40:0::1;::::0;701:2:1;686:18;17963:40:0::1;;;;;;;18131:10;::::0;18153:14:::1;::::0;18124:44:::1;::::0;-1:-1:-1;;;18124:44:0;;-1:-1:-1;;;;;18153:14:0;;::::1;18124:44;::::0;::::1;2189:51:1::0;18094:27:0::1;::::0;18131:10;;;::::1;::::0;18124:28:::1;::::0;2162:18:1;;18124:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18094:74;;18206:12;18183:19;:35;18179:958;;18339:10;::::0;18361:14:::1;::::0;18332:59:::1;::::0;-1:-1:-1;;;18332:59:0;;-1:-1:-1;;;;;18361:14:0;;::::1;18332:59;::::0;::::1;13313:34:1::0;18385:4:0::1;13363:18:1::0;;;13356:43;18395:12:0;;18339:10;;;::::1;::::0;18332:28:::1;::::0;13248:18:1;;18332:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;18328:654;;18519:10;::::0;18544:14:::1;::::0;18512:76:::1;::::0;-1:-1:-1;;;18512:76:0;;18497:12:::1;::::0;-1:-1:-1;;;;;18519:10:0;;::::1;::::0;18512:31:::1;::::0;:76:::1;::::0;18544:14;;::::1;::::0;18568:4:::1;::::0;18575:12;;18512:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18497:91;;18630:7;18625:177;;-1:-1:-1::0;;;;;;;;;;;18667:48:0::1;;;;13612:2:1::0;13594:21;;;13651:2;13631:18;;;13624:30;13690:34;13685:2;13670:18;;13663:62;-1:-1:-1;;;13756:2:1;13741:18;;13734:32;13798:3;13783:19;;13410:398;18667:48:0::1;;;;;;;;-1:-1:-1::0;;18738:7:0::1;:15:::0;;-1:-1:-1;;18738:15:0::1;::::0;;-1:-1:-1;18776:7:0::1;::::0;-1:-1:-1;;;18776:7:0::1;18625:177;18409:408;18179:958;;18328:654;-1:-1:-1::0;;;;;;;;;;;18847:60:0::1;;;;14015:2:1::0;13997:21;;;14054:2;14034:18;;;14027:30;14093:34;14088:2;14073:18;;14066:62;-1:-1:-1;;;14159:2:1;14144:18;;14137:44;14213:3;14198:19;;13813:410;18847:60:0::1;;;;;;;;-1:-1:-1::0;;18926:7:0::1;:15:::0;;-1:-1:-1;;18926:15:0::1;::::0;;-1:-1:-1;18960:7:0::1;::::0;-1:-1:-1;;18960:7:0::1;18179:958;-1:-1:-1::0;;;;;;;;;;;19019:55:0::1;;;;14430:2:1::0;14412:21;;;14469:2;14449:18;;;14442:30;14508:34;14503:2;14488:18;;14481:62;-1:-1:-1;;;14574:2:1;14559:18;;14552:39;14623:3;14608:19;;14228:405;18179:958:0::1;19244:10;::::0;19237:43:::1;::::0;-1:-1:-1;;;19237:43:0;;19274:4:::1;19237:43;::::0;::::1;2189:51:1::0;19207:27:0::1;::::0;-1:-1:-1;;;;;19244:10:0::1;::::0;19237:28:::1;::::0;2162:18:1;;19237:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19207:73;;19295:19;19318:1;19295:24:::0;19291:164:::1;;-1:-1:-1::0;;;;;;;;;;;19341:51:0::1;;;;;:::i;19291:164::-;19505:24;19575:17:::0;19532:40:::1;19554:18:::0;19532:19;:40:::1;:::i;:::-;:60;;;;:::i;:::-;19505:87:::0;-1:-1:-1;19603:22:0::1;19628:38;19505:87:::0;19628:19;:38:::1;:::i;:::-;19603:63:::0;-1:-1:-1;19758:20:0;;19754:108:::1;;19795:55;19813:16;19831:18;19795:17;:55::i;:::-;19924:18:::0;;19920:90:::1;;19959:39;19983:14;19959:23;:39::i;:::-;-1:-1:-1::0;;20030:7:0::1;:15:::0;;-1:-1:-1;;20030:15:0::1;::::0;;-1:-1:-1;;;;;;1326:1:0::1;1070::::0;1338:7;:22;15930:4123::o;34488:194::-;34567:14;;-1:-1:-1;;;;;34567:14:0;34553:10;:28;34545:43;;;;-1:-1:-1;;;34545:43:0;;15246:2:1;34545:43:0;;;15228:21:1;15285:1;15265:18;;;15258:29;-1:-1:-1;;;15303:18:1;;;15296:32;15345:18;;34545:43:0;15044:325:1;34545:43:0;34614:10;;34607:60;;-1:-1:-1;;;34607:60:0;;-1:-1:-1;;;;;34614:10:0;;;;34607:26;;:60;;34642:4;;-1:-1:-1;;34649:17:0;34607:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34599:75;;;;-1:-1:-1;;;34599:75:0;;15576:2:1;34599:75:0;;;15558:21:1;15615:1;15595:18;;;15588:29;-1:-1:-1;;;15633:18:1;;;15626:32;15675:18;;34599:75:0;15374:325:1;11861:836:0;1820:13;:11;:13::i;:::-;11922:12:::1;::::0;::::1;;11921:13;11913:28;;;::::0;-1:-1:-1;;;11913:28:0;;15906:2:1;11913:28:0::1;::::0;::::1;15888:21:1::0;15945:1;15925:18;;;15918:29;-1:-1:-1;;;15963:18:1;;;15956:32;16005:18;;11913:28:0::1;15704:325:1::0;11913:28:0::1;11952:12;:19:::0;;-1:-1:-1;;11952:19:0::1;11967:4;11952:19;::::0;;12043:17:::1;::::0;12084:10:::1;::::0;12043:52:::1;::::0;-1:-1:-1;;;12043:52:0;;12077:4:::1;12043:52;::::0;::::1;13313:34:1::0;-1:-1:-1;;;;;12084:10:0;;::::1;13363:18:1::0;;;13356:43;12043:17:0;::::1;::::0;:25:::1;::::0;13248:18:1;;12043:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12027:13;:68:::0;;-1:-1:-1;;;;;;12027:68:0::1;-1:-1:-1::0;;;;;12027:68:0;;;::::1;::::0;;::::1;::::0;;12161:131:::1;;12225:17;::::0;12269:10:::1;::::0;12225:55:::1;::::0;-1:-1:-1;;;12225:55:0;;12262:4:::1;12225:55;::::0;::::1;13313:34:1::0;-1:-1:-1;;;;;12269:10:0;;::::1;13363:18:1::0;;;13356:43;12225:17:0;::::1;::::0;:28:::1;::::0;13248:18:1;;12225:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12209:13;:71:::0;;-1:-1:-1;;;;;;12209:71:0::1;-1:-1:-1::0;;;;;12209:71:0;;;::::1;::::0;;;::::1;::::0;;12161:131:::1;12320:13;::::0;-1:-1:-1;;;;;12320:13:0::1;12312:42;;;::::0;-1:-1:-1;;;12312:42:0;;16492:2:1;12312:42:0::1;::::0;::::1;16474:21:1::0;16531:1;16511:18;;;16504:29;-1:-1:-1;;;16549:18:1;;;16542:32;16591:18;;12312:42:0::1;16290:325:1::0;12312:42:0::1;12399:16;::::0;12367:69:::1;::::0;12384:4:::1;::::0;-1:-1:-1;;;;;12399:16:0::1;-1:-1:-1::0;;12367:8:0::1;:69::i;:::-;12472:10;::::0;12500:16:::1;::::0;12465:72:::1;::::0;-1:-1:-1;;;12465:72:0;;-1:-1:-1;;;;;12472:10:0;;::::1;::::0;12465:26:::1;::::0;:72:::1;::::0;12500:16;::::1;::::0;-1:-1:-1;;12519:17:0;12465:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12457:87;;;::::0;-1:-1:-1;;;12457:87:0;;16822:2:1;12457:87:0::1;::::0;::::1;16804:21:1::0;16861:1;16841:18;;;16834:29;-1:-1:-1;;;16879:18:1;;;16872:32;16921:18;;12457:87:0::1;16620:325:1::0;12457:87:0::1;12562:10;::::0;12582:13:::1;::::0;12555:60:::1;::::0;-1:-1:-1;;;12555:60:0;;-1:-1:-1;;;;;12562:10:0;;::::1;::::0;12555:26:::1;::::0;:60:::1;::::0;12582:13;::::1;::::0;-1:-1:-1;;12597:17:0;12555:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12656:13:0::1;::::0;12626:63:::1;::::0;-1:-1:-1;;;12626:63:0;;12641:4:::1;::::0;12626:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;12656:13:0::1;::::0;-1:-1:-1;;12671:17:0;12626:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11861:836::o:0;2972:95::-;3019:13;3052:7;3045:14;;;;;:::i;24582:2260::-;1820:13;:11;:13::i;:::-;24715:1:::1;24701:11;:15;24693:30;;;;-1:-1:-1::0;;;24693:30:0::1;;;;;;;:::i;:::-;24756:1;24742:11;:15;24734:30;;;::::0;-1:-1:-1;;;24734:30:0;;5643:2:1;24734:30:0::1;::::0;::::1;5625:21:1::0;5682:1;5662:18;;;5655:29;-1:-1:-1;;;5700:18:1;;;5693:32;5742:18;;24734:30:0::1;5441:325:1::0;24734:30:0::1;24807:46;::::0;-1:-1:-1;;;24807:46:0;;24822:4:::1;24807:46;::::0;::::1;2189:51:1::0;;;24857:11:0;;24807:31:::1;::::0;2162:18:1;;24807:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;24785:113;;;::::0;-1:-1:-1;;;24785:113:0;;17152:2:1;24785:113:0::1;::::0;::::1;17134:21:1::0;17191:1;17171:18;;;17164:29;-1:-1:-1;;;17209:18:1;;;17202:32;17251:18;;24785:113:0::1;16950:325:1::0;24785:113:0::1;24948:10;::::0;24941:40:::1;::::0;-1:-1:-1;;;24941:40:0;;24970:10:::1;24941:40;::::0;::::1;2189:51:1::0;24985:11:0;;-1:-1:-1;;;;;24948:10:0::1;::::0;24941:28:::1;::::0;2162:18:1;;24941:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;24919:107;;;::::0;-1:-1:-1;;;24919:107:0;;5973:2:1;24919:107:0::1;::::0;::::1;5955:21:1::0;6012:1;5992:18;;;5985:29;-1:-1:-1;;;6030:18:1;;;6023:32;6072:18;;24919:107:0::1;5771:325:1::0;24919:107:0::1;25128:10;::::0;25121:71:::1;::::0;-1:-1:-1;;;25121:71:0;;-1:-1:-1;;;;;25128:10:0;;::::1;::::0;25121:31:::1;::::0;:71:::1;::::0;25153:10:::1;::::0;25173:4:::1;::::0;25180:11;;25121:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25099:123;;;::::0;-1:-1:-1;;;25099:123:0;;6965:2:1;25099:123:0::1;::::0;::::1;6947:21:1::0;7004:1;6984:18;;;6977:29;-1:-1:-1;;;7022:18:1;;;7015:32;7064:18;;25099:123:0::1;6763:325:1::0;25099:123:0::1;25301:16;::::0;25269:63:::1;::::0;25286:4:::1;::::0;-1:-1:-1;;;;;25301:16:0::1;25320:11:::0;25269:8:::1;:63::i;:::-;25350:10;::::0;25378:16:::1;::::0;25343:66:::1;::::0;-1:-1:-1;;;25343:66:0;;-1:-1:-1;;;;;25350:10:0;;::::1;::::0;25343:26:::1;::::0;:66:::1;::::0;25378:16;::::1;::::0;25397:11;;25343:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25434:16:0::1;::::0;25506:10:::1;::::0;-1:-1:-1;;;;;25434:16:0;;::::1;::::0;:29:::1;::::0;25486:4:::1;::::0;25506:10:::1;25531:11:::0;25557;25434:16:::1;::::0;25707:10:::1;25732:21;:15;25750:3;25732:21;:::i;:::-;25434:356;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25434:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25434:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25430:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;25945:16;::::0;25913:53:::1;::::0;25930:4:::1;::::0;-1:-1:-1;;;;;25945:16:0::1;;25913:8;:53::i;:::-;25988:10;::::0;26016:16:::1;::::0;25981:56:::1;::::0;-1:-1:-1;;;25981:56:0;;-1:-1:-1;;;;;25988:10:0;;::::1;::::0;25981:26:::1;::::0;:56:::1;::::0;26016:16;::::1;::::0;25988:10:::1;::::0;25981:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26121:10:0::1;::::0;26114:52:::1;::::0;-1:-1:-1;;;26114:52:0;;-1:-1:-1;;;;;26121:10:0;;::::1;::::0;26114:27:::1;::::0;:52:::1;::::0;26142:10:::1;::::0;26154:11;;26114:52:::1;;;:::i;25430:1147::-;;;26303:16;::::0;26271:53:::1;::::0;26288:4:::1;::::0;-1:-1:-1;;;;;26303:16:0::1;;26271:8;:53::i;:::-;26346:10;::::0;26374:16:::1;::::0;26339:56:::1;::::0;-1:-1:-1;;;26339:56:0;;-1:-1:-1;;;;;26346:10:0;;::::1;::::0;26339:26:::1;::::0;:56:::1;::::0;26374:16;::::1;::::0;26346:10:::1;::::0;26339:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26479:10:0::1;::::0;26472:52:::1;::::0;-1:-1:-1;;;26472:52:0;;-1:-1:-1;;;;;26479:10:0;;::::1;::::0;26472:27:::1;::::0;:52:::1;::::0;26500:10:::1;::::0;26512:11;;26472:52:::1;;;:::i;25430:1147::-;-1:-1:-1::0;;25811:40:0::1;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;-1:-1:-1;;;;;;;;;;;25811:40:0;-1:-1:-1;10817:18:1;25811:40:0::1;10670:248:1::0;34101:291:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;34191:29:0;::::1;34183:44;;;::::0;-1:-1:-1;;;34183:44:0;;17482:2:1;34183:44:0::1;::::0;::::1;17464:21:1::0;17521:1;17501:18;;;17494:29;-1:-1:-1;;;17539:18:1;;;17532:32;17581:18;;34183:44:0::1;17280:325:1::0;34183:44:0::1;34260:14;::::0;;-1:-1:-1;;;;;34285:32:0;;::::1;-1:-1:-1::0;;;;;;34285:32:0;::::1;::::0;::::1;::::0;;;34333:51:::1;::::0;;34260:14;;;::::1;13313:34:1::0;;;13378:2;13363:18;;13356:43;;;;34333:51:0::1;::::0;13248:18:1;34333:51:0::1;;;;;;;34172:220;34101:291:::0;:::o;3400:182::-;3470:4;3503:10;3524:28;3503:10;3541:2;3545:6;3524:9;:28::i;29170:1381::-;1820:13;:11;:13::i;:::-;29287:1:::1;29273:11;:15;29265:30;;;;-1:-1:-1::0;;;29265:30:0::1;;;;;;;:::i;:::-;29326:1;29314:9;:13;29306:28;;;::::0;-1:-1:-1;;;29306:28:0;;17812:2:1;29306:28:0::1;::::0;::::1;17794:21:1::0;17851:1;17831:18;;;17824:29;-1:-1:-1;;;17869:18:1;;;17862:32;17911:18;;29306:28:0::1;17610:325:1::0;29306:28:0::1;29377:46;::::0;-1:-1:-1;;;29377:46:0;;29392:4:::1;29377:46;::::0;::::1;2189:51:1::0;;;29427:11:0;;29377:31:::1;::::0;2162:18:1;;29377:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;29355:113;;;::::0;-1:-1:-1;;;29355:113:0;;17152:2:1;29355:113:0::1;::::0;::::1;17134:21:1::0;17191:1;17171:18;;;17164:29;-1:-1:-1;;;17209:18:1;;;17202:32;17251:18;;29355:113:0::1;16950:325:1::0;29355:113:0::1;29547:16;::::0;29515:63:::1;::::0;29532:4:::1;::::0;-1:-1:-1;;;;;29547:16:0::1;29566:11:::0;29515:8:::1;:63::i;:::-;29603:16;::::0;-1:-1:-1;;;;;29603:16:0::1;:32;29643:9;29676:4;29696:11:::0;29603:16:::1;::::0;29844:10:::1;29869:21;:15;29887:3;29869:21;:::i;:::-;29603:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29603:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29603:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29599:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;30080:16;::::0;30048:53:::1;::::0;30065:4:::1;::::0;-1:-1:-1;;;;;30080:16:0::1;;30048:8;:53::i;:::-;30166:51;::::0;30174:10:::1;::::0;30195:21:::1;30166:51:::0;::::1;;;::::0;::::1;::::0;;;30195:21;30174:10;30166:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29599:945;;;30354:16;::::0;30322:53:::1;::::0;30339:4:::1;::::0;-1:-1:-1;;;;;30354:16:0::1;;30322:8;:53::i;:::-;30440:51;::::0;30448:10:::1;::::0;30469:21:::1;30440:51:::0;::::1;;;::::0;::::1;::::0;;;30469:21;30448:10;30440:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29599:945;-1:-1:-1::0;;29948:38:0::1;::::0;;10844:25:1;;;29976:9:0::1;10900:2:1::0;10885:18;;10878:34;-1:-1:-1;;;;;;;;;;;29948:38:0;-1:-1:-1;10817:18:1;29948:38:0::1;;;;;;;29170:1381:::0;:::o;31963:166::-;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;32037:21:0;::::1;32029:36;;;::::0;-1:-1:-1;;;32029:36:0;;18754:2:1;32029:36:0::1;::::0;::::1;18736:21:1::0;18793:1;18773:18;;;18766:29;-1:-1:-1;;;18811:18:1;;;18804:32;18853:18;;32029:36:0::1;18552:325:1::0;32029:36:0::1;32076:16;:45:::0;;-1:-1:-1;;;;;;32076:45:0::1;-1:-1:-1::0;;;;;32076:45:0;;;::::1;::::0;;;::::1;::::0;;31963:166::o;34690:2007::-;1820:13;:11;:13::i;:::-;34766:7:::1;::::0;::::1;::::0;::::1;;;34765:8;34757:23;;;::::0;-1:-1:-1;;;34757:23:0;;12445:2:1;34757:23:0::1;::::0;::::1;12427:21:1::0;12484:1;12464:18;;;12457:29;-1:-1:-1;;;12502:18:1;;;12495:32;12544:18;;34757:23:0::1;12243:325:1::0;34757:23:0::1;34791:7;:14:::0;;-1:-1:-1;;34791:14:0::1;;;::::0;;34901:46:::1;::::0;-1:-1:-1;;;34901:46:0;;34916:4:::1;34901:46;::::0;::::1;2189:51:1::0;;;-1:-1:-1;;34901:31:0::1;::::0;2162:18:1;;34901:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34875:72;;34984:1;34966:15;:19;34958:34;;;::::0;-1:-1:-1;;;34958:34:0;;19084:2:1;34958:34:0::1;::::0;::::1;19066:21:1::0;19123:1;19103:18;;;19096:29;-1:-1:-1;;;19141:18:1;;;19134:32;19183:18;;34958:34:0::1;18882:325:1::0;34958:34:0::1;35013:26;35077:27;9435:2;::::0;35077:27:::1;:::i;:::-;35042:31;9379:2;35042:15:::0;:31:::1;:::i;:::-;:63;;;;:::i;:::-;35013:92:::0;-1:-1:-1;35116:24:0::1;35143:36;35013:92:::0;35143:15;:36:::1;:::i;:::-;35205:52;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;35116:63:0;;-1:-1:-1;35205:52:0::1;::::0;10817:18:1;35205:52:0::1;;;;;;;35340:16;::::0;35308:69:::1;::::0;35325:4:::1;::::0;-1:-1:-1;;;;;35340:16:0::1;-1:-1:-1::0;;35308:8:0::1;:69::i;:::-;35423:25;35451:37;35472:16:::0;35451:18;:37:::1;:::i;:::-;35423:65;;35499:20;35522:31;35535:17;35522:12;:31::i;:::-;35499:54;;35578:12;35594:1;35578:17:::0;35574:86:::1;;-1:-1:-1::0;;35612:7:0::1;:15:::0;;-1:-1:-1;;35612:15:0::1;::::0;;-1:-1:-1;35642:7:0::1;::::0;-1:-1:-1;;35642:7:0::1;35574:86;35740:40;::::0;713:25:1;;;35740:40:0::1;::::0;701:2:1;686:18;35740:40:0::1;;;;;;;35888:10;::::0;35881:43:::1;::::0;-1:-1:-1;;;35881:43:0;;35918:4:::1;35881:43;::::0;::::1;2189:51:1::0;35851:27:0::1;::::0;-1:-1:-1;;;;;35888:10:0::1;::::0;35881:28:::1;::::0;2162:18:1;;35881:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35851:73;;35939:19;35962:1;35939:24:::0;35935:164:::1;;-1:-1:-1::0;;;;;;;;;;;35985:51:0::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;36051:7:0::1;:15:::0;;-1:-1:-1;;36051:15:0::1;::::0;;-1:-1:-1;36081:7:0::1;::::0;-1:-1:-1;;;36081:7:0::1;35935:164;36149:24;36219:17:::0;36176:40:::1;36198:18:::0;36176:19;:40:::1;:::i;:::-;:60;;;;:::i;:::-;36149:87:::0;-1:-1:-1;36247:22:0::1;36272:38;36149:87:::0;36272:19;:38:::1;:::i;:::-;36247:63:::0;-1:-1:-1;36402:20:0;;36398:108:::1;;36439:55;36457:16;36475:18;36439:17;:55::i;:::-;36568:18:::0;;36564:90:::1;;36603:39;36627:14;36603:23;:39::i;:::-;-1:-1:-1::0;;36674:7:0::1;:15:::0;;-1:-1:-1;;36674:15:0::1;::::0;;-1:-1:-1;;;;;;34690:2007:0:o;30636:1319::-;1820:13;:11;:13::i;:::-;30746:46:::1;::::0;-1:-1:-1;;;30746:46:0;;30761:4:::1;30746:46;::::0;::::1;2189:51:1::0;;;30724:19:0::1;::::0;30746:31:::1;::::0;2162:18:1;;30746:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30724:68;;30825:1;30811:11;:15;30803:30;;;;-1:-1:-1::0;;;30803:30:0::1;;;;;;;:::i;:::-;30864:1;30852:9;:13;30844:28;;;::::0;-1:-1:-1;;;30844:28:0;;17812:2:1;30844:28:0::1;::::0;::::1;17794:21:1::0;17851:1;17831:18;;;17824:29;-1:-1:-1;;;17869:18:1;;;17862:32;17911:18;;30844:28:0::1;17610:325:1::0;33094:958:0;1820:13;:11;:13::i;:::-;33229:16:::1;::::0;33197:69:::1;::::0;33214:4:::1;::::0;-1:-1:-1;;;;;33229:16:0::1;-1:-1:-1::0;;33197:8:0::1;:69::i;:::-;33345:10;::::0;33373:16:::1;::::0;33338:72:::1;::::0;-1:-1:-1;;;33338:72:0;;-1:-1:-1;;;;;33345:10:0;;::::1;::::0;33338:26:::1;::::0;:72:::1;::::0;33373:16;::::1;::::0;-1:-1:-1;;33392:17:0;33338:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;33338:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;33338:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;33334:193:::0;::::1;;-1:-1:-1::0;33449:10:0::1;::::0;33469:16:::1;::::0;33431:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;33449:10:0;;::::1;::::0;33469:16;::::1;::::0;-1:-1:-1;;33488:17:0;33431:75:::1;:::i;:::-;;;;;;;;33334:193;33602:13;::::0;-1:-1:-1;;;;;33602:13:0::1;:27:::0;33598:447:::1;;33657:10;::::0;33677:13:::1;::::0;33650:60:::1;::::0;-1:-1:-1;;;33650:60:0;;-1:-1:-1;;;;;33657:10:0;;::::1;::::0;33650:26:::1;::::0;:60:::1;::::0;33677:13;::::1;::::0;-1:-1:-1;;33692:17:0;33650:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;33650:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;33650:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;33646:177:::0;::::1;;-1:-1:-1::0;33753:10:0::1;::::0;33765:13:::1;::::0;33735:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;33753:10:0;;::::1;::::0;33765:13;::::1;::::0;-1:-1:-1;;33780:17:0;33735:63:::1;:::i;:::-;;;;;;;;33646:177;33885:13;::::0;33855:63:::1;::::0;-1:-1:-1;;;33855:63:0;;33870:4:::1;::::0;33855:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;33885:13:0::1;::::0;-1:-1:-1;;33900:17:0;33855:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;33855:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;33855:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;33851:183:::0;::::1;;-1:-1:-1::0;33976:13:0::1;::::0;33943:66:::1;::::0;::::1;::::0;::::1;::::0;33969:4:::1;::::0;-1:-1:-1;;;;;33976:13:0::1;::::0;-1:-1:-1;;33991:17:0;33943:66:::1;:::i;2064:165::-:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;2153:22:0;::::1;2145:37;;;::::0;-1:-1:-1;;;2145:37:0;;19414:2:1;2145:37:0::1;::::0;::::1;19396:21:1::0;19453:1;19433:18;;;19426:29;-1:-1:-1;;;19471:18:1;;;19464:32;19513:18;;2145:37:0::1;19212:325:1::0;2145:37:0::1;2193:28;2212:8;2193:18;:28::i;5119:256::-:0;-1:-1:-1;;;;;5221:19:0;;;;;;:44;;-1:-1:-1;;;;;;5244:21:0;;;;5221:44;5213:59;;;;-1:-1:-1;;;5213:59:0;;19744:2:1;5213:59:0;;;19726:21:1;19783:1;19763:18;;;19756:29;-1:-1:-1;;;19801:18:1;;;19794:32;19843:18;;5213:59:0;19542:325:1;5213:59:0;-1:-1:-1;;;;;5283:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5335:32;;713:25:1;;;5335:32:0;;686:18:1;5335:32:0;;;;;;;5119:256;;;:::o;1956:100::-;2031:10;2020:7;1934:6;;-1:-1:-1;;;;;1934:6:0;;1861:87;2020:7;-1:-1:-1;;;;;2020:21:0;;2012:36;;;;-1:-1:-1;;;2012:36:0;;20074:2:1;2012:36:0;;;20056:21:1;20113:1;20093:18;;;20086:29;-1:-1:-1;;;20131:18:1;;;20124:32;20173:18;;2012:36:0;19872:325:1;5383:311:0;-1:-1:-1;;;;;3697:18:0;;;5484:24;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5555:26;;;;5547:41;;;;-1:-1:-1;;;5547:41:0;;20404:2:1;5547:41:0;;;20386:21:1;20443:1;20423:18;;;20416:29;-1:-1:-1;;;20461:18:1;;;20454:32;20503:18;;5547:41:0;20202:325:1;5547:41:0;5624:51;5633:5;5640:7;5668:6;5649:16;:25;5624:8;:51::i;12705:2430::-;12893:7;;;;;;;12892:8;:41;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12918:15:0;;;1934:6;;12918:15;;12892:41;:72;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12951:13:0;;;1934:6;;12951:13;;12892:72;:111;;;;-1:-1:-1;;;;;;12982:21:0;;12998:4;12982:21;;12892:111;:148;;;;-1:-1:-1;13027:13:0;;-1:-1:-1;;;;;13021:19:0;;;13027:13;;13021:19;12892:148;12874:1992;;;13097:17;13137:3;13117:17;9324:1;13117:6;:17;:::i;:::-;:23;;;;:::i;:::-;13097:43;-1:-1:-1;13173:13:0;;13169:1686;;13267:23;13321:3;13293:25;9379:2;13293:9;:25;:::i;:::-;:31;;;;:::i;:::-;13267:57;-1:-1:-1;13343:21:0;13393:3;13367:23;9435:2;13367:9;:23;:::i;:::-;:29;;;;:::i;:::-;13343:53;-1:-1:-1;13491:22:0;13516:18;13525:9;13516:6;:18;:::i;:::-;13491:43;;13614:47;13630:4;13644;13651:9;13614:15;:47::i;:::-;13749:41;13765:4;13771:2;13775:14;13749:15;:41::i;:::-;13905:15;13878:23;;:42;;;;;;;:::i;:::-;;;;;;;;13964:13;13939:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14328:21:0;;14302:23;;9604:12;;14302:47;;;:::i;:::-;:73;;:161;;;;;14450:13;14426:21;;14400:23;;:47;;;;:::i;:::-;:63;14302:161;14298:287;;;14521:4;-1:-1:-1;;;;;14521:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14517:49;;14667:57;14681:4;9497:11;14687:15;14697:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14687:15;:36;;14667:13;:57::i;:::-;14743:53;14757:2;9497:11;14761:13;14771:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14743:53;14833:7;;;;12705:2430;;;:::o;13169:1686::-;13052:1814;12874:1992;14914:33;14930:4;14936:2;14940:6;14914:15;:33::i;:::-;15006:57;15020:4;9497:11;15026:15;15036:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;15006:57;15074:53;15088:2;9497:11;15092:13;15102:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;22171:1306;22231:7;22255:11;22270:1;22255:16;22251:30;;-1:-1:-1;22280:1:0;;22171:1306;-1:-1:-1;22171:1306:0:o;22251:30::-;22326:16;;;22340:1;22326:16;;;;;;;;22302:21;;22326:16;;;;;;;;;;-1:-1:-1;22326:16:0;22302:40;;22371:4;22353;22358:1;22353:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22353:23:0;;;:7;;;;;;;;;:23;22397:10;;22387:7;;22397:10;;;22387:4;;22397:10;;22387:7;;;;;;:::i;:::-;-1:-1:-1;;;;;22387:20:0;;;:7;;;;;;;;;:20;22733:16;;22890:14;;22595:20;;22733:16;;;;:70;;22818:11;;22595:20;;22871:4;;22890:14;22956:21;:15;22974:3;22956:21;:::i;:::-;22733:255;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22729:741;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;23351:6:0;23340:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;23380:1:0;;22171:1306;-1:-1:-1;;;;22171:1306:0:o;22729:741::-;;;-1:-1:-1;;;;;;;;;;;23420:15:0;;;;21445:2:1;21427:21;;;21484:1;21464:18;;;21457:29;-1:-1:-1;;;21517:2:1;21502:18;;21495:31;21558:2;21543:18;;21243:324;23420:15:0;;;;;;;;-1:-1:-1;23457:1:0;;22171:1306;-1:-1:-1;;;22171:1306:0:o;22729:741::-;23127:10;;23149:14;;23120:44;;-1:-1:-1;;;23120:44:0;;-1:-1:-1;;;;;23149:14:0;;;23120:44;;;2189:51:1;23090:27:0;;23127:10;;;;;23120:28;;2162:18:1;;23120:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23184:48;;;10844:25:1;;;10900:2;10885:18;;10878:34;;;23090:74:0;;-1:-1:-1;23184:48:0;;10817:18:1;23184:48:0;;;;;;;23254:19;22171:1306;-1:-1:-1;;;;22171:1306:0:o;20120:1177::-;20267:10;;20295:16;;20260:65;;-1:-1:-1;;;20260:65:0;;-1:-1:-1;;;;;20267:10:0;;;;20260:26;;:65;;20295:16;;;20314:10;;20260:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20406:16:0;;;20420:1;20406:16;;;;;;;;20382:21;;20406:16;;;;;;;;-1:-1:-1;;20443:10:0;;20433:7;;;;-1:-1:-1;;;;;;20443:10:0;;20433:7;;-1:-1:-1;20443:10:0;;20433:7;;;;:::i;:::-;-1:-1:-1;;;;;20433:20:0;;;:7;;;;;;;;;;:20;;;;20474:16;;:23;;;-1:-1:-1;;;20474:23:0;;;;:16;;;;;:21;;:23;;;;;20433:7;;20474:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20464:4;20469:1;20464:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20464:33:0;;;:7;;;;;;;;;:33;20609:16;;;:67;20691:10;20609:16;20822:4;20849;20869:21;:15;20887:3;20869:21;:::i;:::-;20609:292;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20605:685;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;21195:6:0;21184:18;;;;;;:::i;:::-;;;;;;;;21130:84;27001:2105:::1;;26919:2187:::0;:::o;20605:685::-;;;-1:-1:-1;;;;;;;;;;;21241:37:0;;;;22361:2:1;22343:21;;;22400:2;22380:18;;;22373:30;22439:25;22434:2;22419:18;;22412:53;22497:2;22482:18;;22159:347;21241:37:0;;;;;;;;27001:2105:::1;;26919:2187:::0;:::o;20605:685::-;20989:21;21029:14;;21025:93;;21064:38;21078:10;21090:11;21064:13;:38::i;23518:772::-;23609:7;:14;23638:17;;;:32;;-1:-1:-1;23659:11:0;;23638:32;23634:45;;;23672:7;23518:772;:::o;23634:45::-;23699:23;23725:21;23734:12;23725:6;:21;:::i;:::-;23699:47;;23761:15;23780:1;23761:20;23757:33;;23783:7;;23518:772;:::o;23757:33::-;23815:9;23810:407;23834:12;23830:1;:16;23810:407;;;23868:14;23885:7;23893:1;23885:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23885:10:0;;-1:-1:-1;23914:20:0;;;;;:47;;-1:-1:-1;;;;;;23938:23:0;;23956:4;23938:23;;23914:47;:74;;;;-1:-1:-1;23975:13:0;;-1:-1:-1;;;;;23965:23:0;;;23975:13;;23965:23;;23914:74;23910:296;;;24031:10;;24024:52;;-1:-1:-1;;;24024:52:0;;24009:12;;-1:-1:-1;;;;;24031:10:0;;24024:27;;:52;;24052:6;;24060:15;;24024:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;23910:296:0;-1:-1:-1;23848:3:0;;;;:::i;:::-;;;;23810:407;;;-1:-1:-1;24242:40:0;;;10844:25:1;;;10900:2;10885:18;;10878:34;;;24242:40:0;;10817:18:1;24242:40:0;10670:248:1;2237:191:0;2330:6;;;-1:-1:-1;;;;;2347:17:0;;;-1:-1:-1;;;;;;2347:17:0;;;;;;;2380:40;;2330:6;;;2347:17;2330:6;;2380:40;;2311:16;;2380:40;2300:128;2237:191;:::o;4196:507::-;-1:-1:-1;;;;;4293:18:0;;;;;;:38;;-1:-1:-1;;;;;;4315:16:0;;;;4293:38;4285:53;;;;-1:-1:-1;;;4285:53:0;;22853:2:1;4285:53:0;;;22835:21:1;22892:1;22872:18;;;22865:29;-1:-1:-1;;;22910:18:1;;;22903:32;22952:18;;4285:53:0;22651:325:1;4285:53:0;-1:-1:-1;;;;;4420:15:0;;4398:19;4420:15;;;;;;;;;;;4454:21;;;;4446:36;;;;-1:-1:-1;;;4446:36:0;;23183:2:1;4446:36:0;;;23165:21:1;23222:1;23202:18;;;23195:29;-1:-1:-1;;;23240:18:1;;;23233:32;23282:18;;4446:36:0;22981:325:1;4446:36:0;-1:-1:-1;;;;;4518:15:0;;;:9;:15;;;;;;;;;;;4536:20;;;4518:38;;4571:13;;;;;;;;;;:23;;;;;;4621:26;;713:25:1;;;4571:13:0;;4621:26;;686:18:1;4621:26:0;;;;;;;4658:37;26919:2187;15143:779;15238:13;;-1:-1:-1;;;;;15227:24:0;;;15238:13;;15227:24;;;;:52;;-1:-1:-1;;;;;;15255:24:0;;15274:4;15255:24;;15227:52;15223:692;;;15300:14;:36;;;;-1:-1:-1;;;;;;15319:17:0;;;;;;:8;:17;;;;;;;;15318:18;15300:36;15296:608;;;-1:-1:-1;;;;;;15357:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;15357:24:0;15377:4;15357:24;;;;;;15400:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;15400:21:0;;;;;;15143:779::o;15296:608::-;15448:14;15447:15;:36;;;;-1:-1:-1;;;;;;15466:17:0;;;;;;:8;:17;;;;;;;;15447:36;15443:461;;;-1:-1:-1;;;;;15504:17:0;;15524:5;15504:17;;;:8;:17;;;;;:25;;-1:-1:-1;;15504:25:0;;;15612:277;15636:7;:14;15632:18;;15612:277;;;15698:7;-1:-1:-1;;;;;15684:21:0;:7;15692:1;15684:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15684:10:0;:21;15680:190;;15747:7;15755:14;;:18;;15772:1;;15755:18;:::i;:::-;15747:27;;;;;;;;:::i;:::-;;;;;;;;;;;15734:7;:10;;-1:-1:-1;;;;;15747:27:0;;;;15742:1;;15734:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;15734:40:0;;;;;-1:-1:-1;;;;;15734:40:0;;;;;;15801:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;15801:13:0;;;;;-1:-1:-1;;;;;;15801:13:0;;;;;;27001:2105:::1;;26919:2187:::0;:::o;15680:190::-;15652:3;;;;:::i;:::-;;;;15612:277;;15443:461;15143:779;;:::o;21371:792::-;21533:22;21595:3;21573:18;9866:2;21595:3;21573:18;:::i;:::-;21558:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;21533:65;-1:-1:-1;21609:20:0;21667:3;21645:18;9866:2;21667:3;21645:18;:::i;:::-;21632:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;21695:16;;21609:61;;-1:-1:-1;;;;;;21695:16:0;:32;21735:9;21768:4;21788:11;21814:14;21609:61;21768:4;21898:21;:15;21916:3;21898:21;:::i;:::-;21695:235;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21695:235:0;;;;;;;;-1:-1:-1;;21695:235:0;;;;;;;;;;;;:::i;:::-;;;21691:465;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22056:26;22075:6;22056:26;;;;;;:::i;:::-;;;;;;;;22002:92;21691:465;;;;;22121:23;;;;;21445:2:1;21427:21;;;21484:1;21464:18;;;21457:29;-1:-1:-1;;;21517:2:1;21502:18;;21495:31;21558:2;21543:18;;21243:324;22121:23:0;;;;;;;;21691:465;;;-1:-1:-1;;21951:38:0;;;10844:25:1;;;10900:2;10885:18;;10878:34;;;-1:-1:-1;;;;;;;;;;;21951:38:0;-1:-1:-1;10817:18:1;21951:38:0;10670:248:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:456::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;1783:9;1770:23;1802:31;1827:5;1802:31;:::i;:::-;1852:5;-1:-1:-1;1909:2:1;1894:18;;1881:32;1922:33;1881:32;1922:33;:::i;:::-;1582:456;;1974:7;;-1:-1:-1;;;2028:2:1;2013:18;;;;2000:32;;1582:456::o;2440:461::-;2493:3;2531:5;2525:12;2558:6;2553:3;2546:19;2584:4;2613:2;2608:3;2604:12;2597:19;;2650:2;2643:5;2639:14;2671:1;2681:195;2695:6;2692:1;2689:13;2681:195;;;2760:13;;-1:-1:-1;;;;;2756:39:1;2744:52;;2816:12;;;;2851:15;;;;2792:1;2710:9;2681:195;;;-1:-1:-1;2892:3:1;;2440:461;-1:-1:-1;;;;;2440:461:1:o;2906:261::-;3085:2;3074:9;3067:21;3048:4;3105:56;3157:2;3146:9;3142:18;3134:6;3105:56;:::i;:::-;3097:64;2906:261;-1:-1:-1;;;2906:261:1:o;3405:247::-;3464:6;3517:2;3505:9;3496:7;3492:23;3488:32;3485:52;;;3533:1;3530;3523:12;3485:52;3572:9;3559:23;3591:31;3616:5;3591:31;:::i;3657:248::-;3725:6;3733;3786:2;3774:9;3765:7;3761:23;3757:32;3754:52;;;3802:1;3799;3792:12;3754:52;-1:-1:-1;;3825:23:1;;;3895:2;3880:18;;;3867:32;;-1:-1:-1;3657:248:1:o;3910:388::-;3978:6;3986;4039:2;4027:9;4018:7;4014:23;4010:32;4007:52;;;4055:1;4052;4045:12;4007:52;4094:9;4081:23;4113:31;4138:5;4113:31;:::i;:::-;4163:5;-1:-1:-1;4220:2:1;4205:18;;4192:32;4233:33;4192:32;4233:33;:::i;:::-;4285:7;4275:17;;;3910:388;;;;;:::o;4537:380::-;4616:1;4612:12;;;;4659;;;4680:61;;4734:4;4726:6;4722:17;4712:27;;4680:61;4787:2;4779:6;4776:14;4756:18;4753:38;4750:161;;4833:10;4828:3;4824:20;4821:1;4814:31;4868:4;4865:1;4858:15;4896:4;4893:1;4886:15;4750:161;;4537:380;;;:::o;4922:184::-;4992:6;5045:2;5033:9;5024:7;5020:23;5016:32;5013:52;;;5061:1;5058;5051:12;5013:52;-1:-1:-1;5084:16:1;;4922:184;-1:-1:-1;4922:184:1:o;5111:325::-;5313:2;5295:21;;;5352:1;5332:18;;;5325:29;-1:-1:-1;;;5385:2:1;5370:18;;5363:32;5427:2;5412:18;;5111:325::o;6101:375::-;-1:-1:-1;;;;;6359:15:1;;;6341:34;;6411:15;;;;6406:2;6391:18;;6384:43;6458:2;6443:18;;6436:34;;;;6291:2;6276:18;;6101:375::o;6481:277::-;6548:6;6601:2;6589:9;6580:7;6576:23;6572:32;6569:52;;;6617:1;6614;6607:12;6569:52;6649:9;6643:16;6702:5;6695:13;6688:21;6681:5;6678:32;6668:60;;6724:1;6721;6714:12;7093:274;-1:-1:-1;;;;;7285:32:1;;;;7267:51;;7349:2;7334:18;;7327:34;7255:2;7240:18;;7093:274::o;7372:127::-;7433:10;7428:3;7424:20;7421:1;7414:31;7464:4;7461:1;7454:15;7488:4;7485:1;7478:15;7504:125;7569:9;;;7590:10;;;7587:36;;;7603:18;;:::i;7634:760::-;-1:-1:-1;;;;;8049:15:1;;;8031:34;;8101:15;;;8096:2;8081:18;;8074:43;8148:2;8133:18;;8126:34;;;;8191:2;8176:18;;8169:34;;;;8234:3;8219:19;;8212:35;;;;8011:3;8263:19;;8256:35;8328:15;;;8322:3;8307:19;;8300:44;8375:3;8360:19;;8353:35;;;;7980:3;7965:19;;7634:760::o;8399:306::-;8487:6;8495;8503;8556:2;8544:9;8535:7;8531:23;8527:32;8524:52;;;8572:1;8569;8562:12;8524:52;8601:9;8595:16;8585:26;;8651:2;8640:9;8636:18;8630:25;8620:35;;8695:2;8684:9;8680:18;8674:25;8664:35;;8399:306;;;;;:::o;8710:179::-;8745:3;8787:1;8769:16;8766:23;8763:120;;;8833:1;8830;8827;8812:23;-1:-1:-1;8870:1:1;8864:8;8859:3;8855:18;8763:120;8710:179;:::o;9026:346::-;9136:2;9117:13;;-1:-1:-1;;9113:27:1;9101:40;;9171:18;9156:34;;9192:22;;;9153:62;9150:185;;;9257:10;9252:3;9248:20;9245:1;9238:31;9292:4;9289:1;9282:15;9320:4;9317:1;9310:15;9150:185;9351:2;9344:22;-1:-1:-1;;9026:346:1:o;9377:671::-;9416:3;9458:4;9440:16;9437:26;9434:39;;;9377:671;:::o;9434:39::-;9500:2;9494:9;-1:-1:-1;;9565:16:1;9561:25;;9558:1;9494:9;9537:50;9616:4;9610:11;9640:16;9675:18;9746:2;9739:4;9731:6;9727:17;9724:25;9719:2;9711:6;9708:14;9705:45;9702:58;;;9753:5;;;;;9377:671;:::o;9702:58::-;9790:6;9784:4;9780:17;9769:28;;9826:3;9820:10;9853:2;9845:6;9842:14;9839:27;;;9859:5;;;;;;9377:671;:::o;9839:27::-;9943:2;9924:16;9918:4;9914:27;9910:36;9903:4;9894:6;9889:3;9885:16;9881:27;9878:69;9875:82;;;9950:5;;;;;;9377:671;:::o;9875:82::-;9966:57;10017:4;10008:6;10000;9996:19;9992:30;9986:4;9966:57;:::i;:::-;-1:-1:-1;10039:3:1;;9377:671;-1:-1:-1;;;;;9377:671:1:o;12573:128::-;12640:9;;;12661:11;;;12658:37;;;12675:18;;:::i;12706:168::-;12779:9;;;12810;;12827:15;;;12821:22;;12807:37;12797:71;;12848:18;;:::i;12879:217::-;12919:1;12945;12935:132;;12989:10;12984:3;12980:20;12977:1;12970:31;13024:4;13021:1;13014:15;13052:4;13049:1;13042:15;12935:132;-1:-1:-1;13081:9:1;;12879:217::o;14638:401::-;14840:2;14822:21;;;14879:2;14859:18;;;14852:30;14918:34;14913:2;14898:18;;14891:62;-1:-1:-1;;;14984:2:1;14969:18;;14962:35;15029:3;15014:19;;14638:401::o;16034:251::-;16104:6;16157:2;16145:9;16136:7;16132:23;16128:32;16125:52;;;16173:1;16170;16163:12;16125:52;16205:9;16199:16;16224:31;16249:5;16224:31;:::i;17940:607::-;-1:-1:-1;;;;;18299:15:1;;;18281:34;;18346:2;18331:18;;18324:34;;;;18389:2;18374:18;;18367:34;;;;18432:2;18417:18;;18410:34;;;;18481:15;;;18475:3;18460:19;;18453:44;18261:3;18513:19;;18506:35;;;;18230:3;18215:19;;17940:607::o;20532:127::-;20593:10;20588:3;20584:20;20581:1;20574:31;20624:4;20621:1;20614:15;20648:4;20645:1;20638:15;20664:574;20955:6;20944:9;20937:25;20998:6;20993:2;20982:9;20978:18;20971:34;21041:3;21036:2;21025:9;21021:18;21014:31;20918:4;21062:57;21114:3;21103:9;21099:19;21091:6;21062:57;:::i;:::-;-1:-1:-1;;;;;21155:32:1;;;;21150:2;21135:18;;21128:60;-1:-1:-1;21219:3:1;21204:19;21197:35;21054:65;20664:574;-1:-1:-1;;;20664:574:1:o;22511:135::-;22550:3;22571:17;;;22568:43;;22591:18;;:::i;:::-;-1:-1:-1;22638:1:1;22627:13;;22511:135::o;23311:127::-;23372:10;23367:3;23363:20;23360:1;23353:31;23403:4;23400:1;23393:15;23427:4;23424:1;23417:15
Swarm Source
ipfs://33fc93180de82e8c6454bb2bf37219eeb2c35de89b7feb94232440e26303e9c4
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.