ETH Price: $2,301.26 (-4.92%)

Token

Detect Ai (DTAI)
 

Overview

Max Total Supply

1,000,000 DTAI

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 DTAI

Value
$0.00
0x42282a80572aefb200faa0c014e88c656c27bc78
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DTAI

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-29
*/

//SPDX-License-Identifier: GPL-3.0

 /*
 DETECT AI - $DTAI - DISCOVER, DETECT & ACCESS 💎
 Leveraging the advancements of AI technology, Detect AI provides a suite of tools focused on analysing and detecting an array of data. 
 Our carefully crafted machine learning models have been designed to extract and simplify a range of data from the blockchain, facial analysis and text origins. 

 WEBSITE : https://DetectAi.Network
 TELEGRAM :  https://t.me/DetectAiNetwork
 TWITTER : https://x.com/DetectAiNetwork

 Use Our Live Fully Functional Bots Now On Telegram ↙️
 @DetectAiContentBot
 @DetectAIFaceAnalyzerBot
 @DetectAiScannerBot

 */
pragma solidity ^0.8.22;

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
    function addLiquidityETH(
        address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) 
        external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

abstract contract Auth {
    address internal _owner;
    event OwnershipTransferred(address _owner);
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    function owner() public view returns (address) { return _owner; }
    function transferOwnership(address payable _newOwner) external onlyOwner { 
        _owner = _newOwner; 
        emit OwnershipTransferred(_newOwner); }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0);
        emit OwnershipTransferred(address(0)); }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address holder, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, 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);
}

contract DTAI is IERC20, Auth {
    string private constant _symbol = "DTAI";
    string private constant token_name = "Detect Ai";
    uint8 private constant tokenDecimals = 9;
    uint256 private constant _totalSupply = 1000000 * (10**tokenDecimals);
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private allowances;

    address private constant routerAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private uniswap_router = IUniswapV2Router02(routerAddress);
    
    address private LP; 
    mapping (address => bool) private isLiqPool;

    bool private tradingEnabled;

    bool private isInSwap = false;

    address payable private _marketing = payable(0xdfE6e638239D525a40db097250315D3eB7b8d836);
    
    uint256 private MEVBlock = 2;
    uint8 private sellTax_ = 5;
    uint8 private _buyTax = 5;
    
    uint256 private launchBlock;
    uint256 private _maxTx = _totalSupply; 
    uint256 private maxWalletVal = _totalSupply;
    uint256 private _swapMin = _totalSupply * 10 / 100000;
    uint256 private swapMaxAmt = _totalSupply * 949 / 100000;
    uint256 private _swapMinVal = 2 * (10**16);
    uint256 private swapLimits_ = _swapMin * 56 * 100;

    mapping (uint256 => mapping (address => uint8)) private _blockSells;
    mapping (address => bool) private _noFee;
    mapping (address => bool) private _nolimits;

    modifier swapLocked { 
        isInSwap = true; 
        _; 
        isInSwap = false; 
    }

    constructor() Auth(msg.sender) {
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _balances[msg.sender]);  

        _noFee[_owner] = true;
        _noFee[address(this)] = true;
        _noFee[_marketing] = true;
        _noFee[routerAddress] = true;
        _nolimits[_owner] = true;
        _nolimits[address(this)] = true;
        _nolimits[_marketing] = true;
        _nolimits[routerAddress] = true;
    }

    receive() external payable {}

    function decimals() external pure override returns (uint8) { return tokenDecimals; }
    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function name() external pure override returns (string memory) { return token_name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true; 
	}

    function transferFrom(address fromWallet, address toWallet, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(fromWallet), "Trading not open");
        allowances[fromWallet][msg.sender] -= amount;
        return _transferFrom(fromWallet, toWallet, amount); 
	}

    function transfer(address toWallet, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, toWallet, amount); 
	}

    function distributeTax(uint256 amount) private {
        _marketing.transfer(amount);
    }

    function _transferFrom(address sender, address toWallet, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from 0 wallet");
        if (!tradingEnabled) { require(_noFee[sender] && _nolimits[sender], "Trading not yet open"); }
        if ( !isInSwap && isLiqPool[toWallet] && _swapCheck(amount) ) { swapTax(); }

        if ( block.number >= launchBlock ) {
            if (block.number < MEVBlock && isLiqPool[sender]) { 
                require(toWallet == tx.origin, "MEV block"); 
            }
            if (block.number < MEVBlock + 600 && isLiqPool[toWallet] && sender != address(this) ) {
                _blockSells[block.number][toWallet] += 1;
                require(_blockSells[block.number][toWallet] <= 2, "MEV block");
            }
        }

        if ( sender != address(this) && toWallet != address(this) && sender != _owner ) { 
            require(testLimit(sender, toWallet, amount), "TX over limits"); 
        }

        uint256 _taxAmount = getTaxAmount(sender, toWallet, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] -= amount;
        swapLimits_ += _taxAmount;
        _balances[toWallet] += _transferAmount;
        emit Transfer(sender, toWallet, amount);
        return true;
    }

    function isExempt(address wallet) external view returns (bool fees, bool limits) {
        return (_noFee[wallet], _nolimits[wallet]); 
	}

    function getTaxAmount(address fromWallet, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        if ( !tradingEnabled || _noFee[fromWallet] || _noFee[recipient] ) { 
            taxAmount = 0; 
        } else if ( isLiqPool[fromWallet] ) { 
            taxAmount = amount * _buyTax / 100; 
         } else if ( isLiqPool[recipient] ) { 
            taxAmount = amount * sellTax_ / 100; 
        }
        return taxAmount;
    }

    function openTrading() external onlyOwner {
        require(!tradingEnabled, "trading open");
        _enableTrading();
    }

    function buyFees() external view returns(uint8) { return _buyTax; }
    function sellFees() external view returns(uint8) { return sellTax_; }

    function marketing() external view returns (address) { 
        return _marketing; 
	}

    function swapTax() private swapLocked {
        uint256 _taxTokenAvailable = swapLimits_;
        if ( _taxTokenAvailable >= _swapMin && tradingEnabled ) {
            if ( _taxTokenAvailable >= swapMaxAmt ) { _taxTokenAvailable = swapMaxAmt; }
            
            uint256 _tokensForSwap = _taxTokenAvailable; 
            if( _tokensForSwap > 1 * 10**tokenDecimals ) {
                _balances[address(this)] += _taxTokenAvailable;
                swapTokens(_tokensForSwap);
                swapLimits_ -= _taxTokenAvailable;
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { distributeTax(_contractETHBalance); }
        }
    }

    function maxWalletAmount() external view returns (uint256) { 
        return maxWalletVal; 
	}
    function maxTransactionAmount() external view returns (uint256) { 
        return _maxTx; 
	}

    function setFee(uint8 buyFeePercent, uint8 sellFeePercent) external onlyOwner {
        require(buyFeePercent + sellFeePercent <= 10, "Roundtrip too high");
        _buyTax = buyFeePercent;
        sellTax_ = sellFeePercent;
    }

    function _enableTrading() internal {
        _maxTx = 20 * _totalSupply / 1000;
        maxWalletVal = 20 * _totalSupply / 1000;
        _balances[LP] -= swapLimits_;
        (isLiqPool[LP],) = LP.call(abi.encodeWithSignature("sync()") );
        require(isLiqPool[LP], "Failed bootstrap");
        launchBlock = block.number;
        MEVBlock = MEVBlock + launchBlock;
        tradingEnabled = true;
    }

    function setLimits(uint16 maxTransPermille, uint16 maxWaletPermille) external onlyOwner {
        uint256 newTxAmt = _totalSupply * maxTransPermille / 1000 + 1;
        require(newTxAmt >= _maxTx, "tx too low");
        _maxTx = newTxAmt;
        uint256 newWalletAmt = _totalSupply * maxWaletPermille / 1000 + 1;
        require(newWalletAmt >= maxWalletVal, "wallet too low");
        maxWalletVal = newWalletAmt;
    }

    function updateMarketing(address marketingWlt) external onlyOwner {
        require(!isLiqPool[marketingWlt], "LP cannot be tax wallet");
        _marketing = payable(marketingWlt);
        _noFee[marketingWlt] = true;
        _nolimits[marketingWlt] = true;
    }

    function swapMin() external view returns (uint256) { 
        return _swapMin; 
	}
    function swapMax() external view returns (uint256) { 
        return swapMaxAmt; 
	}

    function _checkTradingOpen(address fromWallet) private view returns (bool){
        bool checkResult = false;
        if ( tradingEnabled ) { checkResult = true; } 
        else if (_noFee[fromWallet] && _nolimits[fromWallet]) { checkResult = true; } 

        return checkResult;
    }

    function _swapCheck(uint256 tokenAmt) private view returns (bool) {
        bool result;
        if (_swapMinVal > 0) { 
            uint256 lpTkn = _balances[LP];
            uint256 lpWeth = IERC20(uniswap_router.WETH()).balanceOf(LP); 
            uint256 weiValue = (tokenAmt * lpWeth) / lpTkn;
            if (weiValue >= _swapMinVal) { result = true; }    
        } else { result = true; }
        return result;
    }

    function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei) internal {
        _approveSwapMax(_tokenAmount);
        uniswap_router.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, _owner, block.timestamp );
    }

    function _approveSwapMax(uint256 _tokenAmount) internal {
        if ( allowances[address(this)][routerAddress] < _tokenAmount ) {
            allowances[address(this)][routerAddress] = type(uint256).max;
            emit Approval(address(this), routerAddress, type(uint256).max);
        }
    }

    function setTaxSwaps(uint32 minVal, uint32 minDiv, uint32 maxVal, uint32 maxDiv, uint32 trigger) external onlyOwner {
        _swapMin = _totalSupply * minVal / minDiv;
        swapMaxAmt = _totalSupply * maxVal / maxDiv;
        _swapMinVal = trigger * 10**15;
        require(swapMaxAmt>=_swapMin, "Min-Max error");
    }

    function setExemption(address wlt, bool isNoFees, bool isNoLimits) external onlyOwner {
        if (isNoLimits || isNoFees) { require(!isLiqPool[wlt], "Cannot exempt LP"); }
        _noFee[ wlt ] = isNoFees;
        _nolimits[ wlt ] = isNoLimits;
    }

    function swapTokens(uint256 tokenAmount) private {
        _approveSwapMax(tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address( this );
        path[1] = uniswap_router.WETH();
        uniswap_router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp);
    }

    function testLimit(address fromWallet, address toWallet, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( tradingEnabled && !_nolimits[fromWallet] && !_nolimits[toWallet] ) {
            if ( transferAmount > _maxTx ) { 
                limitCheckPassed = false; 
            }
            else if ( 
                !isLiqPool[toWallet] && (_balances[toWallet] + transferAmount > maxWalletVal) 
                ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function addLiquidity() external payable onlyOwner swapLocked {
        require(LP == address(0), "LP created");
        require(!tradingEnabled, "trading open");
        require(msg.value > 0 || address(this).balance>0, "No ETH");
        require(_balances[address(this)]>0, "No tokens");
        LP = IUniswapV2Factory(uniswap_router.factory()).createPair(address(this), uniswap_router.WETH());
        _addLiquidity(_balances[address(this)], address(this).balance);
    }
}

interface IUniswapV2Factory {    
    function createPair(address tokenA, address tokenB) external returns (address pair); 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"_owner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"fees","type":"bool"},{"internalType":"bool","name":"limits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wlt","type":"address"},{"internalType":"bool","name":"isNoFees","type":"bool"},{"internalType":"bool","name":"isNoLimits","type":"bool"}],"name":"setExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyFeePercent","type":"uint8"},{"internalType":"uint8","name":"sellFeePercent","type":"uint8"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransPermille","type":"uint16"},{"internalType":"uint16","name":"maxWaletPermille","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minVal","type":"uint32"},{"internalType":"uint32","name":"minDiv","type":"uint32"},{"internalType":"uint32","name":"maxVal","type":"uint32"},{"internalType":"uint32","name":"maxDiv","type":"uint32"},{"internalType":"uint32","name":"trigger","type":"uint32"}],"name":"setTaxSwaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"toWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromWallet","type":"address"},{"internalType":"address","name":"toWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWlt","type":"address"}],"name":"updateMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260038054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911617905560068054610100600160b01b03191675dfe6e638239d525a40db097250315d3eb7b8d836000017905560026007556008805461ffff19166105051790556100756009600a6103a4565b61008290620f42406103b9565b600a556009600a61009391906103a4565b6100a090620f42406103b9565b600b55620186a06100b36009600a6103a4565b6100c090620f42406103b9565b6100cb90600a6103b9565b6100d591906103d0565b600c55620186a06100e86009600a6103a4565b6100f590620f42406103b9565b610101906103b56103b9565b61010b91906103d0565b600d5566470de4df820000600e55600c546101279060386103b9565b6101329060646103b9565b600f55348015610140575f80fd5b505f80546001600160a01b0319163317905561015e6009600a6103a4565b61016b90620f42406103b9565b335f81815260016020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35f80546001600160a01b0390811682526011602090815260408084208054600160ff1991821681179092553080875283872080548316841790556006805462010000908190048816895285892080548516861790557fa30c5df85d30b252583f3563cb2bd6456399154fbc658c188bf804ed074c64d680548516861790558854881689526012909652848820805484168517905590875283872080548316841790555493909304909316845283208054821683179055737a250d5630b4cf539739df2c5dacb4c659f2488d9092527f3c6737805ae477fd0cfdda13dc5f99b32fcbfecb81e47f9e11e1b03813c08ec280549092161790556103ef565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156102fc57815f19048211156102e2576102e26102ae565b808516156102ef57918102915b93841c93908002906102c7565b509250929050565b5f826103125750600161039e565b8161031e57505f61039e565b8160018114610334576002811461033e5761035a565b600191505061039e565b60ff84111561034f5761034f6102ae565b50506001821b61039e565b5060208310610133831016604e8410600b841016171561037d575081810a61039e565b61038783836102c2565b805f190482111561039a5761039a6102ae565b0290505b92915050565b5f6103b260ff841683610304565b9392505050565b808202811582820484141761039e5761039e6102ae565b5f826103ea57634e487b7160e01b5f52601260045260245ffd5b500490565b6121b8806103fc5f395ff3fe608060405260043610610198575f3560e01c8063a5e992bb116100e7578063c9567bf911610087578063e4748b9e11610062578063e4748b9e146104f9578063e537a83414610515578063e8078d9414610534578063f2fde38b1461053c575f80fd5b8063c9567bf91461048a578063dd62ed3e1461049e578063e0f3ccf5146104e2575f80fd5b8063ad5dff73116100c2578063ad5dff73146103e4578063b3de9b5d14610443578063b91ebc8814610457578063c8c8ebe414610476575f80fd5b8063a5e992bb1461039d578063a9059cbb146103b1578063aa4bde28146103d0575f80fd5b8063368f48001161015257806389cc145a1161012d57806389cc145a146103175780638d870086146103365780638da5cb5b1461035557806395d89b4114610371575f80fd5b8063368f4800146102ae57806370a08231146102cf578063715018a614610303575f80fd5b806306fdde03146101a3578063095ea7b3146101e657806318160ddd1461021557806323b872dd146102375780632d3e474a14610256578063313ce5671461028d575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b5060408051808201909152600981526844657465637420416960b81b60208201525b6040516101dd9190611c6a565b60405180910390f35b3480156101f1575f80fd5b50610205610200366004611cb3565b61055b565b60405190151581526020016101dd565b348015610220575f80fd5b506102296105c7565b6040519081526020016101dd565b348015610242575f80fd5b50610205610251366004611cdd565b6105e6565b348015610261575f80fd5b506006546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016101dd565b348015610298575f80fd5b5060095b60405160ff90911681526020016101dd565b3480156102b9575f80fd5b506102cd6102c8366004611d31565b61067f565b005b3480156102da575f80fd5b506102296102e9366004611d62565b6001600160a01b03165f9081526001602052604090205490565b34801561030e575f80fd5b506102cd6107c1565b348015610322575f80fd5b506102cd610331366004611d8d565b61082e565b348015610341575f80fd5b506102cd610350366004611dc4565b6108c9565b348015610360575f80fd5b505f546001600160a01b0316610275565b34801561037c575f80fd5b506040805180820190915260048152634454414960e01b60208201526101d0565b3480156103a8575f80fd5b50600d54610229565b3480156103bc575f80fd5b506102056103cb366004611cb3565b61099c565b3480156103db575f80fd5b50600b54610229565b3480156103ef575f80fd5b5061042c6103fe366004611d62565b6001600160a01b03165f9081526011602090815260408083205460129092529091205460ff91821692911690565b6040805192151583529015156020830152016101dd565b34801561044e575f80fd5b50600c54610229565b348015610462575f80fd5b506102cd610471366004611d62565b6109f7565b348015610481575f80fd5b50600a54610229565b348015610495575f80fd5b506102cd610ae1565b3480156104a9575f80fd5b506102296104b8366004611e06565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156104ed575f80fd5b5060085460ff1661029c565b348015610504575f80fd5b50600854610100900460ff1661029c565b348015610520575f80fd5b506102cd61052f366004611e50565b610b56565b6102cd610c63565b348015610547575f80fd5b506102cd610556366004611d62565b610f57565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b59086815260200190565b60405180910390a35060015b92915050565b5f6105d46009600a611fa5565b6105e190620f4240611fb3565b905090565b5f6105f084610fd3565b6106345760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b60448201526064015b60405180910390fd5b6001600160a01b0384165f90815260026020908152604080832033845290915281208054849290610666908490611fca565b909155506106779050848484611036565b949350505050565b5f546001600160a01b031633146106a85760405162461bcd60e51b815260040161062b90611fdd565b5f6103e861ffff84166106bd6009600a611fa5565b6106ca90620f4240611fb3565b6106d49190611fb3565b6106de9190612014565b6106e9906001612033565b9050600a5481101561072a5760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b604482015260640161062b565b80600a819055505f6103e88361ffff166009600a6107489190611fa5565b61075590620f4240611fb3565b61075f9190611fb3565b6107699190612014565b610774906001612033565b9050600b548110156107b95760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b604482015260640161062b565b600b55505050565b5f546001600160a01b031633146107ea5760405162461bcd60e51b815260040161062b90611fdd565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146108575760405162461bcd60e51b815260040161062b90611fdd565b600a6108638284612046565b60ff1611156108a95760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b604482015260640161062b565b6008805461ffff191661010060ff9485160260ff19161791909216179055565b5f546001600160a01b031633146108f25760405162461bcd60e51b815260040161062b90611fdd565b80806108fb5750815b1561095b576001600160a01b0383165f9081526005602052604090205460ff161561095b5760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b604482015260640161062b565b6001600160a01b039092165f908152601160209081526040808320805494151560ff1995861617905560129091529020805492151592909116919091179055565b5f6109a633610fd3565b6109e55760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b604482015260640161062b565b6109f0338484611036565b9392505050565b5f546001600160a01b03163314610a205760405162461bcd60e51b815260040161062b90611fdd565b6001600160a01b0381165f9081526005602052604090205460ff1615610a885760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000604482015260640161062b565b6006805462010000600160b01b031916620100006001600160a01b03939093169283021790555f908152601160209081526040808320805460ff1990811660019081179092556012909352922080549091169091179055565b5f546001600160a01b03163314610b0a5760405162461bcd60e51b815260040161062b90611fdd565b60065460ff1615610b4c5760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161062b565b610b54611450565b565b5f546001600160a01b03163314610b7f5760405162461bcd60e51b815260040161062b90611fdd565b63ffffffff808516908616610b966009600a611fa5565b610ba390620f4240611fb3565b610bad9190611fb3565b610bb79190612014565b600c5563ffffffff808316908416610bd16009600a611fa5565b610bde90620f4240611fb3565b610be89190611fb3565b610bf29190612014565b600d55610c0c63ffffffff821666038d7ea4c6800061205f565b66ffffffffffffff16600e55600c54600d541015610c5c5760405162461bcd60e51b815260206004820152600d60248201526c26b4b716a6b0bc1032b93937b960991b604482015260640161062b565b5050505050565b5f546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161062b90611fdd565b6006805461ff0019166101001790556004546001600160a01b031615610ce15760405162461bcd60e51b815260206004820152600a60248201526913140818dc99585d195960b21b604482015260640161062b565b60065460ff1615610d235760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161062b565b5f341180610d3057505f47115b610d655760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b604482015260640161062b565b305f90815260016020526040902054610dac5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161062b565b60035f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e20919061208a565b6001600160a01b031663c9c653963060035f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea3919061208a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610eed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f11919061208a565b600480546001600160a01b0319166001600160a01b0392909216919091179055305f90815260016020526040902054610f4a904761160b565b6006805461ff0019169055565b5f546001600160a01b03163314610f805760405162461bcd60e51b815260040161062b90611fdd565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6006545f90819060ff1615610fea575060016105c1565b6001600160a01b0383165f9081526011602052604090205460ff16801561102857506001600160a01b0383165f9081526012602052604090205460ff165b156105c15750600192915050565b5f6001600160a01b03841661108d5760405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73666572732066726f6d20302077616c6c6574000000000000604482015260640161062b565b60065460ff16611118576001600160a01b0384165f9081526011602052604090205460ff1680156110d557506001600160a01b0384165f9081526012602052604090205460ff165b6111185760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba103cb2ba1037b832b760611b604482015260640161062b565b600654610100900460ff1615801561114757506001600160a01b0383165f9081526005602052604090205460ff165b80156111575750611157826116a9565b15611164576111646117de565b60095443106112df576007544310801561119557506001600160a01b0384165f9081526005602052604090205460ff165b156111de576001600160a01b03831632146111de5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161062b565b6007546111ed90610258612033565b4310801561121257506001600160a01b0383165f9081526005602052604090205460ff165b801561122757506001600160a01b0384163014155b156112df57435f9081526010602090815260408083206001600160a01b0387168452909152812080546001929061126290849060ff16612046565b82546101009290920a60ff818102199093169183160217909155435f9081526010602090815260408083206001600160a01b038916845290915290205460029116111590506112df5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161062b565b6001600160a01b038416301480159061130157506001600160a01b0383163014155b801561131a57505f546001600160a01b03858116911614155b156113675761132a84848461189b565b6113675760405162461bcd60e51b815260206004820152600e60248201526d5458206f766572206c696d69747360901b604482015260640161062b565b5f61137385858561195e565b90505f6113808285611fca565b6001600160a01b0387165f908152600160205260408120805492935086929091906113ac908490611fca565b9250508190555081600f5f8282546113c49190612033565b90915550506001600160a01b0385165f90815260016020526040812080548392906113f0908490612033565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161143c91815260200190565b60405180910390a350600195945050505050565b6103e861145f6009600a611fa5565b61146c90620f4240611fb3565b611477906014611fb3565b6114819190612014565b600a9081556103e89061149690600990611fa5565b6114a390620f4240611fb3565b6114ae906014611fb3565b6114b89190612014565b600b55600f546004546001600160a01b03165f90815260016020526040812080549091906114e7908490611fca565b909155505060048054604080519283526024830181526020830180516001600160e01b031660016209351760e01b0319179052516001600160a01b0390911691611530916120a5565b5f604051808303815f865af19150503d805f8114611569576040519150601f19603f3d011682016040523d82523d5f602084013e61156e565b606091505b5050600480546001600160a01b039081165f90815260056020526040808220805460ff1916951515959095179094559154168152205460ff166115e65760405162461bcd60e51b815260206004820152601060248201526f04661696c656420626f6f7473747261760841b604482015260640161062b565b4360098190556007546115f99190612033565b6007556006805460ff19166001179055565b61161482611a48565b6003545f805460405163f305d71960e01b8152306004820152602481018690526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611684573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c5c91906120bb565b5f805f600e5411156117d557600480546001600160a01b039081165f9081526001602090815260408083205460035482516315ab88c960e31b8152925191969495169363ad5c46489383820193909291908290030181865afa158015611711573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611735919061208a565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925291909116906370a0823190602401602060405180830381865afa158015611781573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a591906120e6565b90505f826117b38388611fb3565b6117bd9190612014565b9050600e5481106117cd57600193505b5050506105c1565b50600192915050565b6006805461ff001916610100179055600f54600c548110801590611804575060065460ff165b1561188d57600d5481106118175750600d545b806118246009600a611fa5565b61182f906001611fb3565b81111561187a57305f9081526001602052604081208054849290611854908490612033565b90915550611863905081611aea565b81600f5f8282546118749190611fca565b90915550505b47801561188a5761188a81611c2a565b50505b506006805461ff0019169055565b6006545f9060019060ff1680156118ca57506001600160a01b0385165f9081526012602052604090205460ff16155b80156118ee57506001600160a01b0384165f9081526012602052604090205460ff16155b1561067757600a5483111561190457505f610677565b6001600160a01b0384165f9081526005602052604090205460ff1615801561194f5750600b546001600160a01b0385165f9081526001602052604090205461194d908590612033565b115b1561067757505f949350505050565b6006545f90819060ff16158061198b57506001600160a01b0385165f9081526011602052604090205460ff165b806119ad57506001600160a01b0384165f9081526011602052604090205460ff165b156119b957505f610677565b6001600160a01b0385165f9081526005602052604090205460ff1615611a02576008546064906119f190610100900460ff1685611fb3565b6119fb9190612014565b9050610677565b6001600160a01b0384165f9081526005602052604090205460ff161561067757600854606490611a359060ff1685611fb3565b611a3f9190612014565b95945050505050565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611ae757305f818152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b611af381611a48565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b2657611b266120fd565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba1919061208a565b81600181518110611bb457611bb46120fd565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b815291169063791ac94790611bf99085905f90869030904290600401612111565b5f604051808303815f87803b158015611c10575f80fd5b505af1158015611c22573d5f803e3d5ffd5b505050505050565b600654604051620100009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015611c66573d5f803e3d5ffd5b5050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611ae7575f80fd5b5f8060408385031215611cc4575f80fd5b8235611ccf81611c9f565b946020939093013593505050565b5f805f60608486031215611cef575f80fd5b8335611cfa81611c9f565b92506020840135611d0a81611c9f565b929592945050506040919091013590565b803561ffff81168114611d2c575f80fd5b919050565b5f8060408385031215611d42575f80fd5b611d4b83611d1b565b9150611d5960208401611d1b565b90509250929050565b5f60208284031215611d72575f80fd5b81356109f081611c9f565b803560ff81168114611d2c575f80fd5b5f8060408385031215611d9e575f80fd5b611da783611d7d565b9150611d5960208401611d7d565b80358015158114611d2c575f80fd5b5f805f60608486031215611dd6575f80fd5b8335611de181611c9f565b9250611def60208501611db5565b9150611dfd60408501611db5565b90509250925092565b5f8060408385031215611e17575f80fd5b8235611e2281611c9f565b91506020830135611e3281611c9f565b809150509250929050565b803563ffffffff81168114611d2c575f80fd5b5f805f805f60a08688031215611e64575f80fd5b611e6d86611e3d565b9450611e7b60208701611e3d565b9350611e8960408701611e3d565b9250611e9760608701611e3d565b9150611ea560808701611e3d565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611eff57815f1904821115611ee557611ee5611eb1565b80851615611ef257918102915b93841c9390800290611eca565b509250929050565b5f82611f15575060016105c1565b81611f2157505f6105c1565b8160018114611f375760028114611f4157611f5d565b60019150506105c1565b60ff841115611f5257611f52611eb1565b50506001821b6105c1565b5060208310610133831016604e8410600b8410161715611f80575081810a6105c1565b611f8a8383611ec5565b805f1904821115611f9d57611f9d611eb1565b029392505050565b5f6109f060ff841683611f07565b80820281158282048414176105c1576105c1611eb1565b818103818111156105c1576105c1611eb1565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b5f8261202e57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105c1576105c1611eb1565b60ff81811683821601908111156105c1576105c1611eb1565b66ffffffffffffff81811683821602808216919082811461208257612082611eb1565b505092915050565b5f6020828403121561209a575f80fd5b81516109f081611c9f565b5f82518060208501845e5f920191825250919050565b5f805f606084860312156120cd575f80fd5b8351925060208401519150604084015190509250925092565b5f602082840312156120f6575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156121615784516001600160a01b03168352938301939183019160010161213c565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208056d6eee26769cc317b0197819eacff42eb18e0afe0d32fd992921b92018ee964736f6c63430008190033

Deployed Bytecode

0x608060405260043610610198575f3560e01c8063a5e992bb116100e7578063c9567bf911610087578063e4748b9e11610062578063e4748b9e146104f9578063e537a83414610515578063e8078d9414610534578063f2fde38b1461053c575f80fd5b8063c9567bf91461048a578063dd62ed3e1461049e578063e0f3ccf5146104e2575f80fd5b8063ad5dff73116100c2578063ad5dff73146103e4578063b3de9b5d14610443578063b91ebc8814610457578063c8c8ebe414610476575f80fd5b8063a5e992bb1461039d578063a9059cbb146103b1578063aa4bde28146103d0575f80fd5b8063368f48001161015257806389cc145a1161012d57806389cc145a146103175780638d870086146103365780638da5cb5b1461035557806395d89b4114610371575f80fd5b8063368f4800146102ae57806370a08231146102cf578063715018a614610303575f80fd5b806306fdde03146101a3578063095ea7b3146101e657806318160ddd1461021557806323b872dd146102375780632d3e474a14610256578063313ce5671461028d575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b5060408051808201909152600981526844657465637420416960b81b60208201525b6040516101dd9190611c6a565b60405180910390f35b3480156101f1575f80fd5b50610205610200366004611cb3565b61055b565b60405190151581526020016101dd565b348015610220575f80fd5b506102296105c7565b6040519081526020016101dd565b348015610242575f80fd5b50610205610251366004611cdd565b6105e6565b348015610261575f80fd5b506006546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016101dd565b348015610298575f80fd5b5060095b60405160ff90911681526020016101dd565b3480156102b9575f80fd5b506102cd6102c8366004611d31565b61067f565b005b3480156102da575f80fd5b506102296102e9366004611d62565b6001600160a01b03165f9081526001602052604090205490565b34801561030e575f80fd5b506102cd6107c1565b348015610322575f80fd5b506102cd610331366004611d8d565b61082e565b348015610341575f80fd5b506102cd610350366004611dc4565b6108c9565b348015610360575f80fd5b505f546001600160a01b0316610275565b34801561037c575f80fd5b506040805180820190915260048152634454414960e01b60208201526101d0565b3480156103a8575f80fd5b50600d54610229565b3480156103bc575f80fd5b506102056103cb366004611cb3565b61099c565b3480156103db575f80fd5b50600b54610229565b3480156103ef575f80fd5b5061042c6103fe366004611d62565b6001600160a01b03165f9081526011602090815260408083205460129092529091205460ff91821692911690565b6040805192151583529015156020830152016101dd565b34801561044e575f80fd5b50600c54610229565b348015610462575f80fd5b506102cd610471366004611d62565b6109f7565b348015610481575f80fd5b50600a54610229565b348015610495575f80fd5b506102cd610ae1565b3480156104a9575f80fd5b506102296104b8366004611e06565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156104ed575f80fd5b5060085460ff1661029c565b348015610504575f80fd5b50600854610100900460ff1661029c565b348015610520575f80fd5b506102cd61052f366004611e50565b610b56565b6102cd610c63565b348015610547575f80fd5b506102cd610556366004611d62565b610f57565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b59086815260200190565b60405180910390a35060015b92915050565b5f6105d46009600a611fa5565b6105e190620f4240611fb3565b905090565b5f6105f084610fd3565b6106345760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b60448201526064015b60405180910390fd5b6001600160a01b0384165f90815260026020908152604080832033845290915281208054849290610666908490611fca565b909155506106779050848484611036565b949350505050565b5f546001600160a01b031633146106a85760405162461bcd60e51b815260040161062b90611fdd565b5f6103e861ffff84166106bd6009600a611fa5565b6106ca90620f4240611fb3565b6106d49190611fb3565b6106de9190612014565b6106e9906001612033565b9050600a5481101561072a5760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b604482015260640161062b565b80600a819055505f6103e88361ffff166009600a6107489190611fa5565b61075590620f4240611fb3565b61075f9190611fb3565b6107699190612014565b610774906001612033565b9050600b548110156107b95760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b604482015260640161062b565b600b55505050565b5f546001600160a01b031633146107ea5760405162461bcd60e51b815260040161062b90611fdd565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146108575760405162461bcd60e51b815260040161062b90611fdd565b600a6108638284612046565b60ff1611156108a95760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b604482015260640161062b565b6008805461ffff191661010060ff9485160260ff19161791909216179055565b5f546001600160a01b031633146108f25760405162461bcd60e51b815260040161062b90611fdd565b80806108fb5750815b1561095b576001600160a01b0383165f9081526005602052604090205460ff161561095b5760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b604482015260640161062b565b6001600160a01b039092165f908152601160209081526040808320805494151560ff1995861617905560129091529020805492151592909116919091179055565b5f6109a633610fd3565b6109e55760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b604482015260640161062b565b6109f0338484611036565b9392505050565b5f546001600160a01b03163314610a205760405162461bcd60e51b815260040161062b90611fdd565b6001600160a01b0381165f9081526005602052604090205460ff1615610a885760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000604482015260640161062b565b6006805462010000600160b01b031916620100006001600160a01b03939093169283021790555f908152601160209081526040808320805460ff1990811660019081179092556012909352922080549091169091179055565b5f546001600160a01b03163314610b0a5760405162461bcd60e51b815260040161062b90611fdd565b60065460ff1615610b4c5760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161062b565b610b54611450565b565b5f546001600160a01b03163314610b7f5760405162461bcd60e51b815260040161062b90611fdd565b63ffffffff808516908616610b966009600a611fa5565b610ba390620f4240611fb3565b610bad9190611fb3565b610bb79190612014565b600c5563ffffffff808316908416610bd16009600a611fa5565b610bde90620f4240611fb3565b610be89190611fb3565b610bf29190612014565b600d55610c0c63ffffffff821666038d7ea4c6800061205f565b66ffffffffffffff16600e55600c54600d541015610c5c5760405162461bcd60e51b815260206004820152600d60248201526c26b4b716a6b0bc1032b93937b960991b604482015260640161062b565b5050505050565b5f546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161062b90611fdd565b6006805461ff0019166101001790556004546001600160a01b031615610ce15760405162461bcd60e51b815260206004820152600a60248201526913140818dc99585d195960b21b604482015260640161062b565b60065460ff1615610d235760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161062b565b5f341180610d3057505f47115b610d655760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b604482015260640161062b565b305f90815260016020526040902054610dac5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161062b565b60035f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e20919061208a565b6001600160a01b031663c9c653963060035f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea3919061208a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610eed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f11919061208a565b600480546001600160a01b0319166001600160a01b0392909216919091179055305f90815260016020526040902054610f4a904761160b565b6006805461ff0019169055565b5f546001600160a01b03163314610f805760405162461bcd60e51b815260040161062b90611fdd565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6006545f90819060ff1615610fea575060016105c1565b6001600160a01b0383165f9081526011602052604090205460ff16801561102857506001600160a01b0383165f9081526012602052604090205460ff165b156105c15750600192915050565b5f6001600160a01b03841661108d5760405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73666572732066726f6d20302077616c6c6574000000000000604482015260640161062b565b60065460ff16611118576001600160a01b0384165f9081526011602052604090205460ff1680156110d557506001600160a01b0384165f9081526012602052604090205460ff165b6111185760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba103cb2ba1037b832b760611b604482015260640161062b565b600654610100900460ff1615801561114757506001600160a01b0383165f9081526005602052604090205460ff165b80156111575750611157826116a9565b15611164576111646117de565b60095443106112df576007544310801561119557506001600160a01b0384165f9081526005602052604090205460ff165b156111de576001600160a01b03831632146111de5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161062b565b6007546111ed90610258612033565b4310801561121257506001600160a01b0383165f9081526005602052604090205460ff165b801561122757506001600160a01b0384163014155b156112df57435f9081526010602090815260408083206001600160a01b0387168452909152812080546001929061126290849060ff16612046565b82546101009290920a60ff818102199093169183160217909155435f9081526010602090815260408083206001600160a01b038916845290915290205460029116111590506112df5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161062b565b6001600160a01b038416301480159061130157506001600160a01b0383163014155b801561131a57505f546001600160a01b03858116911614155b156113675761132a84848461189b565b6113675760405162461bcd60e51b815260206004820152600e60248201526d5458206f766572206c696d69747360901b604482015260640161062b565b5f61137385858561195e565b90505f6113808285611fca565b6001600160a01b0387165f908152600160205260408120805492935086929091906113ac908490611fca565b9250508190555081600f5f8282546113c49190612033565b90915550506001600160a01b0385165f90815260016020526040812080548392906113f0908490612033565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161143c91815260200190565b60405180910390a350600195945050505050565b6103e861145f6009600a611fa5565b61146c90620f4240611fb3565b611477906014611fb3565b6114819190612014565b600a9081556103e89061149690600990611fa5565b6114a390620f4240611fb3565b6114ae906014611fb3565b6114b89190612014565b600b55600f546004546001600160a01b03165f90815260016020526040812080549091906114e7908490611fca565b909155505060048054604080519283526024830181526020830180516001600160e01b031660016209351760e01b0319179052516001600160a01b0390911691611530916120a5565b5f604051808303815f865af19150503d805f8114611569576040519150601f19603f3d011682016040523d82523d5f602084013e61156e565b606091505b5050600480546001600160a01b039081165f90815260056020526040808220805460ff1916951515959095179094559154168152205460ff166115e65760405162461bcd60e51b815260206004820152601060248201526f04661696c656420626f6f7473747261760841b604482015260640161062b565b4360098190556007546115f99190612033565b6007556006805460ff19166001179055565b61161482611a48565b6003545f805460405163f305d71960e01b8152306004820152602481018690526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611684573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c5c91906120bb565b5f805f600e5411156117d557600480546001600160a01b039081165f9081526001602090815260408083205460035482516315ab88c960e31b8152925191969495169363ad5c46489383820193909291908290030181865afa158015611711573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611735919061208a565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925291909116906370a0823190602401602060405180830381865afa158015611781573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a591906120e6565b90505f826117b38388611fb3565b6117bd9190612014565b9050600e5481106117cd57600193505b5050506105c1565b50600192915050565b6006805461ff001916610100179055600f54600c548110801590611804575060065460ff165b1561188d57600d5481106118175750600d545b806118246009600a611fa5565b61182f906001611fb3565b81111561187a57305f9081526001602052604081208054849290611854908490612033565b90915550611863905081611aea565b81600f5f8282546118749190611fca565b90915550505b47801561188a5761188a81611c2a565b50505b506006805461ff0019169055565b6006545f9060019060ff1680156118ca57506001600160a01b0385165f9081526012602052604090205460ff16155b80156118ee57506001600160a01b0384165f9081526012602052604090205460ff16155b1561067757600a5483111561190457505f610677565b6001600160a01b0384165f9081526005602052604090205460ff1615801561194f5750600b546001600160a01b0385165f9081526001602052604090205461194d908590612033565b115b1561067757505f949350505050565b6006545f90819060ff16158061198b57506001600160a01b0385165f9081526011602052604090205460ff165b806119ad57506001600160a01b0384165f9081526011602052604090205460ff165b156119b957505f610677565b6001600160a01b0385165f9081526005602052604090205460ff1615611a02576008546064906119f190610100900460ff1685611fb3565b6119fb9190612014565b9050610677565b6001600160a01b0384165f9081526005602052604090205460ff161561067757600854606490611a359060ff1685611fb3565b611a3f9190612014565b95945050505050565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611ae757305f818152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b611af381611a48565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b2657611b266120fd565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba1919061208a565b81600181518110611bb457611bb46120fd565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b815291169063791ac94790611bf99085905f90869030904290600401612111565b5f604051808303815f87803b158015611c10575f80fd5b505af1158015611c22573d5f803e3d5ffd5b505050505050565b600654604051620100009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015611c66573d5f803e3d5ffd5b5050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611ae7575f80fd5b5f8060408385031215611cc4575f80fd5b8235611ccf81611c9f565b946020939093013593505050565b5f805f60608486031215611cef575f80fd5b8335611cfa81611c9f565b92506020840135611d0a81611c9f565b929592945050506040919091013590565b803561ffff81168114611d2c575f80fd5b919050565b5f8060408385031215611d42575f80fd5b611d4b83611d1b565b9150611d5960208401611d1b565b90509250929050565b5f60208284031215611d72575f80fd5b81356109f081611c9f565b803560ff81168114611d2c575f80fd5b5f8060408385031215611d9e575f80fd5b611da783611d7d565b9150611d5960208401611d7d565b80358015158114611d2c575f80fd5b5f805f60608486031215611dd6575f80fd5b8335611de181611c9f565b9250611def60208501611db5565b9150611dfd60408501611db5565b90509250925092565b5f8060408385031215611e17575f80fd5b8235611e2281611c9f565b91506020830135611e3281611c9f565b809150509250929050565b803563ffffffff81168114611d2c575f80fd5b5f805f805f60a08688031215611e64575f80fd5b611e6d86611e3d565b9450611e7b60208701611e3d565b9350611e8960408701611e3d565b9250611e9760608701611e3d565b9150611ea560808701611e3d565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611eff57815f1904821115611ee557611ee5611eb1565b80851615611ef257918102915b93841c9390800290611eca565b509250929050565b5f82611f15575060016105c1565b81611f2157505f6105c1565b8160018114611f375760028114611f4157611f5d565b60019150506105c1565b60ff841115611f5257611f52611eb1565b50506001821b6105c1565b5060208310610133831016604e8410600b8410161715611f80575081810a6105c1565b611f8a8383611ec5565b805f1904821115611f9d57611f9d611eb1565b029392505050565b5f6109f060ff841683611f07565b80820281158282048414176105c1576105c1611eb1565b818103818111156105c1576105c1611eb1565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b5f8261202e57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105c1576105c1611eb1565b60ff81811683821601908111156105c1576105c1611eb1565b66ffffffffffffff81811683821602808216919082811461208257612082611eb1565b505092915050565b5f6020828403121561209a575f80fd5b81516109f081611c9f565b5f82518060208501845e5f920191825250919050565b5f805f606084860312156120cd575f80fd5b8351925060208401519150604084015190509250925092565b5f602082840312156120f6575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156121615784516001600160a01b03168352938301939183019160010161213c565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208056d6eee26769cc317b0197819eacff42eb18e0afe0d32fd992921b92018ee964736f6c63430008190033

Deployed Bytecode Sourcemap

2775:11743:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5046:85;;;;;;;;;;-1:-1:-1;5118:10:0;;;;;;;;;;;;-1:-1:-1;;;5118:10:0;;;;5046:85;;;;;;;:::i;:::-;;;;;;;;5478:213;;;;;;;;;;-1:-1:-1;5478:213:0;;;;;:::i;:::-;;:::i;:::-;;;1058:14:1;;1051:22;1033:41;;1021:2;1006:18;5478:213:0;893:187:1;4952:88:0;;;;;;;;;;;;;:::i;:::-;;;1231:25:1;;;1219:2;1204:18;4952:88:0;1085:177:1;5699:300:0;;;;;;;;;;-1:-1:-1;5699:300:0;;;;;:::i;:::-;;:::i;8604:88::-;;;;;;;;;;-1:-1:-1;8676:10:0;;;;;-1:-1:-1;;;;;8676:10:0;8604:88;;;-1:-1:-1;;;;;1892:32:1;;;1874:51;;1862:2;1847:18;8604:88:0;1728:203:1;4862:84:0;;;;;;;;;;-1:-1:-1;2953:1:0;4862:84;;;2108:4:1;2096:17;;;2078:36;;2066:2;2051:18;4862:84:0;1936:184:1;10300:428:0;;;;;;;;;;-1:-1:-1;10300:428:0;;;;;:::i;:::-;;:::i;:::-;;5227:105;;;;;;;;;;-1:-1:-1;5227:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;5311:18:0;5293:7;5311:18;;;:9;:18;;;;;;;5227:105;1782:130;;;;;;;;;;;;;:::i;9635:234::-;;;;;;;;;;-1:-1:-1;9635:234:0;;;;;:::i;:::-;;:::i;12843:256::-;;;;;;;;;;-1:-1:-1;12843:256:0;;;;;:::i;:::-;;:::i;1551:65::-;;;;;;;;;;-1:-1:-1;1589:7:0;1607:6;-1:-1:-1;;;;;1607:6:0;1551:65;;5137:84;;;;;;;;;;-1:-1:-1;5211:7:0;;;;;;;;;;;;-1:-1:-1;;;5211:7:0;;;;5137:84;;11103:86;;;;;;;;;;-1:-1:-1;11173:10:0;;11103:86;;6007:221;;;;;;;;;;-1:-1:-1;6007:221:0;;;;;:::i;:::-;;:::i;9430:96::-;;;;;;;;;;-1:-1:-1;9508:12:0;;9430:96;;7675:140;;;;;;;;;;-1:-1:-1;7675:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;7775:14:0;7732:9;7775:14;;;:6;:14;;;;;;;;;7791:9;:17;;;;;;;7775:14;;;;;7791:17;;;7675:140;;;;;3960:14:1;;3953:22;3935:41;;4019:14;;4012:22;4007:2;3992:18;;3985:50;3908:18;7675:140:0;3773:268:1;11013:84:0;;;;;;;;;;-1:-1:-1;11083:8:0;;11013:84;;10736:269;;;;;;;;;;-1:-1:-1;10736:269:0;;;;;:::i;:::-;;:::i;9532:95::-;;;;;;;;;;-1:-1:-1;9615:6:0;;9532:95;;8318:128;;;;;;;;;;;;;:::i;5338:132::-;;;;;;;;;;-1:-1:-1;5338:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;5440:18:0;;;5422:7;5440:18;;;:10;:18;;;;;;;;:27;;;;;;;;;;;;;5338:132;8527:69;;;;;;;;;;-1:-1:-1;8585:8:0;;;;8527:69;;8454:67;;;;;;;;;;-1:-1:-1;8511:7:0;;;;;;;8454:67;;12507:328;;;;;;;;;;-1:-1:-1;12507:328:0;;;;;:::i;:::-;;:::i;14034:481::-;;;:::i;1622:154::-;;;;;;;;;;-1:-1:-1;1622:154:0;;;;;:::i;:::-;;:::i;5478:213::-;5581:10;5553:4;5570:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;5570:31:0;;;;;;;;;;:40;;;5626:37;5553:4;;5570:31;;5626:37;;;;5604:6;1231:25:1;;1219:2;1204:18;;1085:177;5626:37:0;;;;;;;;-1:-1:-1;5681:4:0;5478:213;;;;;:::o;4952:88::-;5007:7;3012:17;2953:1;3012:2;:17;:::i;:::-;3001:29;;:7;:29;:::i;:::-;5018:19;;4952:88;:::o;5699:300::-;5802:4;5827:29;5845:10;5827:17;:29::i;:::-;5819:58;;;;-1:-1:-1;;;5819:58:0;;7230:2:1;5819:58:0;;;7212:21:1;7269:2;7249:18;;;7242:30;-1:-1:-1;;;7288:18:1;;;7281:46;7344:18;;5819:58:0;;;;;;;;;-1:-1:-1;;;;;5888:22:0;;;;;;:10;:22;;;;;;;;5911:10;5888:34;;;;;;;:44;;5926:6;;5888:22;:44;;5926:6;;5888:44;:::i;:::-;;;;-1:-1:-1;5950:43:0;;-1:-1:-1;5964:10:0;5976:8;5986:6;5950:13;:43::i;:::-;5943:50;5699:300;-1:-1:-1;;;;5699:300:0:o;10300:428::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;10399:16:::1;10452:4;10418:31;::::0;::::1;3012:17;2953:1;3012:2;:17;:::i;:::-;3001:29;::::0;:7:::1;:29;:::i;:::-;10418:31;;;;:::i;:::-;:38;;;;:::i;:::-;:42;::::0;10459:1:::1;10418:42;:::i;:::-;10399:61;;10491:6;;10479:8;:18;;10471:41;;;::::0;-1:-1:-1;;;10471:41:0;;8413:2:1;10471:41:0::1;::::0;::::1;8395:21:1::0;8452:2;8432:18;;;8425:30;-1:-1:-1;;;8471:18:1;;;8464:40;8521:18;;10471:41:0::1;8211:334:1::0;10471:41:0::1;10532:8;10523:6;:17;;;;10551:20;10608:4;10589:16;10574:31;;2953:1;3012:2;:17;;;;:::i;:::-;3001:29;::::0;:7:::1;:29;:::i;:::-;10574:31;;;;:::i;:::-;:38;;;;:::i;:::-;:42;::::0;10615:1:::1;10574:42;:::i;:::-;10551:65;;10651:12;;10635;:28;;10627:55;;;::::0;-1:-1:-1;;;10627:55:0;;8752:2:1;10627:55:0::1;::::0;::::1;8734:21:1::0;8791:2;8771:18;;;8764:30;-1:-1:-1;;;8810:18:1;;;8803:44;8864:18;;10627:55:0::1;8550:338:1::0;10627:55:0::1;10693:12;:27:::0;-1:-1:-1;;;10300:428:0:o;1782:130::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;1859:1:::1;1842:19:::0;;-1:-1:-1;;;;;;1842:19:0::1;::::0;;1877:32:::1;::::0;1874:51:1;;;1877:32:0::1;::::0;1862:2:1;1847:18;1877:32:0::1;;;;;;;1782:130::o:0;9635:234::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;9766:2:::1;9732:30;9748:14:::0;9732:13;:30:::1;:::i;:::-;:36;;;;9724:67;;;::::0;-1:-1:-1;;;9724:67:0;;9248:2:1;9724:67:0::1;::::0;::::1;9230:21:1::0;9287:2;9267:18;;;9260:30;-1:-1:-1;;;9306:18:1;;;9299:48;9364:18;;9724:67:0::1;9046:342:1::0;9724:67:0::1;9802:7;:23:::0;;-1:-1:-1;;9836:25:0;9802:23:::1;;::::0;;::::1;;-1:-1:-1::0;;9836:25:0;;;;;::::1;;::::0;;9635:234::o;12843:256::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;12944:10:::1;:22;;;;12958:8;12944:22;12940:77;;;-1:-1:-1::0;;;;;12979:14:0;::::1;;::::0;;;:9:::1;:14;::::0;;;;;::::1;;12978:15;12970:44;;;::::0;-1:-1:-1;;;12970:44:0;;9595:2:1;12970:44:0::1;::::0;::::1;9577:21:1::0;9634:2;9614:18;;;9607:30;-1:-1:-1;;;9653:18:1;;;9646:46;9709:18;;12970:44:0::1;9393:340:1::0;12970:44:0::1;-1:-1:-1::0;;;;;13027:13:0;;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;:24;;;::::1;;-1:-1:-1::0;;13027:24:0;;::::1;;::::0;;13062:9:::1;:16:::0;;;;;:29;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;12843:256::o;6007:221::-;6086:4;6111:29;6129:10;6111:17;:29::i;:::-;6103:58;;;;-1:-1:-1;;;6103:58:0;;7230:2:1;6103:58:0;;;7212:21:1;7269:2;7249:18;;;7242:30;-1:-1:-1;;;7288:18:1;;;7281:46;7344:18;;6103:58:0;7028:340:1;6103:58:0;6179:43;6193:10;6205:8;6215:6;6179:13;:43::i;:::-;6172:50;6007:221;-1:-1:-1;;;6007:221:0:o;10736:269::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10822:23:0;::::1;;::::0;;;:9:::1;:23;::::0;;;;;::::1;;10821:24;10813:60;;;::::0;-1:-1:-1;;;10813:60:0;;9940:2:1;10813:60:0::1;::::0;::::1;9922:21:1::0;9979:2;9959:18;;;9952:30;10018:25;9998:18;;;9991:53;10061:18;;10813:60:0::1;9738:347:1::0;10813:60:0::1;10884:10;:34:::0;;-1:-1:-1;;;;;;10884:34:0::1;::::0;-1:-1:-1;;;;;10884:34:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;10929:20:0;;;:6:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;10929:27:0;;::::1;-1:-1:-1::0;10929:27:0;;::::1;::::0;;;10967:9:::1;:23:::0;;;;;:30;;;;::::1;::::0;;::::1;::::0;;10736:269::o;8318:128::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;8380:14:::1;::::0;::::1;;8379:15;8371:40;;;::::0;-1:-1:-1;;;8371:40:0;;10292:2:1;8371:40:0::1;::::0;::::1;10274:21:1::0;10331:2;10311:18;;;10304:30;-1:-1:-1;;;10350:18:1;;;10343:42;10402:18;;8371:40:0::1;10090:336:1::0;8371:40:0::1;8422:16;:14;:16::i;:::-;8318:128::o:0;12507:328::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;12645:30:::1;::::0;;::::1;::::0;:21;::::1;3012:17;2953:1;3012:2;:17;:::i;:::-;3001:29;::::0;:7:::1;:29;:::i;:::-;12645:21;;;;:::i;:::-;:30;;;;:::i;:::-;12634:8;:41:::0;12699:30:::1;::::0;;::::1;::::0;:21;::::1;3012:17;2953:1;3012:2;:17;:::i;:::-;3001:29;::::0;:7:::1;:29;:::i;:::-;12699:21;;;;:::i;:::-;:30;;;;:::i;:::-;12686:10;:43:::0;12754:16:::1;;::::0;::::1;12764:6;12754:16;:::i;:::-;12740:30;;:11;:30:::0;12801:8:::1;::::0;12789:10:::1;::::0;:20:::1;;12781:46;;;::::0;-1:-1:-1;;;12781:46:0;;10893:2:1;12781:46:0::1;::::0;::::1;10875:21:1::0;10932:2;10912:18;;;10905:30;-1:-1:-1;;;10951:18:1;;;10944:43;11004:18;;12781:46:0::1;10691:337:1::0;12781:46:0::1;12507:328:::0;;;;;:::o;14034:481::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;4279:8:::1;:15:::0;;-1:-1:-1;;4279:15:0::1;;;::::0;;14115:2:::2;::::0;-1:-1:-1;;;;;14115:2:0::2;:16:::0;14107:39:::2;;;::::0;-1:-1:-1;;;14107:39:0;;11235:2:1;14107:39:0::2;::::0;::::2;11217:21:1::0;11274:2;11254:18;;;11247:30;-1:-1:-1;;;11293:18:1;;;11286:40;11343:18;;14107:39:0::2;11033:334:1::0;14107:39:0::2;14166:14;::::0;::::2;;14165:15;14157:40;;;::::0;-1:-1:-1;;;14157:40:0;;10292:2:1;14157:40:0::2;::::0;::::2;10274:21:1::0;10331:2;10311:18;;;10304:30;-1:-1:-1;;;10350:18:1;;;10343:42;10402:18;;14157:40:0::2;10090:336:1::0;14157:40:0::2;14228:1;14216:9;:13;:40;;;;14255:1;14233:21;:23;14216:40;14208:59;;;::::0;-1:-1:-1;;;14208:59:0;;11574:2:1;14208:59:0::2;::::0;::::2;11556:21:1::0;11613:1;11593:18;;;11586:29;-1:-1:-1;;;11631:18:1;;;11624:36;11677:18;;14208:59:0::2;11372:329:1::0;14208:59:0::2;14304:4;14311:1;14286:24:::0;;;:9:::2;:24;::::0;;;;;14278:48:::2;;;::::0;-1:-1:-1;;;14278:48:0;;11908:2:1;14278:48:0::2;::::0;::::2;11890:21:1::0;11947:1;11927:18;;;11920:29;-1:-1:-1;;;11965:18:1;;;11958:39;12014:18;;14278:48:0::2;11706:332:1::0;14278:48:0::2;14360:14;;;;;;;;;-1:-1:-1::0;;;;;14360:14:0::2;-1:-1:-1::0;;;;;14360:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14342:54:0::2;;14405:4;14412:14;;;;;;;;;-1:-1:-1::0;;;;;14412:14:0::2;-1:-1:-1::0;;;;;14412:19:0::2;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14342:92;::::0;-1:-1:-1;;;;;;14342:92:0::2;::::0;;;;;;-1:-1:-1;;;;;12529:15:1;;;14342:92:0::2;::::0;::::2;12511:34:1::0;12581:15;;12561:18;;;12554:43;12446:18;;14342:92:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14337:2;:97:::0;;-1:-1:-1;;;;;;14337:97:0::2;-1:-1:-1::0;;;;;14337:97:0;;;::::2;::::0;;;::::2;::::0;;14477:4:::2;-1:-1:-1::0;14459:24:0;;;-1:-1:-1;14459:24:0::2;::::0;;;;;14445:62:::2;::::0;14485:21:::2;14445:13;:62::i;:::-;4319:8:::1;:16:::0;;-1:-1:-1;;4319:16:0::1;::::0;;14034:481::o;1622:154::-;1406:6;;-1:-1:-1;;;;;1406:6:0;1392:10;:20;1384:57;;;;-1:-1:-1;;;1384:57:0;;;;;;;:::i;:::-;1707:6:::1;:18:::0;;-1:-1:-1;;;;;;1707:18:0::1;-1:-1:-1::0;;;;;1707:18:0;::::1;::::0;;::::1;::::0;;;1742:31:::1;::::0;1874:51:1;;;1742:31:0::1;::::0;1862:2:1;1847:18;1742:31:0::1;;;;;;;1622:154:::0;:::o;11197:292::-;11322:14;;11266:4;;;;11322:14;;11317:133;;;-1:-1:-1;11355:4:0;11317:133;;;-1:-1:-1;;;;;11382:18:0;;;;;;:6;:18;;;;;;;;:43;;;;-1:-1:-1;;;;;;11404:21:0;;;;;;:9;:21;;;;;;;;11382:43;11378:72;;;-1:-1:-1;11443:4:0;11470:11;11197:292;-1:-1:-1;;11197:292:0:o;6337:1330::-;6428:4;-1:-1:-1;;;;;6453:20:0;;6445:59;;;;-1:-1:-1;;;6445:59:0;;13026:2:1;6445:59:0;;;13008:21:1;13065:2;13045:18;;;13038:30;13104:28;13084:18;;;13077:56;13150:18;;6445:59:0;12824:350:1;6445:59:0;6520:14;;;;6515:94;;-1:-1:-1;;;;;6546:14:0;;;;;;:6;:14;;;;;;;;:35;;;;-1:-1:-1;;;;;;6564:17:0;;;;;;:9;:17;;;;;;;;6546:35;6538:68;;;;-1:-1:-1;;;6538:68:0;;13381:2:1;6538:68:0;;;13363:21:1;13420:2;13400:18;;;13393:30;-1:-1:-1;;;13439:18:1;;;13432:50;13499:18;;6538:68:0;13179:344:1;6538:68:0;6625:8;;;;;;;6624:9;:32;;;;-1:-1:-1;;;;;;6637:19:0;;;;;;:9;:19;;;;;;;;6624:32;:54;;;;;6660:18;6671:6;6660:10;:18::i;:::-;6619:76;;;6683:9;:7;:9::i;:::-;6728:11;;6712:12;:27;6707:447;;6776:8;;6761:12;:23;:44;;;;-1:-1:-1;;;;;;6788:17:0;;;;;;:9;:17;;;;;;;;6761:44;6757:130;;;-1:-1:-1;;;;;6835:21:0;;6847:9;6835:21;6827:43;;;;-1:-1:-1;;;6827:43:0;;13730:2:1;6827:43:0;;;13712:21:1;13769:1;13749:18;;;13742:29;-1:-1:-1;;;13787:18:1;;;13780:39;13836:18;;6827:43:0;13528:332:1;6827:43:0;6920:8;;:14;;6931:3;6920:14;:::i;:::-;6905:12;:29;:52;;;;-1:-1:-1;;;;;;6938:19:0;;;;;;:9;:19;;;;;;;;6905:52;:79;;;;-1:-1:-1;;;;;;6961:23:0;;6979:4;6961:23;;6905:79;6901:242;;;7018:12;7006:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7006:35:0;;;;;;;;;:40;;7045:1;;7006:25;:40;;7045:1;;7006:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;7085:12;-1:-1:-1;7073:25:0;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7073:35:0;;;;;;;;;;7112:1;7073:35;;:40;;;-1:-1:-1;7065:62:0;;;;-1:-1:-1;;;7065:62:0;;13730:2:1;7065:62:0;;;13712:21:1;13769:1;13749:18;;;13742:29;-1:-1:-1;;;13787:18:1;;;13780:39;13836:18;;7065:62:0;13528:332:1;7065:62:0;-1:-1:-1;;;;;7171:23:0;;7189:4;7171:23;;;;:52;;-1:-1:-1;;;;;;7198:25:0;;7218:4;7198:25;;7171:52;:72;;;;-1:-1:-1;7237:6:0;;-1:-1:-1;;;;;7227:16:0;;;7237:6;;7227:16;;7171:72;7166:171;;;7270:35;7280:6;7288:8;7298:6;7270:9;:35::i;:::-;7262:62;;;;-1:-1:-1;;;7262:62:0;;14067:2:1;7262:62:0;;;14049:21:1;14106:2;14086:18;;;14079:30;-1:-1:-1;;;14125:18:1;;;14118:44;14179:18;;7262:62:0;13865:338:1;7262:62:0;7349:18;7370:38;7383:6;7391:8;7401:6;7370:12;:38::i;:::-;7349:59;-1:-1:-1;7419:23:0;7445:19;7349:59;7445:6;:19;:::i;:::-;-1:-1:-1;;;;;7475:17:0;;;;;;:9;:17;;;;;:27;;7419:45;;-1:-1:-1;7496:6:0;;7475:17;;;:27;;7496:6;;7475:27;:::i;:::-;;;;;;;;7528:10;7513:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7549:19:0;;;;;;:9;:19;;;;;:38;;7572:15;;7549:19;:38;;7572:15;;7549:38;:::i;:::-;;;;;;;;7620:8;-1:-1:-1;;;;;7603:34:0;7612:6;-1:-1:-1;;;;;7603:34:0;;7630:6;7603:34;;;;1231:25:1;;1219:2;1204:18;;1085:177;7603:34:0;;;;;;;;-1:-1:-1;7655:4:0;;6337:1330;-1:-1:-1;;;;;6337:1330:0:o;9877:415::-;9952:4;3012:17;2953:1;3012:2;:17;:::i;:::-;3001:29;;:7;:29;:::i;:::-;9932:17;;:2;:17;:::i;:::-;:24;;;;:::i;:::-;9923:6;:33;;;10002:4;;3012:17;;2953:1;;3012:17;:::i;:::-;3001:29;;:7;:29;:::i;:::-;9982:17;;:2;:17;:::i;:::-;:24;;;;:::i;:::-;9967:12;:39;10034:11;;10027:2;;-1:-1:-1;;;;;10027:2:0;10017:13;;;;:9;:13;;;;;:28;;:13;;;:28;;10034:11;;10017:28;:::i;:::-;;;;-1:-1:-1;;10075:2:0;;;10083:33;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10083:33:0;-1:-1:-1;;;;;;10083:33:0;;;10075:43;-1:-1:-1;;;;;10075:2:0;;;;:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10067:2:0;;;-1:-1:-1;;;;;10067:2:0;;;10057:13;;;;:9;:13;;;;;;10056:62;;-1:-1:-1;;10056:62:0;;;;;;;;;;;10147:2;;;10137:13;;;;10056:62;10137:13;10129:42;;;;-1:-1:-1;;;10129:42:0;;14716:2:1;10129:42:0;;;14698:21:1;14755:2;14735:18;;;14728:30;-1:-1:-1;;;14774:18:1;;;14767:46;14830:18;;10129:42:0;14514:340:1;10129:42:0;10196:12;10182:11;:26;;;10230:8;;:22;;10196:12;10230:22;:::i;:::-;10219:8;:33;10263:14;:21;;-1:-1:-1;;10263:21:0;10280:4;10263:21;;;9877:415::o;11939:251::-;12027:29;12043:12;12027:15;:29::i;:::-;12067:14;;;12157:6;;12067:115;;-1:-1:-1;;;12067:115:0;;12130:4;12067:115;;;15200:34:1;15250:18;;;15243:34;;;15293:18;;;15286:34;;;15336:18;;;15329:34;;;;-1:-1:-1;;;;;12157:6:0;;;15379:19:1;;;15372:44;12165:15:0;15432:19:1;;;15425:35;12067:14:0;;;;:30;;12105:13;;15134:19:1;;12067:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11497:434::-;11557:4;11574:11;11614:1;11600:11;;:15;11596:304;;;11659:2;;;-1:-1:-1;;;;;11659:2:0;;;11633:13;11649;;;:9;:13;;;;;;;;;11701:14;;:21;;-1:-1:-1;;;11701:21:0;;;;11649:13;;11633;;11701:14;;:19;;:21;;;;11649:13;;11701:21;;;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11734:2;;;11694:43;;-1:-1:-1;;;11694:43:0;;-1:-1:-1;;;;;11734:2:0;;;11694:43;;;1874:51:1;;;;11694:39:0;;;;;;;1847:18:1;;11694:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11677:60;-1:-1:-1;11753:16:0;11794:5;11773:17;11677:60;11773:8;:17;:::i;:::-;11772:27;;;;:::i;:::-;11753:46;;11830:11;;11818:8;:23;11814:47;;11854:4;11845:13;;11814:47;11617:259;;;11596:304;;;-1:-1:-1;11893:4:0;11917:6;11497:434;-1:-1:-1;;11497:434:0:o;8700:722::-;4279:8;:15;;-1:-1:-1;;4279:15:0;;;;;8778:11:::1;::::0;8827:8:::1;::::0;8805:30;::::1;::::0;::::1;::::0;:48:::1;;-1:-1:-1::0;8839:14:0::1;::::0;::::1;;8805:48;8800:615;;;8898:10;;8876:18;:32;8871:76;;-1:-1:-1::0;8934:10:0::1;::::0;8871:76:::1;9000:18:::0;9059:17:::1;2953:1;9059:2;:17;:::i;:::-;9055:21;::::0;:1:::1;:21;:::i;:::-;9038:14;:38;9034:223;;;9116:4;9098:24;::::0;;;:9:::1;:24;::::0;;;;:46;;9126:18;;9098:24;:46:::1;::::0;9126:18;;9098:46:::1;:::i;:::-;::::0;;;-1:-1:-1;9163:26:0::1;::::0;-1:-1:-1;9174:14:0;9163:10:::1;:26::i;:::-;9223:18;9208:11;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;9034:223:0::1;9301:21;9340:23:::0;;9337:67:::1;;9367:34;9381:19;9367:13;:34::i;:::-;8856:559;;8800:615;-1:-1:-1::0;4319:8:0;:16;;-1:-1:-1;;4319:16:0;;;8700:722::o;13466:560::-;13631:14;;13570:4;;13611;;13631:14;;:40;;;;-1:-1:-1;;;;;;13650:21:0;;;;;;:9;:21;;;;;;;;13649:22;13631:40;:64;;;;-1:-1:-1;;;;;;13676:19:0;;;;;;:9;:19;;;;;;;;13675:20;13631:64;13626:359;;;13735:6;;13718:14;:23;13713:261;;;-1:-1:-1;13783:5:0;13713:261;;;-1:-1:-1;;;;;13848:19:0;;;;;;:9;:19;;;;;;;;13847:20;:77;;;;-1:-1:-1;13911:12:0;;-1:-1:-1;;;;;13872:19:0;;;;;;:9;:19;;;;;;:36;;13894:14;;13872:36;:::i;:::-;:51;13847:77;13824:150;;;-1:-1:-1;13966:5:0;14002:16;13466:560;-1:-1:-1;;;;13466:560:0:o;7823:487::-;7977:14;;7923:7;;;;7977:14;;7976:15;;:37;;-1:-1:-1;;;;;;7995:18:0;;;;;;:6;:18;;;;;;;;7976:37;:58;;;-1:-1:-1;;;;;;8017:17:0;;;;;;:6;:17;;;;;;;;7976:58;7971:305;;;-1:-1:-1;8065:1:0;7971:305;;;-1:-1:-1;;;;;8090:21:0;;;;;;:9;:21;;;;;;;;8085:191;;;8151:7;;8161:3;;8142:16;;8151:7;;;;;8142:6;:16;:::i;:::-;:22;;;;:::i;:::-;8130:34;;8085:191;;;-1:-1:-1;;;;;8189:20:0;;;;;;:9;:20;;;;;;;;8184:92;;;8249:8;;8260:3;;8240:17;;8249:8;;8240:6;:17;:::i;:::-;:23;;;;:::i;:::-;8228:35;7823:487;-1:-1:-1;;;;;7823:487:0:o;12198:301::-;12289:4;12270:25;;;;:10;:25;;;;;;;;3216:42;12270:40;;;;;;;;:55;-1:-1:-1;12265:227:0;;;12362:4;12343:25;;;;:10;:25;;;;;;;;3216:42;12343:40;;;;;;;;;;-1:-1:-1;;12343:60:0;;;;12423:57;;1231:25:1;;;3216:42:0;;12362:4;12423:57;;1204:18:1;12423:57:0;;;;;;;12265:227;12198:301;:::o;13107:351::-;13167:28;13183:11;13167:15;:28::i;:::-;13230:16;;;13244:1;13230:16;;;;;;;;13206:21;;13230:16;;;;;;;;;;-1:-1:-1;13230:16:0;13206:40;;13276:4;13257;13262:1;13257:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13257:25:0;;;:7;;;;;;;;;;:25;;;;13303:14;;:21;;;-1:-1:-1;;;13303:21:0;;;;:14;;;;;:19;;:21;;;;;13257:7;;13303:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13293:4;13298:1;13293:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13293:31:0;;;:7;;;;;;;;;:31;13335:14;;:115;;-1:-1:-1;;;13335:115:0;;:14;;;:65;;:115;;13401:11;;13335:14;;13415:4;;13428;;13434:15;;13335:115;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13156:302;13107:351;:::o;6236:93::-;6294:10;;:27;;:10;;;;-1:-1:-1;;;;;6294:10:0;;:27;;;;;;;;;;;;:10;:27;;;;;;;;;;;;;;;;;;;;;6236:93;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:315;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;878:2;863:18;;;;850:32;;-1:-1:-1;;;573:315:1:o;1267:456::-;1344:6;1352;1360;1413:2;1401:9;1392:7;1388:23;1384:32;1381:52;;;1429:1;1426;1419:12;1381:52;1468:9;1455:23;1487:31;1512:5;1487:31;:::i;:::-;1537:5;-1:-1:-1;1594:2:1;1579:18;;1566:32;1607:33;1566:32;1607:33;:::i;:::-;1267:456;;1659:7;;-1:-1:-1;;;1713:2:1;1698:18;;;;1685:32;;1267:456::o;2125:159::-;2192:20;;2252:6;2241:18;;2231:29;;2221:57;;2274:1;2271;2264:12;2221:57;2125:159;;;:::o;2289:256::-;2355:6;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2455:28;2473:9;2455:28;:::i;:::-;2445:38;;2502:37;2535:2;2524:9;2520:18;2502:37;:::i;:::-;2492:47;;2289:256;;;;;:::o;2550:247::-;2609:6;2662:2;2650:9;2641:7;2637:23;2633:32;2630:52;;;2678:1;2675;2668:12;2630:52;2717:9;2704:23;2736:31;2761:5;2736:31;:::i;2802:156::-;2868:20;;2928:4;2917:16;;2907:27;;2897:55;;2948:1;2945;2938:12;2963:252;3027:6;3035;3088:2;3076:9;3067:7;3063:23;3059:32;3056:52;;;3104:1;3101;3094:12;3056:52;3127:27;3144:9;3127:27;:::i;:::-;3117:37;;3173:36;3205:2;3194:9;3190:18;3173:36;:::i;3220:160::-;3285:20;;3341:13;;3334:21;3324:32;;3314:60;;3370:1;3367;3360:12;3385:383;3456:6;3464;3472;3525:2;3513:9;3504:7;3500:23;3496:32;3493:52;;;3541:1;3538;3531:12;3493:52;3580:9;3567:23;3599:31;3624:5;3599:31;:::i;:::-;3649:5;-1:-1:-1;3673:35:1;3704:2;3689:18;;3673:35;:::i;:::-;3663:45;;3727:35;3758:2;3747:9;3743:18;3727:35;:::i;:::-;3717:45;;3385:383;;;;;:::o;4046:388::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;4411:17;;;4046:388;;;;;:::o;4439:163::-;4506:20;;4566:10;4555:22;;4545:33;;4535:61;;4592:1;4589;4582:12;4607:474;4697:6;4705;4713;4721;4729;4782:3;4770:9;4761:7;4757:23;4753:33;4750:53;;;4799:1;4796;4789:12;4750:53;4822:28;4840:9;4822:28;:::i;:::-;4812:38;;4869:37;4902:2;4891:9;4887:18;4869:37;:::i;:::-;4859:47;;4925:37;4958:2;4947:9;4943:18;4925:37;:::i;:::-;4915:47;;4981:37;5014:2;5003:9;4999:18;4981:37;:::i;:::-;4971:47;;5037:38;5070:3;5059:9;5055:19;5037:38;:::i;:::-;5027:48;;4607:474;;;;;;;;:::o;5346:127::-;5407:10;5402:3;5398:20;5395:1;5388:31;5438:4;5435:1;5428:15;5462:4;5459:1;5452:15;5478:416;5567:1;5604:5;5567:1;5618:270;5639:7;5629:8;5626:21;5618:270;;;5698:4;5694:1;5690:6;5686:17;5680:4;5677:27;5674:53;;;5707:18;;:::i;:::-;5757:7;5747:8;5743:22;5740:55;;;5777:16;;;;5740:55;5856:22;;;;5816:15;;;;5618:270;;;5622:3;5478:416;;;;;:::o;5899:806::-;5948:5;5978:8;5968:80;;-1:-1:-1;6019:1:1;6033:5;;5968:80;6067:4;6057:76;;-1:-1:-1;6104:1:1;6118:5;;6057:76;6149:4;6167:1;6162:59;;;;6235:1;6230:130;;;;6142:218;;6162:59;6192:1;6183:10;;6206:5;;;6230:130;6267:3;6257:8;6254:17;6251:43;;;6274:18;;:::i;:::-;-1:-1:-1;;6330:1:1;6316:16;;6345:5;;6142:218;;6444:2;6434:8;6431:16;6425:3;6419:4;6416:13;6412:36;6406:2;6396:8;6393:16;6388:2;6382:4;6379:12;6375:35;6372:77;6369:159;;;-1:-1:-1;6481:19:1;;;6513:5;;6369:159;6560:34;6585:8;6579:4;6560:34;:::i;:::-;6630:6;6626:1;6622:6;6618:19;6609:7;6606:32;6603:58;;;6641:18;;:::i;:::-;6679:20;;5899:806;-1:-1:-1;;;5899:806:1:o;6710:140::-;6768:5;6797:47;6838:4;6828:8;6824:19;6818:4;6797:47;:::i;6855:168::-;6928:9;;;6959;;6976:15;;;6970:22;;6956:37;6946:71;;6997:18;;:::i;7373:128::-;7440:9;;;7461:11;;;7458:37;;;7475:18;;:::i;7506:348::-;7708:2;7690:21;;;7747:2;7727:18;;;7720:30;7786:26;7781:2;7766:18;;7759:54;7845:2;7830:18;;7506:348::o;7859:217::-;7899:1;7925;7915:132;;7969:10;7964:3;7960:20;7957:1;7950:31;8004:4;8001:1;7994:15;8032:4;8029:1;8022:15;7915:132;-1:-1:-1;8061:9:1;;7859:217::o;8081:125::-;8146:9;;;8167:10;;;8164:36;;;8180:18;;:::i;8893:148::-;8981:4;8960:12;;;8974;;;8956:31;;8999:13;;8996:39;;;9015:18;;:::i;10431:255::-;10502:16;10550:10;;;10562;;;10546:27;10593:20;;;;10502:16;10632:24;;;10622:58;;10660:18;;:::i;:::-;10622:58;;10431:255;;;;:::o;12043:251::-;12113:6;12166:2;12154:9;12145:7;12141:23;12137:32;12134:52;;;12182:1;12179;12172:12;12134:52;12214:9;12208:16;12233:31;12258:5;12233:31;:::i;14208:301::-;14337:3;14375:6;14369:13;14421:6;14414:4;14406:6;14402:17;14397:3;14391:37;14483:1;14447:16;;14472:13;;;-1:-1:-1;14447:16:1;14208:301;-1:-1:-1;14208:301:1:o;15471:306::-;15559:6;15567;15575;15628:2;15616:9;15607:7;15603:23;15599:32;15596:52;;;15644:1;15641;15634:12;15596:52;15673:9;15667:16;15657:26;;15723:2;15712:9;15708:18;15702:25;15692:35;;15767:2;15756:9;15752:18;15746:25;15736:35;;15471:306;;;;;:::o;15782:184::-;15852:6;15905:2;15893:9;15884:7;15880:23;15876:32;15873:52;;;15921:1;15918;15911:12;15873:52;-1:-1:-1;15944:16:1;;15782:184;-1:-1:-1;15782:184:1:o;16103:127::-;16164:10;16159:3;16155:20;16152:1;16145:31;16195:4;16192:1;16185:15;16219:4;16216:1;16209:15;16235:980;16497:4;16545:3;16534:9;16530:19;16576:6;16565:9;16558:25;16602:2;16640:6;16635:2;16624:9;16620:18;16613:34;16683:3;16678:2;16667:9;16663:18;16656:31;16707:6;16742;16736:13;16773:6;16765;16758:22;16811:3;16800:9;16796:19;16789:26;;16850:2;16842:6;16838:15;16824:29;;16871:1;16881:195;16895:6;16892:1;16889:13;16881:195;;;16960:13;;-1:-1:-1;;;;;16956:39:1;16944:52;;17051:15;;;;17016:12;;;;16992:1;16910:9;16881:195;;;-1:-1:-1;;;;;;;17132:32:1;;;;17127:2;17112:18;;17105:60;-1:-1:-1;;;17196:3:1;17181:19;17174:35;17093:3;16235:980;-1:-1:-1;;;16235:980:1:o

Swarm Source

ipfs://8056d6eee26769cc317b0197819eacff42eb18e0afe0d32fd992921b92018ee9
Loading...
Loading
Loading...
Loading
[ 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.