ETH Price: $3,506.03 (+2.49%)
Gas: 2 Gwei

Token

Proof of Trump (POT)
 

Overview

Max Total Supply

420,690,000 POT

Holders

234

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 POT

Value
$0.00
0x0636c1d18cadc7630ac15c197e55a5e025126008
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:
Pot

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-31
*/

//SPDX-License-Identifier: MIT
/*
$POT There is only one way to help president elect Trump, Fuse Blockchain & Blunts together!


Socials:

Webpage:
 https://ProofofTrump.Vip

Portal:
 https://t.me/ProofofTrumpCoin

X:
 https://x.com/ProofofTrumpEth

*/


pragma solidity 0.8.21;

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 __owner, 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);
}

interface IUniswapV2Factory { 
    function createPair(address tokenA, address tokenB) external returns (address pair); 
}
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;
    constructor(address deployerWallet) { 
        _owner = deployerWallet; 
    }
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    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)); 
    }
    event OwnershipTransferred(address _owner);
}

contract Pot is IERC20, Auth {
    uint8 private constant _decimals      = 9;
    uint256 private constant _totalSupply = 420690000 * (10**_decimals);
    string private constant _name         = "Proof of Trump";
    string private constant _symbol       = "POT";

    uint8 private antiSnipeTax1 = 35;
    uint8 private antiSnipeTax2 = 25;
    uint8 private antiSnipeBlocks1 = 2;
    uint8 private antiSnipeBlocks2 = 2;

    uint8 private _buyTaxRate  = 15;
    uint8 private _sellTaxRate = 25;

    address payable private _walletMarketing = payable(0x1b2b20A7B804b7CBD53BDA6DBB47eB2Ee4295A9d); 

    uint256 private _launchBlock;
    uint256 private _maxTxAmount     = _totalSupply; 
    uint256 private _maxWalletAmount = _totalSupply;
    uint256 private _taxSwapMin = _totalSupply * 10 / 100000;
    uint256 private _taxSwapMax = _totalSupply * 499 / 100000;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _noFees;
    mapping (address => bool) private _noLimits;

    address private _lpOwner;

    address private constant _swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private _primarySwapRouter = IUniswapV2Router02(_swapRouterAddress);
    address private _primaryLP;
    mapping (address => bool) private _isLP;

    bool private _tradingOpen;

    bool private _inTaxSwap = false;
    modifier lockTaxSwap { 
        _inTaxSwap = true; 
        _; 
        _inTaxSwap = false; 
    }

    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);
    event TokensBurned(address indexed burnedByWallet, uint256 tokenAmount);

    constructor() Auth(msg.sender) {
        _lpOwner = msg.sender;

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _balances[_owner]);

        _noFees[_owner] = true;
        _noFees[address(this)] = true;
        _noFees[_swapRouterAddress] = true;
        _noFees[_walletMarketing] = true;
        _noLimits[_owner] = true;
        _noLimits[address(this)] = true;
        _noLimits[_swapRouterAddress] = true;
        _noLimits[_walletMarketing] = true;
    }

    receive() external payable {}
    
    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    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 transfer(address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(sender), "Trading not open");
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] -= amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _approveRouter(uint256 _tokenAmount) internal {
        if ( _allowances[address(this)][_swapRouterAddress] < _tokenAmount ) {
            _allowances[address(this)][_swapRouterAddress] = type(uint256).max;
            emit Approval(address(this), _swapRouterAddress, type(uint256).max);
        }
    }

    function addLiquidity() external payable onlyOwner lockTaxSwap {
        require(_primaryLP == address(0), "LP exists");
        require(!_tradingOpen, "trading is open");
        require(msg.value > 0 || address(this).balance>0, "No ETH in contract or message");
        require(_balances[address(this)]>0, "No tokens in contract");
        _primaryLP = IUniswapV2Factory(_primarySwapRouter.factory()).createPair(address(this), _primarySwapRouter.WETH());
        _addLiquidity(_balances[address(this)], address(this).balance, false);
        _isLP[_primaryLP] = true;
    }

    function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
        address lpTokenRecipient = _lpOwner;
        if ( autoburn ) { lpTokenRecipient = address(0); }
        _approveRouter(_tokenAmount);
        _primarySwapRouter.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
    }

    function enableTrading() external onlyOwner {
        require(!_tradingOpen, "trading is open");
        _openTrading();
    }

    function _openTrading() internal {
        _maxTxAmount     = _totalSupply * 5 / 1000; 
        _maxWalletAmount = _totalSupply * 5 / 1000;
        _tradingOpen = true;
        _launchBlock = block.number;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from Zero wallet");
        if (!_tradingOpen) { require(_noFees[sender] && _noLimits[sender], "Trading not open"); }
        if ( !_inTaxSwap && _isLP[recipient] ) { _swapTaxAndLiquify(); }
        
        if ( sender != address(this) && recipient != address(this) && sender != _owner ) { 
            require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); 
        }
        uint256 _taxAmount = _calculateTax(sender, recipient, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] = _balances[sender] - amount;
        if ( _taxAmount > 0 ) { _balances[address(this)] += _taxAmount; }
        _balances[recipient] += _transferAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( _tradingOpen && !_noLimits[sender] && !_noLimits[recipient] ) {
            if ( transferAmount > _maxTxAmount ) { 
                limitCheckPassed = false; 
            }
            else if ( !_isLP[recipient] && (_balances[recipient] + transferAmount > _maxWalletAmount) ) { 
                limitCheckPassed = false; 
            }
        }
        return limitCheckPassed;
    }

    function _checkTradingOpen(address sender) private view returns (bool){
        bool checkResult = false;
        if ( _tradingOpen ) { checkResult = true; } 
        else if (_noFees[sender] && _noLimits[sender]) { checkResult = true; } 
        return checkResult;
    }

    function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        if ( !_tradingOpen || _noFees[sender] || _noFees[recipient] ) { 
            taxAmount = 0; 
        } else if ( _isLP[sender] ) { 
            if ( block.number >= _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2 ) {
                taxAmount = amount * _buyTaxRate / 100; 
            } else if ( block.number >= _launchBlock + antiSnipeBlocks1 ) {
                taxAmount = amount * antiSnipeTax2 / 100;
            } else if ( block.number >= _launchBlock) {
                taxAmount = amount * antiSnipeTax1 / 100;
            }
        } else if ( _isLP[recipient] ) { 
            taxAmount = amount * _sellTaxRate / 100; 
        }
        return taxAmount;
    }

    function exemptFromFees(address wallet) external view returns (bool) {
        return _noFees[wallet];
    } 
    function exemptFromLimits(address wallet) external view returns (bool) {
        return _noLimits[wallet];
    } 
    function setExempt(address wallet, bool noFees, bool noLimits) external onlyOwner {
        if (noLimits || noFees) { require(!_isLP[wallet], "Cannot exempt LP"); }
        _noFees[ wallet ] = noFees;
        _noLimits[ wallet ] = noLimits;
    }

    function buyFee() external view returns(uint8) {
        return _buyTaxRate;
    }
    function sellFee() external view returns(uint8) {
        return _sellTaxRate;
    }

    function setFees(uint8 buy, uint8 sell) external onlyOwner {
        require(buy + sell <= 40, "Roundtrip too high");
        _buyTaxRate = buy;
        _sellTaxRate = sell;
    }  

    function marketingWallet() external view returns (address) {
        return _walletMarketing;
    }

    function updateWallet(address marketing) external onlyOwner {
        require(!_isLP[marketing], "LP cannot be tax wallet");
        _walletMarketing = payable(marketing);
        _noFees[marketing] = true;
        _noLimits[marketing] = true;
    }

    function maxWallet() external view returns (uint256) {
        return _maxWalletAmount;
    }
    function maxTransaction() external view returns (uint256) {
        return _maxTxAmount;
    }

    function swapAtMin() external view returns (uint256) {
        return _taxSwapMin;
    }
    function swapAtMax() external view returns (uint256) {
        return _taxSwapMax;
    }

    function setLimits(uint16 maxTransactionPermille, uint16 maxWalletPermille) external onlyOwner {
        uint256 newTxAmt = _totalSupply * maxTransactionPermille / 1000 + 1;
        require(newTxAmt >= _maxTxAmount, "tx too low");
        _maxTxAmount = newTxAmt;
        uint256 newWalletAmt = _totalSupply * maxWalletPermille / 1000 + 1;
        require(newWalletAmt >= _maxWalletAmount, "wallet too low");
        _maxWalletAmount = newWalletAmt;
    }

    function setTaxSwap(uint32 minValue, uint32 minDivider, uint32 maxValue, uint32 maxDivider) external onlyOwner {
        _taxSwapMin = _totalSupply * minValue / minDivider;
        _taxSwapMax = _totalSupply * maxValue / maxDivider;
        require(_taxSwapMax>=_taxSwapMin, "Min/Max error");
        require(_taxSwapMax>_totalSupply / 100000, "Max too low");
        require(_taxSwapMax<_totalSupply / 100, "Max too high");
    }

    function _swapTaxAndLiquify() private lockTaxSwap {
        uint256 _taxTokensAvailable = balanceOf(address(this));

        if ( _taxTokensAvailable >= _taxSwapMin && _tradingOpen ) {
            if ( _taxTokensAvailable >= _taxSwapMax ) { _taxTokensAvailable = _taxSwapMax; }
            uint256 _tokensToSwap = _taxTokensAvailable;
            if( _tokensToSwap > 10**_decimals ) {
                _swapTaxTokensForEth(_tokensToSwap);
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _walletMarketing.transfer(_contractETHBalance); }
        }
    }

    function _swapTaxTokensForEth(uint256 tokenAmt) private {
        _approveRouter(tokenAmt);
        address[] memory swappath = new address[](2);
        swappath[0] = address(this); swappath[1] = _primarySwapRouter.WETH();
        _primarySwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmt,0,swappath,address(this),block.timestamp);
    }

    function manualTaxSwapAndSend(uint8 swapTokenPercent, bool sendEth) external onlyOwner lockTaxSwap {
        require(swapTokenPercent <= 100, "Cannot swap more than 100%");
        uint256 tokensToSwap = balanceOf(address(this)) * swapTokenPercent / 100;
        if (tokensToSwap > 10 ** _decimals) {
            _swapTaxTokensForEth(tokensToSwap);
        }
        if (sendEth) { 
            uint256 ethBalance = address(this).balance;
            require(ethBalance > 0, "No ETH");
            _walletMarketing.transfer(ethBalance);
        }
    }

    function burn(uint256 amount) external onlyOwner {
        uint256 _tokensAvailable = balanceOf(msg.sender);
        require(amount <= _tokensAvailable, "balance too low");
        if ( amount > 0 ) {
            _balances[msg.sender] -= amount;
            _balances[address(0)] += amount;
            emit Transfer(msg.sender, address(0), amount);
            emit TokensBurned(msg.sender, amount);
        }
    }
}

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":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnedByWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"swapTokenPercent","type":"uint8"},{"internalType":"bool","name":"sendEth","type":"bool"}],"name":"manualTaxSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransactionPermille","type":"uint16"},{"internalType":"uint16","name":"maxWalletPermille","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minValue","type":"uint32"},{"internalType":"uint32","name":"minDivider","type":"uint32"},{"internalType":"uint32","name":"maxValue","type":"uint32"},{"internalType":"uint32","name":"maxDivider","type":"uint32"}],"name":"setTaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtMin","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":"marketing","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f805465190f0202192360a01b65ffffffffffff60a01b19909116179055600180546001600160a01b031916731b2b20a7b804b7cbd53bda6dbb47eb2ee4295a9d179055620000566009600a620003cf565b62000066906319133850620003e6565b600355620000776009600a620003cf565b62000087906319133850620003e6565b600455620186a06200009c6009600a620003cf565b620000ac906319133850620003e6565b620000b990600a620003e6565b620000c5919062000400565b600555620186a0620000da6009600a620003cf565b620000ea906319133850620003e6565b620000f8906101f3620003e6565b62000104919062000400565b600655600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600f805461ff001916905534801562000144575f80fd5b505f8054336001600160a01b03199182168117909255600b80549091169091179055620001746009600a620003cf565b62000184906319133850620003e6565b5f80546001600160a01b039081168252600760205260408083209390935581541680825282822054925190927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620001df91815260200190565b60405180910390a35f80546001600160a01b0390811682526009602090815260408084208054600160ff1991821681179092553080875283872080548316841790557fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce80548316841790558254861687528387208054831684179055865486168752600a909452828620805482168317905592855281852080548416821790557fc90215bb1b0ac6bfa50a3c02c4b559c695b6a8e828048a88e327592fc55c5d2c805484168217905580549093168452909220805490921617905562000420565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200031457815f1904821115620002f857620002f8620002c0565b808516156200030657918102915b93841c9390800290620002d9565b509250929050565b5f826200032c57506001620003c9565b816200033a57505f620003c9565b81600181146200035357600281146200035e576200037e565b6001915050620003c9565b60ff841115620003725762000372620002c0565b50506001821b620003c9565b5060208310610133831016604e8410600b8410161715620003a3575081810a620003c9565b620003af8383620002d4565b805f1904821115620003c557620003c5620002c0565b0290505b92915050565b5f620003df60ff8416836200031c565b9392505050565b8082028115828204841417620003c957620003c9620002c0565b5f826200041b57634e487b7160e01b5f52601260045260245ffd5b500490565b61224b806200042e5f395ff3fe6080604052600436106101c8575f3560e01c806370a08231116100f257806395d89b4111610092578063dd62ed3e11610062578063dd62ed3e1461055e578063e8078d94146105a2578063f2fde38b146105aa578063f8b45b05146105c9575f80fd5b806395d89b41146104e1578063a6097b0a1461050c578063a9059cbb1461052b578063c3f70b521461054a575f80fd5b8063848b86e3116100cd578063848b86e31461045b5780638a8c523c1461047a5780638d3e6e401461048e5780638da5cb5b146104c5575f80fd5b806370a08231146103e2578063715018a61461041657806375f0a8741461042a575f80fd5b8063368f4800116101685780634d4ce935116101385780634d4ce935146103595780634fcd24461461036d57806357ff135a1461038c5780635a90a49e146103ab575f80fd5b8063368f4800146102ea57806342966c681461030957806346b8983414610328578063470624021461033c575f80fd5b806323b872dd116101a357806323b872dd1461026c5780632b14ca561461028b5780632fb528ba146102b6578063313ce567146102d7575f80fd5b806306fdde03146101d3578063095ea7b31461021b57806318160ddd1461024a575f80fd5b366101cf57005b5f80fd5b3480156101de575f80fd5b5060408051808201909152600e81526d050726f6f66206f66205472756d760941b60208201525b6040516102129190611ce8565b60405180910390f35b348015610226575f80fd5b5061023a610235366004611d47565b6105dd565b6040519015158152602001610212565b348015610255575f80fd5b5061025e610649565b604051908152602001610212565b348015610277575f80fd5b5061023a610286366004611d71565b610669565b348015610296575f80fd5b505f54600160c81b900460ff165b60405160ff9091168152602001610212565b3480156102c1575f80fd5b506102d56102d0366004611dd3565b61070d565b005b3480156102e2575f80fd5b5060096102a4565b3480156102f5575f80fd5b506102d5610304366004611e15565b610868565b348015610314575f80fd5b506102d5610323366004611e3d565b6109a8565b348015610333575f80fd5b5060055461025e565b348015610347575f80fd5b505f54600160c01b900460ff166102a4565b348015610364575f80fd5b5060065461025e565b348015610378575f80fd5b506102d5610387366004611e54565b610afb565b348015610397575f80fd5b506102d56103a6366004611e7c565b610ba9565b3480156103b6575f80fd5b5061023a6103c5366004611ebe565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156103ed575f80fd5b5061025e6103fc366004611ebe565b6001600160a01b03165f9081526007602052604090205490565b348015610421575f80fd5b506102d5610c7c565b348015610435575f80fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610212565b348015610466575f80fd5b506102d5610475366004611ebe565b610ce9565b348015610485575f80fd5b506102d5610dc8565b348015610499575f80fd5b5061023a6104a8366004611ebe565b6001600160a01b03165f908152600a602052604090205460ff1690565b3480156104d0575f80fd5b505f546001600160a01b0316610443565b3480156104ec575f80fd5b506040805180820190915260038152621413d560ea1b6020820152610205565b348015610517575f80fd5b506102d5610526366004611eec565b610e40565b348015610536575f80fd5b5061023a610545366004611d47565b610ff5565b348015610555575f80fd5b5060035461025e565b348015610569575f80fd5b5061025e610578366004611f3d565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b6102d561102d565b3480156105b5575f80fd5b506102d56105c4366004611ebe565b61136b565b3480156105d4575f80fd5b5060045461025e565b335f8181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106379086815260200190565b60405180910390a35060015b92915050565b5f6106566009600a612068565b610664906319133850612076565b905090565b5f610673846113e7565b6106985760405162461bcd60e51b815260040161068f9061208d565b60405180910390fd5b6001600160a01b0384165f9081526008602090815260408083203384529091529020545f19146106fa576001600160a01b0384165f908152600860209081526040808320338452909152812080548492906106f49084906120b7565b90915550505b61070584848461144a565b949350505050565b5f546001600160a01b031633146107365760405162461bcd60e51b815260040161068f906120ca565b600f805461ff001916610100179055606460ff831611156107995760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000604482015260640161068f565b305f908152600760205260408120546064906107b99060ff861690612076565b6107c39190612101565b90506107d16009600a612068565b8111156107e1576107e1816116d4565b811561085857478061081e5760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b604482015260640161068f565b6001546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610855573d5f803e3d5ffd5b50505b5050600f805461ff001916905550565b5f546001600160a01b031633146108915760405162461bcd60e51b815260040161068f906120ca565b5f6103e861ffff84166108a66009600a612068565b6108b4906319133850612076565b6108be9190612076565b6108c89190612101565b6108d3906001612120565b90506003548110156109145760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b604482015260640161068f565b60038190555f6103e861ffff841661092e6009600a612068565b61093c906319133850612076565b6109469190612076565b6109509190612101565b61095b906001612120565b90506004548110156109a05760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b604482015260640161068f565b600455505050565b5f546001600160a01b031633146109d15760405162461bcd60e51b815260040161068f906120ca565b335f9081526007602052604090205480821115610a225760405162461bcd60e51b815260206004820152600f60248201526e62616c616e636520746f6f206c6f7760881b604482015260640161068f565b8115610af757335f9081526007602052604081208054849290610a469084906120b7565b90915550505f80805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054849290610a85908490612120565b90915550506040518281525f9033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360405182815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a25b5050565b5f546001600160a01b03163314610b245760405162461bcd60e51b815260040161068f906120ca565b6028610b308284612133565b60ff161115610b765760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b604482015260640161068f565b5f805461ffff60c01b1916600160c01b60ff9485160260ff60c81b191617600160c81b9290931691909102919091179055565b5f546001600160a01b03163314610bd25760405162461bcd60e51b815260040161068f906120ca565b8080610bdb5750815b15610c3b576001600160a01b0383165f908152600e602052604090205460ff1615610c3b5760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b604482015260640161068f565b6001600160a01b039092165f908152600960209081526040808320805494151560ff19958616179055600a9091529020805492151592909116919091179055565b5f546001600160a01b03163314610ca55760405162461bcd60e51b815260040161068f906120ca565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b03163314610d125760405162461bcd60e51b815260040161068f906120ca565b6001600160a01b0381165f908152600e602052604090205460ff1615610d7a5760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000604482015260640161068f565b600180546001600160a01b039092166001600160a01b0319909216821781555f918252600960209081526040808420805460ff199081168517909155600a9092529092208054909216179055565b5f546001600160a01b03163314610df15760405162461bcd60e51b815260040161068f906120ca565b600f5460ff1615610e365760405162461bcd60e51b815260206004820152600f60248201526e3a3930b234b7339034b99037b832b760891b604482015260640161068f565b610e3e611814565b565b5f546001600160a01b03163314610e695760405162461bcd60e51b815260040161068f906120ca565b63ffffffff808416908516610e806009600a612068565b610e8e906319133850612076565b610e989190612076565b610ea29190612101565b60055563ffffffff808216908316610ebc6009600a612068565b610eca906319133850612076565b610ed49190612076565b610ede9190612101565b60068190556005541115610f245760405162461bcd60e51b815260206004820152600d60248201526c26b4b717a6b0bc1032b93937b960991b604482015260640161068f565b620186a0610f346009600a612068565b610f42906319133850612076565b610f4c9190612101565b60065411610f8a5760405162461bcd60e51b815260206004820152600b60248201526a4d617820746f6f206c6f7760a81b604482015260640161068f565b6064610f986009600a612068565b610fa6906319133850612076565b610fb09190612101565b60065410610fef5760405162461bcd60e51b815260206004820152600c60248201526b09ac2f040e8dede40d0d2ced60a31b604482015260640161068f565b50505050565b5f610fff336113e7565b61101b5760405162461bcd60e51b815260040161068f9061208d565b61102633848461144a565b9392505050565b5f546001600160a01b031633146110565760405162461bcd60e51b815260040161068f906120ca565b600f805461ff001916610100179055600d546001600160a01b0316156110aa5760405162461bcd60e51b81526020600482015260096024820152684c502065786973747360b81b604482015260640161068f565b600f5460ff16156110ef5760405162461bcd60e51b815260206004820152600f60248201526e3a3930b234b7339034b99037b832b760891b604482015260640161068f565b5f3411806110fc57505f47115b6111485760405162461bcd60e51b815260206004820152601d60248201527f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000604482015260640161068f565b305f9081526007602052604090205461119b5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81a5b8818dbdb9d1c9858dd605a1b604482015260640161068f565b600c5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120f919061214c565b6001600160a01b031663c9c6539630600c5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611292919061214c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156112dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611300919061214c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055305f9081526007602052604081205461133a914790611891565b600d546001600160a01b03165f908152600e60205260409020805460ff19166001179055600f805461ff0019169055565b5f546001600160a01b031633146113945760405162461bcd60e51b815260040161068f906120ca565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b600f545f90819060ff16156113fe57506001610643565b6001600160a01b0383165f9081526009602052604090205460ff16801561143c57506001600160a01b0383165f908152600a602052604090205460ff165b156106435750600192915050565b5f6001600160a01b0384166114a15760405162461bcd60e51b815260206004820152601d60248201527f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000604482015260640161068f565b600f5460ff16611505576001600160a01b0384165f9081526009602052604090205460ff1680156114e957506001600160a01b0384165f908152600a602052604090205460ff165b6115055760405162461bcd60e51b815260040161068f9061208d565b600f54610100900460ff1615801561153457506001600160a01b0383165f908152600e602052604090205460ff165b1561154157611541611948565b6001600160a01b038416301480159061156357506001600160a01b0383163014155b801561157c57505f546001600160a01b03858116911614155b156115cc5761158c8484846119fd565b6115cc5760405162461bcd60e51b815260206004820152601160248201527054582065786365656473206c696d69747360781b604482015260640161068f565b5f6115d8858585611ac0565b90505f6115e582856120b7565b6001600160a01b0387165f9081526007602052604090205490915061160b9085906120b7565b6001600160a01b0387165f90815260076020526040902055811561164d57305f9081526007602052604081208054849290611647908490612120565b90915550505b6001600160a01b0385165f9081526007602052604081208054839290611674908490612120565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516116c091815260200190565b60405180910390a350600195945050505050565b6116dd81611c46565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061171057611710612167565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178b919061214c565b8160018151811061179e5761179e612167565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b815291169063791ac947906117e39085905f9086903090429060040161217b565b5f604051808303815f87803b1580156117fa575f80fd5b505af115801561180c573d5f803e3d5ffd5b505050505050565b6103e86118236009600a612068565b611831906319133850612076565b61183c906005612076565b6118469190612101565b6003556103e86118586009600a612068565b611866906319133850612076565b611871906005612076565b61187b9190612101565b600455600f805460ff1916600117905543600255565b600b546001600160a01b031681156118a657505f5b6118af84611c46565b600c5460405163f305d71960e01b8152306004820152602481018690525f6044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990859060c40160606040518083038185885af115801561191a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061193f91906121ea565b50505050505050565b600f805461ff001916610100179055305f908152600760205260408120549050600554811015801561197c5750600f5460ff165b156119ef57600654811061198f57506006545b8061199c6009600a612068565b8111156119ac576119ac816116d4565b4780156119ec576001546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156119ea573d5f803e3d5ffd5b505b50505b50600f805461ff0019169055565b600f545f9060019060ff168015611a2c57506001600160a01b0385165f908152600a602052604090205460ff16155b8015611a5057506001600160a01b0384165f908152600a602052604090205460ff16155b1561070557600354831115611a6657505f610705565b6001600160a01b0384165f908152600e602052604090205460ff16158015611ab157506004546001600160a01b0385165f90815260076020526040902054611aaf908590612120565b115b1561070557505f949350505050565b600f545f90819060ff161580611aed57506001600160a01b0385165f9081526009602052604090205460ff165b80611b0f57506001600160a01b0384165f9081526009602052604090205460ff165b15611b1b57505f610705565b6001600160a01b0385165f908152600e602052604090205460ff1615611bfa575f5460025460ff600160b81b8304811692611b6192600160b01b90910490911690612120565b611b6b9190612120565b4310611b9b575f54606490611b8a90600160c01b900460ff1685612076565b611b949190612101565b9050610705565b5f54600254611bb491600160b01b900460ff1690612120565b4310611bd3575f54606490611b8a90600160a81b900460ff1685612076565b6002544310611bf5575f54606490611b8a90600160a01b900460ff1685612076565b610705565b6001600160a01b0384165f908152600e602052604090205460ff1615610705575f54606490611c3390600160c81b900460ff1685612076565b611c3d9190612101565b95945050505050565b305f908152600860209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611ce557305f818152600860209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b5f6020808352835180828501525f5b81811015611d1357858101830151858201604001528201611cf7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611ce5575f80fd5b5f8060408385031215611d58575f80fd5b8235611d6381611d33565b946020939093013593505050565b5f805f60608486031215611d83575f80fd5b8335611d8e81611d33565b92506020840135611d9e81611d33565b929592945050506040919091013590565b803560ff81168114611dbf575f80fd5b919050565b80358015158114611dbf575f80fd5b5f8060408385031215611de4575f80fd5b611ded83611daf565b9150611dfb60208401611dc4565b90509250929050565b803561ffff81168114611dbf575f80fd5b5f8060408385031215611e26575f80fd5b611e2f83611e04565b9150611dfb60208401611e04565b5f60208284031215611e4d575f80fd5b5035919050565b5f8060408385031215611e65575f80fd5b611e6e83611daf565b9150611dfb60208401611daf565b5f805f60608486031215611e8e575f80fd5b8335611e9981611d33565b9250611ea760208501611dc4565b9150611eb560408501611dc4565b90509250925092565b5f60208284031215611ece575f80fd5b813561102681611d33565b803563ffffffff81168114611dbf575f80fd5b5f805f8060808587031215611eff575f80fd5b611f0885611ed9565b9350611f1660208601611ed9565b9250611f2460408601611ed9565b9150611f3260608601611ed9565b905092959194509250565b5f8060408385031215611f4e575f80fd5b8235611f5981611d33565b91506020830135611f6981611d33565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611fc257815f1904821115611fa857611fa8611f74565b80851615611fb557918102915b93841c9390800290611f8d565b509250929050565b5f82611fd857506001610643565b81611fe457505f610643565b8160018114611ffa576002811461200457612020565b6001915050610643565b60ff84111561201557612015611f74565b50506001821b610643565b5060208310610133831016604e8410600b8410161715612043575081810a610643565b61204d8383611f88565b805f190482111561206057612060611f74565b029392505050565b5f61102660ff841683611fca565b808202811582820484141761064357610643611f74565b60208082526010908201526f2a3930b234b733903737ba1037b832b760811b604082015260600190565b8181038181111561064357610643611f74565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b5f8261211b57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561064357610643611f74565b60ff818116838216019081111561064357610643611f74565b5f6020828403121561215c575f80fd5b815161102681611d33565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156121c95784516001600160a01b0316835293830193918301916001016121a4565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156121fc575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122064052950adbaa8def243662368279b42ea53f9ae6570ceaef7df45da90980a5c64736f6c63430008150033

Deployed Bytecode

0x6080604052600436106101c8575f3560e01c806370a08231116100f257806395d89b4111610092578063dd62ed3e11610062578063dd62ed3e1461055e578063e8078d94146105a2578063f2fde38b146105aa578063f8b45b05146105c9575f80fd5b806395d89b41146104e1578063a6097b0a1461050c578063a9059cbb1461052b578063c3f70b521461054a575f80fd5b8063848b86e3116100cd578063848b86e31461045b5780638a8c523c1461047a5780638d3e6e401461048e5780638da5cb5b146104c5575f80fd5b806370a08231146103e2578063715018a61461041657806375f0a8741461042a575f80fd5b8063368f4800116101685780634d4ce935116101385780634d4ce935146103595780634fcd24461461036d57806357ff135a1461038c5780635a90a49e146103ab575f80fd5b8063368f4800146102ea57806342966c681461030957806346b8983414610328578063470624021461033c575f80fd5b806323b872dd116101a357806323b872dd1461026c5780632b14ca561461028b5780632fb528ba146102b6578063313ce567146102d7575f80fd5b806306fdde03146101d3578063095ea7b31461021b57806318160ddd1461024a575f80fd5b366101cf57005b5f80fd5b3480156101de575f80fd5b5060408051808201909152600e81526d050726f6f66206f66205472756d760941b60208201525b6040516102129190611ce8565b60405180910390f35b348015610226575f80fd5b5061023a610235366004611d47565b6105dd565b6040519015158152602001610212565b348015610255575f80fd5b5061025e610649565b604051908152602001610212565b348015610277575f80fd5b5061023a610286366004611d71565b610669565b348015610296575f80fd5b505f54600160c81b900460ff165b60405160ff9091168152602001610212565b3480156102c1575f80fd5b506102d56102d0366004611dd3565b61070d565b005b3480156102e2575f80fd5b5060096102a4565b3480156102f5575f80fd5b506102d5610304366004611e15565b610868565b348015610314575f80fd5b506102d5610323366004611e3d565b6109a8565b348015610333575f80fd5b5060055461025e565b348015610347575f80fd5b505f54600160c01b900460ff166102a4565b348015610364575f80fd5b5060065461025e565b348015610378575f80fd5b506102d5610387366004611e54565b610afb565b348015610397575f80fd5b506102d56103a6366004611e7c565b610ba9565b3480156103b6575f80fd5b5061023a6103c5366004611ebe565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156103ed575f80fd5b5061025e6103fc366004611ebe565b6001600160a01b03165f9081526007602052604090205490565b348015610421575f80fd5b506102d5610c7c565b348015610435575f80fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610212565b348015610466575f80fd5b506102d5610475366004611ebe565b610ce9565b348015610485575f80fd5b506102d5610dc8565b348015610499575f80fd5b5061023a6104a8366004611ebe565b6001600160a01b03165f908152600a602052604090205460ff1690565b3480156104d0575f80fd5b505f546001600160a01b0316610443565b3480156104ec575f80fd5b506040805180820190915260038152621413d560ea1b6020820152610205565b348015610517575f80fd5b506102d5610526366004611eec565b610e40565b348015610536575f80fd5b5061023a610545366004611d47565b610ff5565b348015610555575f80fd5b5060035461025e565b348015610569575f80fd5b5061025e610578366004611f3d565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b6102d561102d565b3480156105b5575f80fd5b506102d56105c4366004611ebe565b61136b565b3480156105d4575f80fd5b5060045461025e565b335f8181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106379086815260200190565b60405180910390a35060015b92915050565b5f6106566009600a612068565b610664906319133850612076565b905090565b5f610673846113e7565b6106985760405162461bcd60e51b815260040161068f9061208d565b60405180910390fd5b6001600160a01b0384165f9081526008602090815260408083203384529091529020545f19146106fa576001600160a01b0384165f908152600860209081526040808320338452909152812080548492906106f49084906120b7565b90915550505b61070584848461144a565b949350505050565b5f546001600160a01b031633146107365760405162461bcd60e51b815260040161068f906120ca565b600f805461ff001916610100179055606460ff831611156107995760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000604482015260640161068f565b305f908152600760205260408120546064906107b99060ff861690612076565b6107c39190612101565b90506107d16009600a612068565b8111156107e1576107e1816116d4565b811561085857478061081e5760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b604482015260640161068f565b6001546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610855573d5f803e3d5ffd5b50505b5050600f805461ff001916905550565b5f546001600160a01b031633146108915760405162461bcd60e51b815260040161068f906120ca565b5f6103e861ffff84166108a66009600a612068565b6108b4906319133850612076565b6108be9190612076565b6108c89190612101565b6108d3906001612120565b90506003548110156109145760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b604482015260640161068f565b60038190555f6103e861ffff841661092e6009600a612068565b61093c906319133850612076565b6109469190612076565b6109509190612101565b61095b906001612120565b90506004548110156109a05760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b604482015260640161068f565b600455505050565b5f546001600160a01b031633146109d15760405162461bcd60e51b815260040161068f906120ca565b335f9081526007602052604090205480821115610a225760405162461bcd60e51b815260206004820152600f60248201526e62616c616e636520746f6f206c6f7760881b604482015260640161068f565b8115610af757335f9081526007602052604081208054849290610a469084906120b7565b90915550505f80805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054849290610a85908490612120565b90915550506040518281525f9033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360405182815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a25b5050565b5f546001600160a01b03163314610b245760405162461bcd60e51b815260040161068f906120ca565b6028610b308284612133565b60ff161115610b765760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b604482015260640161068f565b5f805461ffff60c01b1916600160c01b60ff9485160260ff60c81b191617600160c81b9290931691909102919091179055565b5f546001600160a01b03163314610bd25760405162461bcd60e51b815260040161068f906120ca565b8080610bdb5750815b15610c3b576001600160a01b0383165f908152600e602052604090205460ff1615610c3b5760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b604482015260640161068f565b6001600160a01b039092165f908152600960209081526040808320805494151560ff19958616179055600a9091529020805492151592909116919091179055565b5f546001600160a01b03163314610ca55760405162461bcd60e51b815260040161068f906120ca565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b03163314610d125760405162461bcd60e51b815260040161068f906120ca565b6001600160a01b0381165f908152600e602052604090205460ff1615610d7a5760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000604482015260640161068f565b600180546001600160a01b039092166001600160a01b0319909216821781555f918252600960209081526040808420805460ff199081168517909155600a9092529092208054909216179055565b5f546001600160a01b03163314610df15760405162461bcd60e51b815260040161068f906120ca565b600f5460ff1615610e365760405162461bcd60e51b815260206004820152600f60248201526e3a3930b234b7339034b99037b832b760891b604482015260640161068f565b610e3e611814565b565b5f546001600160a01b03163314610e695760405162461bcd60e51b815260040161068f906120ca565b63ffffffff808416908516610e806009600a612068565b610e8e906319133850612076565b610e989190612076565b610ea29190612101565b60055563ffffffff808216908316610ebc6009600a612068565b610eca906319133850612076565b610ed49190612076565b610ede9190612101565b60068190556005541115610f245760405162461bcd60e51b815260206004820152600d60248201526c26b4b717a6b0bc1032b93937b960991b604482015260640161068f565b620186a0610f346009600a612068565b610f42906319133850612076565b610f4c9190612101565b60065411610f8a5760405162461bcd60e51b815260206004820152600b60248201526a4d617820746f6f206c6f7760a81b604482015260640161068f565b6064610f986009600a612068565b610fa6906319133850612076565b610fb09190612101565b60065410610fef5760405162461bcd60e51b815260206004820152600c60248201526b09ac2f040e8dede40d0d2ced60a31b604482015260640161068f565b50505050565b5f610fff336113e7565b61101b5760405162461bcd60e51b815260040161068f9061208d565b61102633848461144a565b9392505050565b5f546001600160a01b031633146110565760405162461bcd60e51b815260040161068f906120ca565b600f805461ff001916610100179055600d546001600160a01b0316156110aa5760405162461bcd60e51b81526020600482015260096024820152684c502065786973747360b81b604482015260640161068f565b600f5460ff16156110ef5760405162461bcd60e51b815260206004820152600f60248201526e3a3930b234b7339034b99037b832b760891b604482015260640161068f565b5f3411806110fc57505f47115b6111485760405162461bcd60e51b815260206004820152601d60248201527f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000604482015260640161068f565b305f9081526007602052604090205461119b5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81a5b8818dbdb9d1c9858dd605a1b604482015260640161068f565b600c5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120f919061214c565b6001600160a01b031663c9c6539630600c5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611292919061214c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156112dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611300919061214c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055305f9081526007602052604081205461133a914790611891565b600d546001600160a01b03165f908152600e60205260409020805460ff19166001179055600f805461ff0019169055565b5f546001600160a01b031633146113945760405162461bcd60e51b815260040161068f906120ca565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b600f545f90819060ff16156113fe57506001610643565b6001600160a01b0383165f9081526009602052604090205460ff16801561143c57506001600160a01b0383165f908152600a602052604090205460ff165b156106435750600192915050565b5f6001600160a01b0384166114a15760405162461bcd60e51b815260206004820152601d60248201527f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000604482015260640161068f565b600f5460ff16611505576001600160a01b0384165f9081526009602052604090205460ff1680156114e957506001600160a01b0384165f908152600a602052604090205460ff165b6115055760405162461bcd60e51b815260040161068f9061208d565b600f54610100900460ff1615801561153457506001600160a01b0383165f908152600e602052604090205460ff165b1561154157611541611948565b6001600160a01b038416301480159061156357506001600160a01b0383163014155b801561157c57505f546001600160a01b03858116911614155b156115cc5761158c8484846119fd565b6115cc5760405162461bcd60e51b815260206004820152601160248201527054582065786365656473206c696d69747360781b604482015260640161068f565b5f6115d8858585611ac0565b90505f6115e582856120b7565b6001600160a01b0387165f9081526007602052604090205490915061160b9085906120b7565b6001600160a01b0387165f90815260076020526040902055811561164d57305f9081526007602052604081208054849290611647908490612120565b90915550505b6001600160a01b0385165f9081526007602052604081208054839290611674908490612120565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516116c091815260200190565b60405180910390a350600195945050505050565b6116dd81611c46565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061171057611710612167565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178b919061214c565b8160018151811061179e5761179e612167565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b815291169063791ac947906117e39085905f9086903090429060040161217b565b5f604051808303815f87803b1580156117fa575f80fd5b505af115801561180c573d5f803e3d5ffd5b505050505050565b6103e86118236009600a612068565b611831906319133850612076565b61183c906005612076565b6118469190612101565b6003556103e86118586009600a612068565b611866906319133850612076565b611871906005612076565b61187b9190612101565b600455600f805460ff1916600117905543600255565b600b546001600160a01b031681156118a657505f5b6118af84611c46565b600c5460405163f305d71960e01b8152306004820152602481018690525f6044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990859060c40160606040518083038185885af115801561191a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061193f91906121ea565b50505050505050565b600f805461ff001916610100179055305f908152600760205260408120549050600554811015801561197c5750600f5460ff165b156119ef57600654811061198f57506006545b8061199c6009600a612068565b8111156119ac576119ac816116d4565b4780156119ec576001546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156119ea573d5f803e3d5ffd5b505b50505b50600f805461ff0019169055565b600f545f9060019060ff168015611a2c57506001600160a01b0385165f908152600a602052604090205460ff16155b8015611a5057506001600160a01b0384165f908152600a602052604090205460ff16155b1561070557600354831115611a6657505f610705565b6001600160a01b0384165f908152600e602052604090205460ff16158015611ab157506004546001600160a01b0385165f90815260076020526040902054611aaf908590612120565b115b1561070557505f949350505050565b600f545f90819060ff161580611aed57506001600160a01b0385165f9081526009602052604090205460ff165b80611b0f57506001600160a01b0384165f9081526009602052604090205460ff165b15611b1b57505f610705565b6001600160a01b0385165f908152600e602052604090205460ff1615611bfa575f5460025460ff600160b81b8304811692611b6192600160b01b90910490911690612120565b611b6b9190612120565b4310611b9b575f54606490611b8a90600160c01b900460ff1685612076565b611b949190612101565b9050610705565b5f54600254611bb491600160b01b900460ff1690612120565b4310611bd3575f54606490611b8a90600160a81b900460ff1685612076565b6002544310611bf5575f54606490611b8a90600160a01b900460ff1685612076565b610705565b6001600160a01b0384165f908152600e602052604090205460ff1615610705575f54606490611c3390600160c81b900460ff1685612076565b611c3d9190612101565b95945050505050565b305f908152600860209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611ce557305f818152600860209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b5f6020808352835180828501525f5b81811015611d1357858101830151858201604001528201611cf7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611ce5575f80fd5b5f8060408385031215611d58575f80fd5b8235611d6381611d33565b946020939093013593505050565b5f805f60608486031215611d83575f80fd5b8335611d8e81611d33565b92506020840135611d9e81611d33565b929592945050506040919091013590565b803560ff81168114611dbf575f80fd5b919050565b80358015158114611dbf575f80fd5b5f8060408385031215611de4575f80fd5b611ded83611daf565b9150611dfb60208401611dc4565b90509250929050565b803561ffff81168114611dbf575f80fd5b5f8060408385031215611e26575f80fd5b611e2f83611e04565b9150611dfb60208401611e04565b5f60208284031215611e4d575f80fd5b5035919050565b5f8060408385031215611e65575f80fd5b611e6e83611daf565b9150611dfb60208401611daf565b5f805f60608486031215611e8e575f80fd5b8335611e9981611d33565b9250611ea760208501611dc4565b9150611eb560408501611dc4565b90509250925092565b5f60208284031215611ece575f80fd5b813561102681611d33565b803563ffffffff81168114611dbf575f80fd5b5f805f8060808587031215611eff575f80fd5b611f0885611ed9565b9350611f1660208601611ed9565b9250611f2460408601611ed9565b9150611f3260608601611ed9565b905092959194509250565b5f8060408385031215611f4e575f80fd5b8235611f5981611d33565b91506020830135611f6981611d33565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611fc257815f1904821115611fa857611fa8611f74565b80851615611fb557918102915b93841c9390800290611f8d565b509250929050565b5f82611fd857506001610643565b81611fe457505f610643565b8160018114611ffa576002811461200457612020565b6001915050610643565b60ff84111561201557612015611f74565b50506001821b610643565b5060208310610133831016604e8410600b8410161715612043575081810a610643565b61204d8383611f88565b805f190482111561206057612060611f74565b029392505050565b5f61102660ff841683611fca565b808202811582820484141761064357610643611f74565b60208082526010908201526f2a3930b234b733903737ba1037b832b760811b604082015260600190565b8181038181111561064357610643611f74565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b5f8261211b57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561064357610643611f74565b60ff818116838216019081111561064357610643611f74565b5f6020828403121561215c575f80fd5b815161102681611d33565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156121c95784516001600160a01b0316835293830193918301916001016121a4565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156121fc575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122064052950adbaa8def243662368279b42ea53f9ae6570ceaef7df45da90980a5c64736f6c63430008150033

Deployed Bytecode Sourcemap

2515:12649:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5111:80;;;;;;;;;;-1:-1:-1;5183:5:0;;;;;;;;;;;;-1:-1:-1;;;5183:5:0;;;;5111:80;;;;;;;:::i;:::-;;;;;;;;5449:216;;;;;;;;;;-1:-1:-1;5449:216:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;5449:216:0;1023:187:1;4841:88:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;4841:88:0;1215:177:1;5906:371:0;;;;;;;;;;-1:-1:-1;5906:371:0;;;;;:::i;:::-;;:::i;11178:86::-;;;;;;;;;;-1:-1:-1;11219:5:0;11244:12;-1:-1:-1;;;11244:12:0;;;;11178:86;;;2030:4:1;2018:17;;;2000:36;;1988:2;1973:18;11178:86:0;1858:184:1;14165:563:0;;;;;;;;;;-1:-1:-1;14165:563:0;;;;;:::i;:::-;;:::i;:::-;;4935:80;;;;;;;;;;-1:-1:-1;2591:1:0;4935:80;;12235:462;;;;;;;;;;-1:-1:-1;12235:462:0;;;;;:::i;:::-;;:::i;14736:425::-;;;;;;;;;;-1:-1:-1;14736:425:0;;;;;:::i;:::-;;:::i;12041:90::-;;;;;;;;;;-1:-1:-1;12112:11:0;;12041:90;;11088:84;;;;;;;;;;-1:-1:-1;11128:5:0;11153:11;-1:-1:-1;;;11153:11:0;;;;11088:84;;12137:90;;;;;;;;;;-1:-1:-1;12208:11:0;;12137:90;;11272:183;;;;;;;;;;-1:-1:-1;11272:183:0;;;;;:::i;:::-;;:::i;10830:250::-;;;;;;;;;;-1:-1:-1;10830:250:0;;;;;:::i;:::-;;:::i;10592:110::-;;;;;;;;;;-1:-1:-1;10592:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;10679:15:0;10655:4;10679:15;;;:7;:15;;;;;;;;;10592:110;5197:105;;;;;;;;;;-1:-1:-1;5197:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;5281:18:0;5263:7;5281:18;;;:9;:18;;;;;;;5197:105;2322:137;;;;;;;;;;;;;:::i;11465:101::-;;;;;;;;;;-1:-1:-1;11542:16:0;;-1:-1:-1;;;;;11542:16:0;11465:101;;;-1:-1:-1;;;;;4299:32:1;;;4281:51;;4269:2;4254:18;11465:101:0;4135:203:1;11574:254:0;;;;;;;;;;-1:-1:-1;11574:254:0;;;;;:::i;:::-;;:::i;7594:129::-;;;;;;;;;;;;;:::i;10709:114::-;;;;;;;;;;-1:-1:-1;10709:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;10798:17:0;10774:4;10798:17;;;:9;:17;;;;;;;;;10709:114;2072:81;;;;;;;;;;-1:-1:-1;2110:7:0;2138:6;-1:-1:-1;;;;;2138:6:0;2072:81;;5021:84;;;;;;;;;;-1:-1:-1;5095:7:0;;;;;;;;;;;;-1:-1:-1;;;5095:7:0;;;;5021:84;;12705:436;;;;;;;;;;-1:-1:-1;12705:436:0;;;;;:::i;:::-;;:::i;5673:225::-;;;;;;;;;;-1:-1:-1;5673:225:0;;;;;:::i;:::-;;:::i;11937:96::-;;;;;;;;;;-1:-1:-1;12013:12:0;;11937:96;;5308:133;;;;;;;;;;-1:-1:-1;5308:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;5410:19:0;;;5392:7;5410:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;5308:133;6610:583;;;:::i;2159:157::-;;;;;;;;;;-1:-1:-1;2159:157:0;;;;;:::i;:::-;;:::i;11836:95::-;;;;;;;;;;-1:-1:-1;11907:16:0;;11836:95;;5449:216;5553:10;5524:4;5541:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5541:32:0;;;;;;;;;;:41;;;5598:37;5524:4;;5541:32;;5598:37;;;;5576:6;1361:25:1;;1349:2;1334:18;;1215:177;5598:37:0;;;;;;;;-1:-1:-1;5653:4:0;5449:216;;;;;:::o;4841:88::-;4896:7;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;;:9;:27;:::i;:::-;4907:19;;4841:88;:::o;5906:371::-;6006:4;6031:25;6049:6;6031:17;:25::i;:::-;6023:54;;;;-1:-1:-1;;;6023:54:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;6091:19:0;;;;;;:11;:19;;;;;;;;6111:10;6091:31;;;;;;;;-1:-1:-1;;6091:52:0;6088:124;;-1:-1:-1;;;;;6159:19:0;;;;;;:11;:19;;;;;;;;6179:10;6159:31;;;;;;;:41;;6194:6;;6159:19;:41;;6194:6;;6159:41;:::i;:::-;;;;-1:-1:-1;;6088:124:0;6229:40;6243:6;6251:9;6262:6;6229:13;:40::i;:::-;6222:47;5906:371;-1:-1:-1;;;;5906:371:0:o;14165:563::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;4052:10:::1;:17:::0;;-1:-1:-1;;4052:17:0::1;;;::::0;;14303:3:::2;4052:17:::1;14283:23:::0;::::2;;;14275:62;;;::::0;-1:-1:-1;;;14275:62:0;;8291:2:1;14275:62:0::2;::::0;::::2;8273:21:1::0;8330:2;8310:18;;;8303:30;8369:28;8349:18;;;8342:56;8415:18;;14275:62:0::2;8089:350:1::0;14275:62:0::2;14389:4;14348:20;5281:18:::0;;;:9;:18;;;;;;14417:3:::2;::::0;14371:43:::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;:49;;;;:::i;:::-;14348:72:::0;-1:-1:-1;14450:15:0::2;2591:1;14450:2;:15;:::i;:::-;14435:12;:30;14431:97;;;14482:34;14503:12;14482:20;:34::i;:::-;14542:7;14538:183;;;14588:21;14632:14:::0;14624:33:::2;;;::::0;-1:-1:-1;;;14624:33:0;;8868:2:1;14624:33:0::2;::::0;::::2;8850:21:1::0;8907:1;8887:18;;;8880:29;-1:-1:-1;;;8925:18:1;;;8918:36;8971:18;;14624:33:0::2;8666:329:1::0;14624:33:0::2;14672:16;::::0;:37:::2;::::0;-1:-1:-1;;;;;14672:16:0;;::::2;::::0;:37;::::2;;;::::0;14698:10;;14672:16:::2;:37:::0;:16;:37;14698:10;14672:16;:37;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;14551:170;14538:183;-1:-1:-1::0;;4094:10:0::1;:18:::0;;-1:-1:-1;;4094:18:0::1;::::0;;-1:-1:-1;14165:563:0:o;12235:462::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;12341:16:::1;12400:4;12360:37;::::0;::::1;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;::::0;:9:::1;:27;:::i;:::-;12360:37;;;;:::i;:::-;:44;;;;:::i;:::-;:48;::::0;12407:1:::1;12360:48;:::i;:::-;12341:67;;12439:12;;12427:8;:24;;12419:47;;;::::0;-1:-1:-1;;;12419:47:0;;9332:2:1;12419:47:0::1;::::0;::::1;9314:21:1::0;9371:2;9351:18;;;9344:30;-1:-1:-1;;;9390:18:1;;;9383:40;9440:18;;12419:47:0::1;9130:334:1::0;12419:47:0::1;12477:12;:23:::0;;;12511:20:::1;12569:4;12534:32;::::0;::::1;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;::::0;:9:::1;:27;:::i;:::-;12534:32;;;;:::i;:::-;:39;;;;:::i;:::-;:43;::::0;12576:1:::1;12534:43;:::i;:::-;12511:66;;12612:16;;12596:12;:32;;12588:59;;;::::0;-1:-1:-1;;;12588:59:0;;9671:2:1;12588:59:0::1;::::0;::::1;9653:21:1::0;9710:2;9690:18;;;9683:30;-1:-1:-1;;;9729:18:1;;;9722:44;9783:18;;12588:59:0::1;9469:338:1::0;12588:59:0::1;12658:16;:31:::0;-1:-1:-1;;;12235:462:0:o;14736:425::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;14833:10:::1;14796:24;5281:18:::0;;;:9;:18;;;;;;14863:26;;::::1;;14855:54;;;::::0;-1:-1:-1;;;14855:54:0;;10014:2:1;14855:54:0::1;::::0;::::1;9996:21:1::0;10053:2;10033:18;;;10026:30;-1:-1:-1;;;10072:18:1;;;10065:45;10127:18;;14855:54:0::1;9812:339:1::0;14855:54:0::1;14925:10:::0;;14920:234:::1;;14963:10;14953:21;::::0;;;:9:::1;:21;::::0;;;;:31;;14978:6;;14953:21;:31:::1;::::0;14978:6;;14953:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;14999:21:0::1;::::0;;;:9:::1;:21;::::0;;:31;;15024:6;;14999:21;:31:::1;::::0;15024:6;;14999:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;15050:40:0::1;::::0;1361:25:1;;;15079:1:0::1;::::0;15059:10:::1;::::0;15050:40:::1;::::0;1349:2:1;1334:18;15050:40:0::1;;;;;;;15110:32;::::0;1361:25:1;;;15123:10:0::1;::::0;15110:32:::1;::::0;1349:2:1;1334:18;15110:32:0::1;;;;;;;14920:234;14785:376;14736:425:::0;:::o;11272:183::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;11364:2:::1;11350:10;11356:4:::0;11350:3;:10:::1;:::i;:::-;:16;;;;11342:47;;;::::0;-1:-1:-1;;;11342:47:0;;10511:2:1;11342:47:0::1;::::0;::::1;10493:21:1::0;10550:2;10530:18;;;10523:30;-1:-1:-1;;;10569:18:1;;;10562:48;10627:18;;11342:47:0::1;10309:342:1::0;11342:47:0::1;11400:11;:17:::0;;-1:-1:-1;;;;11428:19:0;-1:-1:-1;;;11400:17:0::1;::::0;;::::1;;-1:-1:-1::0;;;;11428:19:0;;-1:-1:-1;;;11428:19:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;11272:183::o;10830:250::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;10927:8:::1;:18;;;;10939:6;10927:18;10923:72;;;-1:-1:-1::0;;;;;10958:13:0;::::1;;::::0;;;:5:::1;:13;::::0;;;;;::::1;;10957:14;10949:43;;;::::0;-1:-1:-1;;;10949:43:0;;10858:2:1;10949:43:0::1;::::0;::::1;10840:21:1::0;10897:2;10877:18;;;10870:30;-1:-1:-1;;;10916:18:1;;;10909:46;10972:18;;10949:43:0::1;10656:340:1::0;10949:43:0::1;-1:-1:-1::0;;;;;11005:17:0;;::::1;;::::0;;;:7:::1;:17;::::0;;;;;;;:26;;;::::1;;-1:-1:-1::0;;11005:26:0;;::::1;;::::0;;11042:9:::1;:19:::0;;;;;:30;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;10830:250::o;2322:137::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;2399:1:::1;2382:19:::0;;-1:-1:-1;;;;;;2382:19:0::1;::::0;;2418:32:::1;::::0;4281:51:1;;;2418:32:0::1;::::0;4269:2:1;4254:18;2418:32:0::1;;;;;;;2322:137::o:0;11574:254::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11654:16:0;::::1;;::::0;;;:5:::1;:16;::::0;;;;;::::1;;11653:17;11645:53;;;::::0;-1:-1:-1;;;11645:53:0;;11203:2:1;11645:53:0::1;::::0;::::1;11185:21:1::0;11242:2;11222:18;;;11215:30;11281:25;11261:18;;;11254:53;11324:18;;11645:53:0::1;11001:347:1::0;11645:53:0::1;11709:16;:37:::0;;-1:-1:-1;;;;;11709:37:0;;::::1;-1:-1:-1::0;;;;;;11709:37:0;;::::1;::::0;::::1;::::0;;:16:::1;11757:18:::0;;;:7:::1;:18;::::0;;;;;;;:25;;-1:-1:-1;;11757:25:0;;::::1;::::0;::::1;::::0;;;11793:9:::1;:20:::0;;;;;;:27;;;;::::1;;::::0;;11574:254::o;7594:129::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;7658:12:::1;::::0;::::1;;7657:13;7649:41;;;::::0;-1:-1:-1;;;7649:41:0;;11555:2:1;7649:41:0::1;::::0;::::1;11537:21:1::0;11594:2;11574:18;;;11567:30;-1:-1:-1;;;11613:18:1;;;11606:45;11668:18;;7649:41:0::1;11353:339:1::0;7649:41:0::1;7701:14;:12;:14::i;:::-;7594:129::o:0;12705:436::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;12841:36:::1;::::0;;::::1;::::0;:23;::::1;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;::::0;:9:::1;:27;:::i;:::-;12841:23;;;;:::i;:::-;:36;;;;:::i;:::-;12827:11;:50:::0;12902:36:::1;::::0;;::::1;::::0;:23;::::1;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;::::0;:9:::1;:27;:::i;:::-;12902:23;;;;:::i;:::-;:36;;;;:::i;:::-;12888:11;:50:::0;;;12970:11:::1;::::0;-1:-1:-1;12957:24:0::1;12949:50;;;::::0;-1:-1:-1;;;12949:50:0;;11899:2:1;12949:50:0::1;::::0;::::1;11881:21:1::0;11938:2;11918:18;;;11911:30;-1:-1:-1;;;11957:18:1;;;11950:43;12010:18;;12949:50:0::1;11697:337:1::0;12949:50:0::1;13045:6;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;::::0;:9:::1;:27;:::i;:::-;13030:21;;;;:::i;:::-;13018:11;;:33;13010:57;;;::::0;-1:-1:-1;;;13010:57:0;;12241:2:1;13010:57:0::1;::::0;::::1;12223:21:1::0;12280:2;12260:18;;;12253:30;-1:-1:-1;;;12299:18:1;;;12292:41;12350:18;;13010:57:0::1;12039:335:1::0;13010:57:0::1;13113:3;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;::::0;:9:::1;:27;:::i;:::-;13098:18;;;;:::i;:::-;13086:11;;:30;13078:55;;;::::0;-1:-1:-1;;;13078:55:0;;12581:2:1;13078:55:0::1;::::0;::::1;12563:21:1::0;12620:2;12600:18;;;12593:30;-1:-1:-1;;;12639:18:1;;;12632:42;12691:18;;13078:55:0::1;12379:336:1::0;13078:55:0::1;12705:436:::0;;;;:::o;5673:225::-;5753:4;5778:29;5796:10;5778:17;:29::i;:::-;5770:58;;;;-1:-1:-1;;;5770:58:0;;;;;;;:::i;:::-;5846:44;5860:10;5872:9;5883:6;5846:13;:44::i;:::-;5839:51;5673:225;-1:-1:-1;;;5673:225:0:o;6610:583::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;4052:10:::1;:17:::0;;-1:-1:-1;;4052:17:0::1;;;::::0;;6692:10:::2;::::0;-1:-1:-1;;;;;6692:10:0::2;:24:::0;6684:46:::2;;;::::0;-1:-1:-1;;;6684:46:0;;12922:2:1;6684:46:0::2;::::0;::::2;12904:21:1::0;12961:1;12941:18;;;12934:29;-1:-1:-1;;;12979:18:1;;;12972:39;13028:18;;6684:46:0::2;12720:332:1::0;6684:46:0::2;6750:12;::::0;::::2;;6749:13;6741:41;;;::::0;-1:-1:-1;;;6741:41:0;;11555:2:1;6741:41:0::2;::::0;::::2;11537:21:1::0;11594:2;11574:18;;;11567:30;-1:-1:-1;;;11613:18:1;;;11606:45;11668:18;;6741:41:0::2;11353:339:1::0;6741:41:0::2;6813:1;6801:9;:13;:40;;;;6840:1;6818:21;:23;6801:40;6793:82;;;::::0;-1:-1:-1;;;6793:82:0;;13259:2:1;6793:82:0::2;::::0;::::2;13241:21:1::0;13298:2;13278:18;;;13271:30;13337:31;13317:18;;;13310:59;13386:18;;6793:82:0::2;13057:353:1::0;6793:82:0::2;6912:4;6919:1;6894:24:::0;;;:9:::2;:24;::::0;;;;;6886:60:::2;;;::::0;-1:-1:-1;;;6886:60:0;;13617:2:1;6886:60:0::2;::::0;::::2;13599:21:1::0;13656:2;13636:18;;;13629:30;-1:-1:-1;;;13675:18:1;;;13668:51;13736:18;;6886:60:0::2;13415:345:1::0;6886:60:0::2;6988:18;;;;;;;;;-1:-1:-1::0;;;;;6988:18:0::2;-1:-1:-1::0;;;;;6988:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6970:58:0::2;;7037:4;7044:18;;;;;;;;;-1:-1:-1::0;;;;;7044:18:0::2;-1:-1:-1::0;;;;;7044:23:0::2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6970:100;::::0;-1:-1:-1;;;;;;6970:100:0::2;::::0;;;;;;-1:-1:-1;;;;;14251:15:1;;;6970:100:0::2;::::0;::::2;14233:34:1::0;14303:15;;14283:18;;;14276:43;14168:18;;6970:100:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6957:10;:113:::0;;-1:-1:-1;;;;;;6957:113:0::2;-1:-1:-1::0;;;;;6957:113:0;;;::::2;::::0;;;::::2;::::0;;7113:4:::2;-1:-1:-1::0;7095:24:0;;;:9:::2;:24;::::0;;;;;7081:69:::2;::::0;7121:21:::2;::::0;7081:13:::2;:69::i;:::-;7167:10;::::0;-1:-1:-1;;;;;7167:10:0::2;7161:17;::::0;;;:5:::2;:17;::::0;;;;:24;;-1:-1:-1;;7161:24:0::2;7181:4;7161:24;::::0;;4094:10:::1;:18:::0;;-1:-1:-1;;4094:18:0::1;::::0;;6610:583::o;2159:157::-;2009:6;;-1:-1:-1;;;;;2009:6:0;1995:10;:20;1987:57;;;;-1:-1:-1;;;1987:57:0;;;;;;;:::i;:::-;2243:6:::1;:17:::0;;-1:-1:-1;;;;;;2243:17:0::1;-1:-1:-1::0;;;;;2243:17:0;::::1;::::0;;::::1;::::0;;;2277:30:::1;::::0;4281:51:1;;;2277:30:0::1;::::0;4269:2:1;4254:18;2277:30:0::1;;;;;;;2159:157:::0;:::o;9464:277::-;9585:12;;9529:4;;;;9585:12;;9580:124;;;-1:-1:-1;9616:4:0;9580:124;;;-1:-1:-1;;;;;9643:15:0;;;;;;:7;:15;;;;;;;;:36;;;;-1:-1:-1;;;;;;9662:17:0;;;;;;:9;:17;;;;;;;;9643:36;9639:65;;;-1:-1:-1;9697:4:0;9722:11;9464:277;-1:-1:-1;;9464:277:0:o;7955:934::-;8047:4;-1:-1:-1;;;;;8072:20:0;;8064:62;;;;-1:-1:-1;;;8064:62:0;;14748:2:1;8064:62:0;;;14730:21:1;14787:2;14767:18;;;14760:30;14826:31;14806:18;;;14799:59;14875:18;;8064:62:0;14546:353:1;8064:62:0;8142:12;;;;8137:89;;-1:-1:-1;;;;;8166:15:0;;;;;;:7;:15;;;;;;;;:36;;;;-1:-1:-1;;;;;;8185:17:0;;;;;;:9;:17;;;;;;;;8166:36;8158:65;;;;-1:-1:-1;;;8158:65:0;;;;;;;:::i;:::-;8242:10;;;;;;;8241:11;:31;;;;-1:-1:-1;;;;;;8256:16:0;;;;;;:5;:16;;;;;;;;8241:31;8236:64;;;8277:20;:18;:20::i;:::-;-1:-1:-1;;;;;8325:23:0;;8343:4;8325:23;;;;:53;;-1:-1:-1;;;;;;8352:26:0;;8373:4;8352:26;;8325:53;:73;;;;-1:-1:-1;8392:6:0;;-1:-1:-1;;;;;8382:16:0;;;8392:6;;8382:16;;8325:73;8320:179;;;8425:39;8438:6;8446:9;8457:6;8425:12;:39::i;:::-;8417:69;;;;-1:-1:-1;;;8417:69:0;;15106:2:1;8417:69:0;;;15088:21:1;15145:2;15125:18;;;15118:30;-1:-1:-1;;;15164:18:1;;;15157:47;15221:18;;8417:69:0;14904:341:1;8417:69:0;8509:18;8530:40;8544:6;8552:9;8563:6;8530:13;:40::i;:::-;8509:61;-1:-1:-1;8581:23:0;8607:19;8509:61;8607:6;:19;:::i;:::-;-1:-1:-1;;;;;8657:17:0;;;;;;:9;:17;;;;;;8581:45;;-1:-1:-1;8657:26:0;;8677:6;;8657:26;:::i;:::-;-1:-1:-1;;;;;8637:17:0;;;;;;:9;:17;;;;;:46;8699:14;;8694:65;;8736:4;8718:24;;;;:9;:24;;;;;:38;;8746:10;;8718:24;:38;;8746:10;;8718:38;:::i;:::-;;;;-1:-1:-1;;8694:65:0;-1:-1:-1;;;;;8769:20:0;;;;;;:9;:20;;;;;:39;;8793:15;;8769:20;:39;;8793:15;;8769:39;:::i;:::-;;;;;;;;8841:9;-1:-1:-1;;;;;8824:35:0;8833:6;-1:-1:-1;;;;;8824:35:0;;8852:6;8824:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;8824:35:0;;;;;;;;-1:-1:-1;8877:4:0;;7955:934;-1:-1:-1;;;;;7955:934:0:o;13793:364::-;13860:24;13875:8;13860:14;:24::i;:::-;13923:16;;;13937:1;13923:16;;;;;;;;13895:25;;13923:16;;;;;;;;;;-1:-1:-1;13923:16:0;13895:44;;13972:4;13950:8;13959:1;13950:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13950:27:0;;;:11;;;;;;;;;;:27;;;;13993:18;;:25;;;-1:-1:-1;;;13993:25:0;;;;:18;;;;;:23;;:25;;;;;13950:11;;13993:25;;;;;:18;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13979:8;13988:1;13979:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13979:39:0;;;:11;;;;;;;;;:39;14029:18;;:120;;-1:-1:-1;;;14029:120:0;;:18;;;:69;;:120;;14099:8;;14029:18;;14110:8;;14127:4;;14133:15;;14029:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13849:308;13793:364;:::o;7731:216::-;7813:4;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;;:9;:27;:::i;:::-;7794:16;;7809:1;7794:16;:::i;:::-;:23;;;;:::i;:::-;7775:12;:42;7867:4;2652:13;2591:1;2652:2;:13;:::i;:::-;2639:27;;:9;:27;:::i;:::-;7848:16;;7863:1;7848:16;:::i;:::-;:23;;;;:::i;:::-;7829:16;:42;7882:12;:19;;-1:-1:-1;;7882:19:0;7897:4;7882:19;;;7927:12;7912;:27;7731:216::o;7201:385::-;7331:8;;-1:-1:-1;;;;;7331:8:0;7350:50;;;;-1:-1:-1;7395:1:0;7350:50;7410:28;7425:12;7410:14;:28::i;:::-;7449:18;;:129;;-1:-1:-1;;;7449:129:0;;7516:4;7449:129;;;16840:34:1;16890:18;;;16883:34;;;7449:18:0;16933::1;;;16926:34;;;16976:18;;;16969:34;-1:-1:-1;;;;;17040:15:1;;;17019:19;;;17012:44;7561:15:0;17072:19:1;;;17065:35;7449:18:0;;;;:34;;7491:13;;16774:19:1;;7449:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;7293:293;7201:385;;;:::o;13149:636::-;4052:10;:17;;-1:-1:-1;;4052:17:0;;;;;13258:4:::1;-1:-1:-1::0;5281:18:0;;;:9;:18;;;;;;13210:54:::1;;13305:11;;13282:19;:34;;:50;;;;-1:-1:-1::0;13320:12:0::1;::::0;::::1;;13282:50;13277:501;;;13378:11;;13355:19;:34;13350:80;;-1:-1:-1::0;13416:11:0::1;::::0;13350:80:::1;13468:19:::0;13522:13:::1;2591:1;13522:2;:13;:::i;:::-;13506;:29;13502:106;;;13557:35;13578:13;13557:20;:35::i;:::-;13652:21;13691:23:::0;;13688:79:::1;;13718:16;::::0;:46:::1;::::0;-1:-1:-1;;;;;13718:16:0;;::::1;::::0;:46;::::1;;;::::0;13744:19;;13718:16:::1;:46:::0;:16;:46;13744:19;13718:16;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13688:79;13335:443;;13277:501;-1:-1:-1::0;4094:10:0;:18;;-1:-1:-1;;4094:18:0;;;13149:636::o;8897:559::-;9062:12;;9001:4;;9042;;9062:12;;:34;;;;-1:-1:-1;;;;;;9079:17:0;;;;;;:9;:17;;;;;;;;9078:18;9062:34;:59;;;;-1:-1:-1;;;;;;9101:20:0;;;;;;:9;:20;;;;;;;;9100:21;9062:59;9057:358;;;9161:12;;9144:14;:29;9139:265;;;-1:-1:-1;9215:5:0;9139:265;;;-1:-1:-1;;;;;9262:16:0;;;;;;:5;:16;;;;;;;;9261:17;:79;;;;-1:-1:-1;9323:16:0;;-1:-1:-1;;;;;9283:20:0;;;;;;:9;:20;;;;;;:37;;9306:14;;9283:37;:::i;:::-;:56;9261:79;9256:148;;;-1:-1:-1;9382:5:0;9432:16;8897:559;-1:-1:-1;;;;8897:559:0:o;9749:835::-;9900:12;;9846:7;;;;9900:12;;9899:13;;:32;;-1:-1:-1;;;;;;9916:15:0;;;;;;:7;:15;;;;;;;;9899:32;:54;;;-1:-1:-1;;;;;;9935:18:0;;;;;;:7;:18;;;;;;;;9899:54;9894:656;;;-1:-1:-1;9984:1:0;9894:656;;;-1:-1:-1;;;;;10009:13:0;;;;;;:5;:13;;;;;;;;10004:546;;;10096:16;;10062:12;;10096:16;-1:-1:-1;;;10096:16:0;;;;;10062:31;;-1:-1:-1;;;10077:16:0;;;;;;;10062:31;:::i;:::-;:50;;;;:::i;:::-;10046:12;:66;10041:400;;10155:11;;10169:3;;10146:20;;-1:-1:-1;;;10155:11:0;;;;10146:6;:20;:::i;:::-;:26;;;;:::i;:::-;10134:38;;10004:546;;10041:400;10231:16;;10216:12;;:31;;-1:-1:-1;;;10231:16:0;;;;;10216:31;:::i;:::-;10200:12;:47;10195:246;;10290:13;;10306:3;;10281:22;;-1:-1:-1;;;10290:13:0;;;;10281:6;:22;:::i;10195:246::-;10352:12;;10336;:28;10331:110;;10406:13;;10422:3;;10397:22;;-1:-1:-1;;;10406:13:0;;;;10397:6;:22;:::i;10331:110::-;10004:546;;;-1:-1:-1;;;;;10463:16:0;;;;;;:5;:16;;;;;;;;10458:92;;;10519:12;;10534:3;;10510:21;;-1:-1:-1;;;10519:12:0;;;;10510:6;:21;:::i;:::-;:27;;;;:::i;:::-;10498:39;9749:835;-1:-1:-1;;;;;9749:835:0:o;6285:317::-;6376:4;6356:26;;;;:11;:26;;;;;;;;3723:42;6356:46;;;;;;;;:61;-1:-1:-1;6351:244:0;;;6455:4;6435:26;;;;:11;:26;;;;;;;;3723:42;6435:46;;;;;;;;;;-1:-1:-1;;6435:66:0;;;;6521:62;;1361:25:1;;;3723:42:0;;6455:4;6521:62;;1334:18:1;6521:62:0;;;;;;;6351:244;6285:317;:::o;14:548:1:-;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;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:156::-;2113:20;;2173:4;2162:16;;2152:27;;2142:55;;2193:1;2190;2183:12;2142:55;2047:156;;;:::o;2208:160::-;2273:20;;2329:13;;2322:21;2312:32;;2302:60;;2358:1;2355;2348:12;2373:250;2436:6;2444;2497:2;2485:9;2476:7;2472:23;2468:32;2465:52;;;2513:1;2510;2503:12;2465:52;2536:27;2553:9;2536:27;:::i;:::-;2526:37;;2582:35;2613:2;2602:9;2598:18;2582:35;:::i;:::-;2572:45;;2373:250;;;;;:::o;2628:159::-;2695:20;;2755:6;2744:18;;2734:29;;2724:57;;2777:1;2774;2767:12;2792:256;2858:6;2866;2919:2;2907:9;2898:7;2894:23;2890:32;2887:52;;;2935:1;2932;2925:12;2887:52;2958:28;2976:9;2958:28;:::i;:::-;2948:38;;3005:37;3038:2;3027:9;3023:18;3005:37;:::i;3053:180::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;-1:-1:-1;3204:23:1;;3053:180;-1:-1:-1;3053:180:1:o;3238:252::-;3302:6;3310;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;3402:27;3419:9;3402:27;:::i;:::-;3392:37;;3448:36;3480:2;3469:9;3465:18;3448:36;:::i;3495:383::-;3566:6;3574;3582;3635:2;3623:9;3614:7;3610:23;3606:32;3603:52;;;3651:1;3648;3641:12;3603:52;3690:9;3677:23;3709:31;3734:5;3709:31;:::i;:::-;3759:5;-1:-1:-1;3783:35:1;3814:2;3799:18;;3783:35;:::i;:::-;3773:45;;3837:35;3868:2;3857:9;3853:18;3837:35;:::i;:::-;3827:45;;3495:383;;;;;:::o;3883:247::-;3942:6;3995:2;3983:9;3974:7;3970:23;3966:32;3963:52;;;4011:1;4008;4001:12;3963:52;4050:9;4037:23;4069:31;4094:5;4069:31;:::i;4343:163::-;4410:20;;4470:10;4459:22;;4449:33;;4439:61;;4496:1;4493;4486:12;4511:401;4593:6;4601;4609;4617;4670:3;4658:9;4649:7;4645:23;4641:33;4638:53;;;4687:1;4684;4677:12;4638:53;4710:28;4728:9;4710:28;:::i;:::-;4700:38;;4757:37;4790:2;4779:9;4775:18;4757:37;:::i;:::-;4747:47;;4813:37;4846:2;4835:9;4831:18;4813:37;:::i;:::-;4803:47;;4869:37;4902:2;4891:9;4887:18;4869:37;:::i;:::-;4859:47;;4511:401;;;;;;;:::o;4917:388::-;4985:6;4993;5046:2;5034:9;5025:7;5021:23;5017:32;5014:52;;;5062:1;5059;5052:12;5014:52;5101:9;5088:23;5120:31;5145:5;5120:31;:::i;:::-;5170:5;-1:-1:-1;5227:2:1;5212:18;;5199:32;5240:33;5199:32;5240:33;:::i;:::-;5292:7;5282:17;;;4917:388;;;;;:::o;5570:127::-;5631:10;5626:3;5622:20;5619:1;5612:31;5662:4;5659:1;5652:15;5686:4;5683:1;5676:15;5702:422;5791:1;5834:5;5791:1;5848:270;5869:7;5859:8;5856:21;5848:270;;;5928:4;5924:1;5920:6;5916:17;5910:4;5907:27;5904:53;;;5937:18;;:::i;:::-;5987:7;5977:8;5973:22;5970:55;;;6007:16;;;;5970:55;6086:22;;;;6046:15;;;;5848:270;;;5852:3;5702:422;;;;;:::o;6129:806::-;6178:5;6208:8;6198:80;;-1:-1:-1;6249:1:1;6263:5;;6198:80;6297:4;6287:76;;-1:-1:-1;6334:1:1;6348:5;;6287:76;6379:4;6397:1;6392:59;;;;6465:1;6460:130;;;;6372:218;;6392:59;6422:1;6413:10;;6436:5;;;6460:130;6497:3;6487:8;6484:17;6481:43;;;6504:18;;:::i;:::-;-1:-1:-1;;6560:1:1;6546:16;;6575:5;;6372:218;;6674:2;6664:8;6661:16;6655:3;6649:4;6646:13;6642:36;6636:2;6626:8;6623:16;6618:2;6612:4;6609:12;6605:35;6602:77;6599:159;;;-1:-1:-1;6711:19:1;;;6743:5;;6599:159;6790:34;6815:8;6809:4;6790:34;:::i;:::-;6860:6;6856:1;6852:6;6848:19;6839:7;6836:32;6833:58;;;6871:18;;:::i;:::-;6909:20;;6129:806;-1:-1:-1;;;6129:806:1:o;6940:140::-;6998:5;7027:47;7068:4;7058:8;7054:19;7048:4;7027:47;:::i;7085:168::-;7158:9;;;7189;;7206:15;;;7200:22;;7186:37;7176:71;;7227:18;;:::i;7258:340::-;7460:2;7442:21;;;7499:2;7479:18;;;7472:30;-1:-1:-1;;;7533:2:1;7518:18;;7511:46;7589:2;7574:18;;7258:340::o;7603:128::-;7670:9;;;7691:11;;;7688:37;;;7705:18;;:::i;7736:348::-;7938:2;7920:21;;;7977:2;7957:18;;;7950:30;8016:26;8011:2;7996:18;;7989:54;8075:2;8060:18;;7736:348::o;8444:217::-;8484:1;8510;8500:132;;8554:10;8549:3;8545:20;8542:1;8535:31;8589:4;8586:1;8579:15;8617:4;8614:1;8607:15;8500:132;-1:-1:-1;8646:9:1;;8444:217::o;9000:125::-;9065:9;;;9086:10;;;9083:36;;;9099:18;;:::i;10156:148::-;10244:4;10223:12;;;10237;;;10219:31;;10262:13;;10259:39;;;10278:18;;:::i;13765:251::-;13835:6;13888:2;13876:9;13867:7;13863:23;13859:32;13856:52;;;13904:1;13901;13894:12;13856:52;13936:9;13930:16;13955:31;13980:5;13955:31;:::i;15382:127::-;15443:10;15438:3;15434:20;15431:1;15424:31;15474:4;15471:1;15464:15;15498:4;15495:1;15488:15;15514:980;15776:4;15824:3;15813:9;15809:19;15855:6;15844:9;15837:25;15881:2;15919:6;15914:2;15903:9;15899:18;15892:34;15962:3;15957:2;15946:9;15942:18;15935:31;15986:6;16021;16015:13;16052:6;16044;16037:22;16090:3;16079:9;16075:19;16068:26;;16129:2;16121:6;16117:15;16103:29;;16150:1;16160:195;16174:6;16171:1;16168:13;16160:195;;;16239:13;;-1:-1:-1;;;;;16235:39:1;16223:52;;16330:15;;;;16295:12;;;;16271:1;16189:9;16160:195;;;-1:-1:-1;;;;;;;16411:32:1;;;;16406:2;16391:18;;16384:60;-1:-1:-1;;;16475:3:1;16460:19;16453:35;16372:3;15514:980;-1:-1:-1;;;15514:980:1:o;17111:306::-;17199:6;17207;17215;17268:2;17256:9;17247:7;17243:23;17239:32;17236:52;;;17284:1;17281;17274:12;17236:52;17313:9;17307:16;17297:26;;17363:2;17352:9;17348:18;17342:25;17332:35;;17407:2;17396:9;17392:18;17386:25;17376:35;;17111:306;;;;;:::o

Swarm Source

ipfs://64052950adbaa8def243662368279b42ea53f9ae6570ceaef7df45da90980a5c
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.