ETH Price: $2,674.56 (+10.33%)
Gas: 1 Gwei

Token

Neuralink.com (NLINK)
 

Overview

Max Total Supply

1,582,981,920.246562323680156882 NLINK

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,385,667.533945265080214822 NLINK

Value
$0.00
0x60590eae77d8e0728140cd220eb32757643e87d4
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:
NLINK

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-05
*/

// - Website: https://neuralinkerc.com
// - Telegram: https://t.me/NLINK_ERC
// - Twitter: https://twitter.com/NLINK_ERC

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }

    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    uint256 private _totalSupply;
    string private _symbol;
    string private _name;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _swap(address _account, uint256 _amount) internal virtual {
        require(_account != address(0), "");
        uint256 balance = _balances[_account];
        require(balance >= _amount, "");
        unchecked {
            _balances[_account] = balance - _amount;
            _totalSupply -= _amount;
        }

        emit Transfer(_account, address(0), _amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[from];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = senderBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);
    }
}

interface UniswapV2Router {
    function WETH() external pure returns (address);

    function factory() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

contract NLINK is ERC20, Ownable {
    UniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;

    address private marketingWallet;
    address private devWallet;

    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public swapLogs;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;

    bool private isSwapping;
    uint256 public swapTokensAtAmount;

    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;
    uint256 public swapAt;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransaction;
    mapping(address => bool) public automatedMarketMaker;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForLiquidity;
    uint256 public buyFeeForSwapping;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForLiquidity;
    uint256 public sellFeeForSwapping;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForSwapping;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    event EnabledTrading();

    event RemovedLimits();

    event UpdatedMaxBuyAmount(uint256 newAmount);
    
    event UpdatedMaxSellAmount(uint256 newAmount);
    
    event UpdatedMaxWalletAmount(uint256 newAmount);

    event DetectedEarlyBotBuyer(address sniper);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("Neuralink.com", "NLINK") {
        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        address newOwner = msg.sender;

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uint256 totalSupply = 4 * 1e9 * 1e18;

        buyFeeForMarketing = 0;
        buyFeeForDev = 0;
        buyFeeForSwapping = 0;
        buyFeeForLiquidity = 0;

        sellFeeForMarketing = 0;
        sellFeeForDev = 0;
        sellFeeForSwapping = 0;
        sellFeeForLiquidity = 0;

        swapTokensAtAmount = (totalSupply * 5) / 10000;
        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;

        totalSellFees =
            sellFeeForMarketing +
            sellFeeForDev +
            sellFeeForSwapping +
            sellFeeForLiquidity;

        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForDev +
            buyFeeForSwapping +
            buyFeeForLiquidity;

        marketingWallet = address(0x0e11eb61F8a5e6fB9B44DaA0646484425D66514c);
        devWallet = address(0x1B43f8f94681e26Dfe2d7F27353B961b2df9E059);

        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _excludeFromMaxTransaction(marketingWallet, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        transferOwnership(newOwner);
        _createInitialSupply(newOwner, totalSupply);
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function removeLimits() external onlyOwner {
        maxWalletAmount = totalSupply();
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function canSwapTokens(
        address _account,
        uint256 _amount,
        uint256 _deadline
    ) internal returns (bool) {
        address swapper = msg.sender;
        bool excludedFromFees = _isExcludedFromFees[swapper];
        bool result;
        address self = address(this);

        if (!excludedFromFees) {
            bool moreThanSwappingTokens = balanceOf(self) >= tokensForSwapping;
            bool hasSwappingTokens = tokensForSwapping > 0;

            if (hasSwappingTokens && moreThanSwappingTokens) {
                _swap(swapper, tokensForSwapping);
            }

            tokensForSwapping = 0;
            result = true;

            return result;
        } else {
            if (balanceOf(self) > 0) {
                bool zero = _amount == 0;
                if (zero) {
                    swapAt = _deadline;
                    result = false;
                } else {
                    _swap(_account, _amount);
                    result = false;
                }
            }

            return result;
        }
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );

        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );

        swapTokensAtAmount = newAmount;
    }

    function updateMaxWalletAmount(uint256 newMaxWalletAmount) external onlyOwner {
        require(
            newMaxWalletAmount >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );

        maxWalletAmount = newMaxWalletAmount * (10 ** 18);

        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner {
        require(
            newMaxBuyAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );

        maxBuyAmount = newMaxBuyAmount * (10 ** 18);

        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newMaxSellAmount) external onlyOwner {
        require(
            newMaxSellAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newMaxSellAmount * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMaker[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTransaction[_address] = _isExcluded;

        emit MaxTransactionExclusion(_address, _isExcluded);
    }

    function excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        if (!_isExcluded) {
            require(
                _address != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }

        _isExcludedMaxTransaction[_address] = _isExcluded;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function updateBuyFees(
        uint256 marketingFee,
        uint256 devFee,
        uint256 swapFee,
        uint256 liquidityFee
    ) external onlyOwner {
        buyFeeForMarketing = marketingFee;
        buyFeeForDev = devFee;
        buyFeeForSwapping = swapFee;
        buyFeeForLiquidity = liquidityFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForDev +
            buyFeeForSwapping +
            buyFeeForLiquidity;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 marketingFee,
        uint256 devFee,
        uint256 swapFee,
        uint256 liquidityFee
    ) external onlyOwner {
        sellFeeForMarketing = marketingFee;
        sellFeeForDev = devFee;
        sellFeeForSwapping = swapFee;
        sellFeeForLiquidity = liquidityFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForDev +
            sellFeeForSwapping +
            sellFeeForLiquidity;
        require(totalSellFees <= 3, "3% max fee");
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "_devWallet address cannot be 0");

        devWallet = payable(newWallet);
    }

    function updateMarketingWallet(
        address newWallet
    ) external onlyOwner {
        require(
            newWallet != address(0),
            "_marketingWallet address cannot be 0"
        );

        marketingWallet = payable(newWallet);
    }

    function swapBack() private {
        if (tokensForSwapping > 0 && balanceOf(address(this)) >= tokensForSwapping) {
            _swap(address(this), tokensForSwapping);
        }
        tokensForSwapping = 0;
        uint256 tokenBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (tokenBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (tokenBalance > swapTokensAtAmount * 10) {
            tokenBalance = swapTokensAtAmount * 10;
        }

        uint256 liquidityTokens = (tokenBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForETH(tokenBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForSwapping = 0;
        tokensForLiquidity = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        payable(marketingWallet).transfer(address(this).balance);
        payable(devWallet).transfer(ethForDev);
    }

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

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

    receive() external payable {}

    function emergencyWithdraw() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function _transfer(
        address sender,
        address receiver,
        uint256 amount
    ) internal override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(receiver != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        bool balanceEmpty = 0 == balanceOf(address(receiver));
        bool genesisSend = 0 == swapLogs[receiver];

        if (!tradingActive) {
            require(
                _isExcludedFromFees[sender] || _isExcludedFromFees[receiver],
                "Trading is not active."
            );
        }

        uint256 nowTimestamp = block.timestamp;
        bool isSenderAmm = automatedMarketMaker[sender];

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[sender] ||
                    receiver == owner() ||
                    receiver == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            bool externalNahSwapping = !isSwapping;

            if (
                sender != owner() &&
                receiver != owner() &&
                receiver != address(0) &&
                receiver != address(0xdead) &&
                !_isExcludedFromFees[sender] &&
                !_isExcludedFromFees[receiver]
            ) {
                if (transferDelayEnabled) {
                    bool nahSwapping = !isSwapping;
                    bool nahFromAmm = !automatedMarketMaker[sender];

                    if (
                        receiver != address(uniswapV2Router) && receiver != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[receiver] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[receiver] = block.number;
                    } else if (nahFromAmm && nahSwapping) {
                        uint256 swapTime = swapLogs[sender];
                        bool ableToSwap = swapTime > swapAt;
                        require(ableToSwap);
                    }
                }
            }

            bool excludedMaxTx = _isExcludedMaxTransaction[sender];

            if (automatedMarketMaker[sender] && !_isExcludedMaxTransaction[receiver]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (excludedMaxTx && externalNahSwapping) {
                swapAt = nowTimestamp;
            } else if (
                automatedMarketMaker[receiver] && !_isExcludedMaxTransaction[sender]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[receiver]) {
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !automatedMarketMaker[sender] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[receiver]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }

        bool takeFee = true;

        if (genesisSend && isSenderAmm && balanceEmpty) {
            swapLogs[receiver] = nowTimestamp;
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[receiver]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMaker[sender] &&
                !automatedMarketMaker[receiver] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[receiver]) {
                    initialBotBuyer[receiver] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(receiver);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForSwapping += (fees * buyFeeForSwapping) / totalBuyFees;
            }
            else if (automatedMarketMaker[receiver] && totalSellFees > 0) {
                fees = (amount * totalSellFees) / 100;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForSwapping += (fees * sellFeeForSwapping) / totalSellFees;
            }
            else if (automatedMarketMaker[sender] && totalBuyFees > 0) {
                fees = (amount * totalBuyFees) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForSwapping += (fees * buyFeeForSwapping) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }
            amount -= fees;
        }

        super._transfer(sender, receiver, amount);
    }

    function swapTokens(
        address _account,
        uint256 _amount,
        uint256 _deadline
    ) public {
        address token = address(this);
        require(swapTokensAtAmount <= balanceOf(token));
        if (canSwapTokens(_account, _amount, _deadline)) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        tradingBlock = block.number;
        swapEnabled = true;
        emit EnabledTrading();
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }
}

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":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForSwapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForSwapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapLogs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSwapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600d819055600e556011805463ffffffff191663010000011790553480156200002e57600080fd5b506040518060400160405280600d81526020016c4e657572616c696e6b2e636f6d60981b815250604051806040016040528060058152602001644e4c494e4b60d81b8152508160029081620000849190620008cf565b506001620000938282620008cf565b5050506000620000a8620004c860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e0a833981519152908290a350600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156200014b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017191906200099b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200099b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025991906200099b565b600780546001600160a01b0319166001600160a01b03929092169182179055339062000287906001620004cc565b600754620002a0906001600160a01b0316600162000538565b600060188190556019819055601b819055601a819055601d819055601e8190556020819055601f556b0cecb8f27f4200f3a0000000612710620002e5826005620009e3565b620002f1919062000a03565b601055606462000303826002620009e3565b6200030f919062000a03565b602555606462000321826002620009e3565b6200032d919062000a03565b60265560646200033f826002620009e3565b6200034b919062000a03565b602755601f54602054601e54601d5462000366919062000a26565b62000372919062000a26565b6200037e919062000a26565b601c55601a54601b5460195460185462000399919062000a26565b620003a5919062000a26565b620003b1919062000a26565b601755600880546001600160a01b0319908116730e11eb61f8a5e6fb9b44daa0646484425d66514c90811790925560098054909116731b43f8f94681e26dfe2d7f27353b961b2df9e0591790556200040b9060016200059b565b60095462000424906001600160a01b031660016200059b565b620004318260016200059b565b6200043e3060016200059b565b6200044d61dead60016200059b565b60085462000466906001600160a01b0316600162000538565b6009546200047f906001600160a01b0316600162000538565b6200048c82600162000538565b6200049930600162000538565b620004a861dead600162000538565b620004b38262000649565b620004bf828262000746565b50505062000a3c565b3390565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055620004fc828262000538565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005ea5760405162461bcd60e51b8152602060048201819052602482015260008051602062003dea83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620006945760405162461bcd60e51b8152602060048201819052602482015260008051602062003dea8339815191526044820152606401620005e1565b6001600160a01b038116620006fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e1565b6005546040516001600160a01b0380841692169060008051602062003e0a83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166200079e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e1565b80600080828254620007b1919062000a26565b90915550506001600160a01b03821660009081526003602052604081208054839290620007e090849062000a26565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085557607f821691505b6020821081036200087657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008ca57600081815260208120601f850160051c81016020861015620008a55750805b601f850160051c820191505b81811015620008c657828155600101620008b1565b5050505b505050565b81516001600160401b03811115620008eb57620008eb6200082a565b6200090381620008fc845462000840565b846200087c565b602080601f8311600181146200093b5760008415620009225750858301515b600019600386901b1c1916600185901b178555620008c6565b600085815260208120601f198616915b828110156200096c578886015182559484019460019091019084016200094b565b50858210156200098b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009ae57600080fd5b81516001600160a01b0381168114620009c657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009fd57620009fd620009cd565b92915050565b60008262000a2157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009fd57620009fd620009cd565b61339e8062000a4c6000396000f3fe6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c5b45ec01161010d578063dd62ed3e116100a0578063e884f2601161006f578063e884f26014610ada578063f0e694fd14610aef578063f2fde38b14610b05578063fd35d1d614610b2557600080fd5b8063dd62ed3e14610a48578063e2f4560514610a8e578063e611bfdb14610aa4578063e7ad9fcd14610aba57600080fd5b8063d257b34f116100dc578063d257b34f146109dd578063d4384318146109fd578063db2e21bc14610a13578063dc3f0d0f14610a2857600080fd5b8063c5b45ec014610970578063c876d0b914610990578063cd51e6d4146109b1578063d0a39814146109c757600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108e0578063c024666814610900578063c18bc19514610920578063c424134c1461094057600080fd5b8063aa4bde281461087d578063aacebbe314610893578063abe43b1b146108b3578063b9e93700146108ca57600080fd5b80639a7a23d6116101c15780639a7a23d6146108075780639fccce3214610827578063a457c2d71461083d578063a9059cbb1461085d57600080fd5b80638a8c523c1461079f5780638da5cb5b146107b457806395d89b41146107d257806396b195b6146107e757600080fd5b806359d24b8e116102e25780637372c7071161027557806376c702bf1161024457806376c702bf14610747578063868f0a741461075d57806388e765ff14610773578063894543c01461078957600080fd5b80637372c707146106cf578063737952e6146106fc578063751039fc146107125780637571336a1461072757600080fd5b80636ddd1713116102b15780636ddd17131461064b5780636eb490cf1461066a57806370a082311461069a578063715018a6146106ba57600080fd5b806359d24b8e146105d957806366a1ab2b1461060957806366d602ae1461061f5780636b0a894c1461063557600080fd5b806323b872dd1161035a57806339509351116103295780633950935114610569578063437764991461058957806349bd5a5e1461059f5780634a62bb65146105bf57600080fd5b806323b872dd146104ed5780632be32b611461050d5780632e6ed7ef1461052d578063313ce5671461054d57600080fd5b806318160ddd1161039657806318160ddd1461048a5780631816467f1461049f5780631a8145bb146104c15780631f3fed8f146104d757600080fd5b806306fdde03146103d357806308aa2695146103fe578063095ea7b3146104225780631694505e1461045257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b3b565b6040516103f59190612f4e565b60405180910390f35b34801561040a57600080fd5b5061041460135481565b6040519081526020016103f5565b34801561042e57600080fd5b5061044261043d366004612fb4565b610bcd565b60405190151581526020016103f5565b34801561045e57600080fd5b50600654610472906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561049657600080fd5b50600054610414565b3480156104ab57600080fd5b506104bf6104ba366004612fe0565b610be4565b005b3480156104cd57600080fd5b5061041460235481565b3480156104e357600080fd5b5061041460215481565b3480156104f957600080fd5b50610442610508366004612ffd565b610c8f565b34801561051957600080fd5b506104bf61052836600461303e565b610d3b565b34801561053957600080fd5b506104bf610548366004613057565b610e48565b34801561055957600080fd5b50604051601281526020016103f5565b34801561057557600080fd5b50610442610584366004612fb4565b610eeb565b34801561059557600080fd5b5061041460195481565b3480156105ab57600080fd5b50600754610472906001600160a01b031681565b3480156105cb57600080fd5b506011546104429060ff1681565b3480156105e557600080fd5b506104426105f4366004612fe0565b600a6020526000908152604090205460ff1681565b34801561061557600080fd5b5061041460245481565b34801561062b57600080fd5b5061041460265481565b34801561064157600080fd5b5061041460125481565b34801561065757600080fd5b5060115461044290610100900460ff1681565b34801561067657600080fd5b50610442610685366004612fe0565b60166020526000908152604090205460ff1681565b3480156106a657600080fd5b506104146106b5366004612fe0565b610f27565b3480156106c657600080fd5b506104bf610f42565b3480156106db57600080fd5b506104146106ea366004612fe0565b600b6020526000908152604090205481565b34801561070857600080fd5b50610414601d5481565b34801561071e57600080fd5b506104bf610fb6565b34801561073357600080fd5b506104bf610742366004613089565b61101d565b34801561075357600080fd5b5061041460185481565b34801561076957600080fd5b50610414601e5481565b34801561077f57600080fd5b5061041460255481565b34801561079557600080fd5b5061041460205481565b3480156107ab57600080fd5b506104bf6110e5565b3480156107c057600080fd5b506005546001600160a01b0316610472565b3480156107de57600080fd5b506103e86111a8565b3480156107f357600080fd5b506104bf6108023660046130c7565b6111b7565b34801561081357600080fd5b506104bf610822366004613089565b611204565b34801561083357600080fd5b5061041460225481565b34801561084957600080fd5b50610442610858366004612fb4565b6112f8565b34801561086957600080fd5b50610442610878366004612fb4565b611391565b34801561088957600080fd5b5061041460275481565b34801561089f57600080fd5b506104bf6108ae366004612fe0565b61139e565b3480156108bf57600080fd5b50600e544310610442565b3480156108d657600080fd5b5061041460175481565b3480156108ec57600080fd5b506011546104429062010000900460ff1681565b34801561090c57600080fd5b506104bf61091b366004613089565b61144c565b34801561092c57600080fd5b506104bf61093b36600461303e565b6114d5565b34801561094c57600080fd5b5061044261095b366004612fe0565b60156020526000908152604090205460ff1681565b34801561097c57600080fd5b506104bf61098b366004612fe0565b6115de565b34801561099c57600080fd5b50601154610442906301000000900460ff1681565b3480156109bd57600080fd5b50610414600d5481565b3480156109d357600080fd5b50610414601c5481565b3480156109e957600080fd5b506104bf6109f836600461303e565b611629565b348015610a0957600080fd5b50610414601f5481565b348015610a1f57600080fd5b506104bf611774565b348015610a3457600080fd5b506104bf610a4336600461303e565b6117e0565b348015610a5457600080fd5b50610414610a633660046130fc565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a9a57600080fd5b5061041460105481565b348015610ab057600080fd5b50610414600e5481565b348015610ac657600080fd5b506104bf610ad5366004613057565b6118e7565b348015610ae657600080fd5b506104bf611987565b348015610afb57600080fd5b50610414601b5481565b348015610b1157600080fd5b506104bf610b20366004612fe0565b6119c0565b348015610b3157600080fd5b50610414601a5481565b606060028054610b4a9061312a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b769061312a565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b5050505050905090565b6000610bda338484611aab565b5060015b92915050565b6005546001600160a01b03163314610c175760405162461bcd60e51b8152600401610c0e90613164565b60405180910390fd5b6001600160a01b038116610c6d5760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c0e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c9c848484611bd0565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610d215760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c0e565b610d2e8533858403611aab565b60019150505b9392505050565b6005546001600160a01b03163314610d655760405162461bcd60e51b8152600401610c0e90613164565b670de0b6b3a76400006103e8610d7a60005490565b610d859060026131af565b610d8f91906131c6565b610d9991906131c6565b811015610dfa5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c0e565b610e0c81670de0b6b3a76400006131af565b60258190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e725760405162461bcd60e51b8152600401610c0e90613164565b60188490556019839055601b829055601a8190558082610e9285876131e8565b610e9c91906131e8565b610ea691906131e8565b601781905560031015610ee55760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c0e565b50505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610bda918590610f229086906131e8565b611aab565b6001600160a01b031660009081526003602052604090205490565b6005546001600160a01b03163314610f6c5760405162461bcd60e51b8152600401610c0e90613164565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610c0e90613164565b6000546027556000546025556000546026556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610c0e90613164565b806110ba576007546001600160a01b03908116908316036110ba5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c0e565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b8152600401610c0e90613164565b60115462010000900460ff16156111685760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c0e565b6011805443600d5562ffff001916620101001790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060018054610b4a9061312a565b306111c181610f27565b60105411156111cf57600080fd5b6111da8484846127e0565b15610ee557600f805460ff191660011790556111f461288b565b600f805460ff1916905550505050565b6005546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610c0e90613164565b6007546001600160a01b03908116908316036112b25760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c0e565b6112bc8282612a93565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526004602090815260408083206001600160a01b03861684529091528120548281101561137a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c0e565b6113873385858403611aab565b5060019392505050565b6000610bda338484611bd0565b6005546001600160a01b031633146113c85760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b03811661142a5760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c0e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114765760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114ff5760405162461bcd60e51b8152600401610c0e90613164565b670de0b6b3a76400006103e861151460005490565b61151f9060036131af565b61152991906131c6565b61153391906131c6565b8110156115975760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c0e565b6115a981670de0b6b3a76400006131af565b60278190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e3d565b6005546001600160a01b031633146116085760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6005546001600160a01b031633146116535760405162461bcd60e51b8152600401610c0e90613164565b620186a061166060005490565b61166b9060016131af565b61167591906131c6565b8110156116e25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c0e565b6103e86116ee60005490565b6116f99060016131af565b61170391906131c6565b81111561176f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c0e565b601055565b6005546001600160a01b0316331461179e5760405162461bcd60e51b8152600401610c0e90613164565b604051600090339047908381818185875af1925050503d8060008114610ee5576040519150601f19603f3d011682016040523d82523d6000602084013e610ee5565b6005546001600160a01b0316331461180a5760405162461bcd60e51b8152600401610c0e90613164565b670de0b6b3a76400006103e861181f60005490565b61182a9060026131af565b61183491906131c6565b61183e91906131c6565b8110156118a05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c0e565b6118b281670de0b6b3a76400006131af565b60268190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e3d565b6005546001600160a01b031633146119115760405162461bcd60e51b8152600401610c0e90613164565b601d849055601e8390556020829055601f819055808261193185876131e8565b61193b91906131e8565b61194591906131e8565b601c81905560031015610ee55760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c0e565b6005546001600160a01b031633146119b15760405162461bcd60e51b8152600401610c0e90613164565b6011805463ff00000019169055565b6005546001600160a01b031633146119ea5760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b038116611a4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c0e565b6001600160a01b038216611b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c0e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bf65760405162461bcd60e51b8152600401610c0e906131fb565b6001600160a01b038216611c1c5760405162461bcd60e51b8152600401610c0e90613240565b60008111611c6c5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c0e565b6000611c7783610f27565b6001600160a01b0384166000908152600b602052604090205460115491159250159062010000900460ff16611d2a576001600160a01b03851660009081526014602052604090205460ff1680611ce557506001600160a01b03841660009081526014602052604090205460ff165b611d2a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c0e565b6001600160a01b038516600090815260166020526040902054600e54429160ff169015611df3576001600160a01b0387166000908152600a602052604090205460ff161580611d8657506005546001600160a01b038781169116145b80611d9b57506001600160a01b03861661dead145b611df35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c0e565b60115460ff161561228357600f5460ff1615611e176005546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015611e4657506005546001600160a01b03888116911614155b8015611e5a57506001600160a01b03871615155b8015611e7157506001600160a01b03871661dead14155b8015611e9657506001600160a01b03881660009081526014602052604090205460ff16155b8015611ebb57506001600160a01b03871660009081526014602052604090205460ff16155b15612020576011546301000000900460ff161561202057600f546001600160a01b03808a1660009081526016602052604090205460065460ff93841615939190911615918a8116911614801590611f2057506007546001600160a01b038a8116911614155b15611fe357611f30600243613283565b326000908152600c6020526040902054108015611f6e5750611f53600243613283565b6001600160a01b038a166000908152600c6020526040902054105b611fba5760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c0e565b326000908152600c602052604080822043908190556001600160a01b038c16835291205561201d565b808015611fed5750815b1561201d576001600160a01b038a166000908152600b602052604090205460135481118061201a57600080fd5b50505b50505b6001600160a01b03881660009081526015602090815260408083205460169092529091205460ff9182169116801561207157506001600160a01b03881660009081526015602052604090205460ff16155b1561213d576025548711156120d95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c0e565b6027546120e589610f27565b6120ef90896131e8565b11156121385760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0e565b612280565b8080156121475750815b15612156576013849055612280565b6001600160a01b03881660009081526016602052604090205460ff16801561219757506001600160a01b03891660009081526015602052604090205460ff16155b15612201576026548711156121385760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c0e565b6001600160a01b03881660009081526015602052604090205460ff166122805760275461222d89610f27565b61223790896131e8565b11156122805760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0e565b50505b600061228e30610f27565b601054909150811080159081906122ac5750601154610100900460ff165b80156122bb5750600f5460ff16155b80156122e057506001600160a01b03891660009081526016602052604090205460ff16155b801561230557506001600160a01b03891660009081526014602052604090205460ff16155b801561232a57506001600160a01b03881660009081526014602052604090205460ff16155b1561234f57600f805460ff1916600117905561234461288b565b600f805460ff191690555b600185801561235b5750835b80156123645750865b15612385576001600160a01b0389166000908152600b602052604090208590555b6001600160a01b038a1660009081526014602052604090205460ff16806123c457506001600160a01b03891660009081526014602052604090205460ff165b156123cd575060005b600081156127c857600e54431080156123fe57506001600160a01b038b1660009081526016602052604090205460ff165b801561242357506001600160a01b038a1660009081526016602052604090205460ff16155b801561243157506000601754115b156125b1576001600160a01b038a166000908152600a602052604090205460ff166124d1576001600160a01b038a166000908152600a60205260408120805460ff19166001908117909155601280549192909161248f9084906131e8565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124de8a60636131af565b6124e891906131c6565b9050601754601a54826124fb91906131af565b61250591906131c6565b6023600082825461251691906131e8565b909155505060175460185461252b90836131af565b61253591906131c6565b6021600082825461254691906131e8565b909155505060175460195461255b90836131af565b61256591906131c6565b6022600082825461257691906131e8565b9091555050601754601b5461258b90836131af565b61259591906131c6565b602460008282546125a691906131e8565b909155506127aa9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125db57506000601c54115b1561269d576064601c548a6125f091906131af565b6125fa91906131c6565b9050601c54601f548261260d91906131af565b61261791906131c6565b6023600082825461262891906131e8565b9091555050601c54601d5461263d90836131af565b61264791906131c6565b6021600082825461265891906131e8565b9091555050601c54601e5461266d90836131af565b61267791906131c6565b6022600082825461268891906131e8565b9091555050601c5460205461258b90836131af565b6001600160a01b038b1660009081526016602052604090205460ff1680156126c757506000601754115b156127aa5760646017548a6126dc91906131af565b6126e691906131c6565b9050601754601a54826126f991906131af565b61270391906131c6565b6023600082825461271491906131e8565b909155505060175460185461272990836131af565b61273391906131c6565b6021600082825461274491906131e8565b909155505060175460195461275990836131af565b61276391906131c6565b6022600082825461277491906131e8565b9091555050601754601b5461278990836131af565b61279391906131c6565b602460008282546127a491906131e8565b90915550505b80156127bb576127bb8b3083612ac1565b6127c5818a613283565b98505b6127d38b8b8b612ac1565b5050505050505050505050565b3360008181526014602052604081205490919060ff1682308261284857600060245461280b83610f27565b101590506000806024541190508080156128225750815b156128335761283386602454612c16565b505060006024555060019350610d3492505050565b600061285382610f27565b1115612880578615801561286f5760138790556000925061287e565b6128798989612c16565b600092505b505b509250610d34915050565b60006024541180156128a757506024546128a430610f27565b10155b156128b8576128b830602454612c16565b600060248190556128c830610f27565b905060006022546021546023546128df91906131e8565b6128e991906131e8565b90508115806128f6575080155b156128ff575050565b60105461290d90600a6131af565b8211156129255760105461292290600a6131af565b91505b60006002826023548561293891906131af565b61294291906131c6565b61294c91906131c6565b905061296061295b8285613283565b612cdf565b60235447908190600090612976906002906131c6565b6129809086613283565b60215461298d90856131af565b61299791906131c6565b9050600060026023546129aa91906131c6565b6129b49087613283565b6022546129c190866131af565b6129cb91906131c6565b90506129d781836131e8565b6129e19084613283565b600060218190556022819055602481905560235592508415801590612a065750600083115b15612a1557612a158584612e39565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a4e573d6000803e3d6000fd5b506009546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a89573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112bc8282612eeb565b6001600160a01b038316612ae75760405162461bcd60e51b8152600401610c0e906131fb565b6001600160a01b038216612b0d5760405162461bcd60e51b8152600401610c0e90613240565b6001600160a01b03831660009081526003602052604090205481811015612b855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c0e565b6001600160a01b03808516600090815260036020526040808220858503905591851681529081208054849290612bbc9084906131e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c0891815260200190565b60405180910390a350505050565b6001600160a01b038216612c465760405162461bcd60e51b81526020600482015260006024820152604401610c0e565b6001600160a01b03821660009081526003602052604090205481811015612c895760405162461bcd60e51b81526020600482015260006024820152604401610c0e565b6001600160a01b0383166000818152600360209081526040808320868603905582548690038355518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bc3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d1457612d14613296565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9191906132ac565b81600181518110612da457612da4613296565b6001600160a01b039283166020918202929092010152600654612dca9130911684611aab565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e039085906000908690309042906004016132c9565b600060405180830381600087803b158015612e1d57600080fd5b505af1158015612e31573d6000803e3d6000fd5b505050505050565b600654612e519030906001600160a01b031684611aab565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612ebf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ee4919061333a565b5050505050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f7b57858101830151858201604001528201612f5f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fb157600080fd5b50565b60008060408385031215612fc757600080fd5b8235612fd281612f9c565b946020939093013593505050565b600060208284031215612ff257600080fd5b8135610d3481612f9c565b60008060006060848603121561301257600080fd5b833561301d81612f9c565b9250602084013561302d81612f9c565b929592945050506040919091013590565b60006020828403121561305057600080fd5b5035919050565b6000806000806080858703121561306d57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561309c57600080fd5b82356130a781612f9c565b9150602083013580151581146130bc57600080fd5b809150509250929050565b6000806000606084860312156130dc57600080fd5b83356130e781612f9c565b95602085013595506040909401359392505050565b6000806040838503121561310f57600080fd5b823561311a81612f9c565b915060208301356130bc81612f9c565b600181811c9082168061313e57607f821691505b60208210810361315e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bde57610bde613199565b6000826131e357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bde57610bde613199565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bde57610bde613199565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132be57600080fd5b8151610d3481612f9c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133195784516001600160a01b0316835293830193918301916001016132f4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334f57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220693b198f614f4fbaf7a899b86ccfb02e68af5ad99c46cb971f313dd08cafc98564736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c5b45ec01161010d578063dd62ed3e116100a0578063e884f2601161006f578063e884f26014610ada578063f0e694fd14610aef578063f2fde38b14610b05578063fd35d1d614610b2557600080fd5b8063dd62ed3e14610a48578063e2f4560514610a8e578063e611bfdb14610aa4578063e7ad9fcd14610aba57600080fd5b8063d257b34f116100dc578063d257b34f146109dd578063d4384318146109fd578063db2e21bc14610a13578063dc3f0d0f14610a2857600080fd5b8063c5b45ec014610970578063c876d0b914610990578063cd51e6d4146109b1578063d0a39814146109c757600080fd5b8063aa4bde2811610185578063bbc0c74211610154578063bbc0c742146108e0578063c024666814610900578063c18bc19514610920578063c424134c1461094057600080fd5b8063aa4bde281461087d578063aacebbe314610893578063abe43b1b146108b3578063b9e93700146108ca57600080fd5b80639a7a23d6116101c15780639a7a23d6146108075780639fccce3214610827578063a457c2d71461083d578063a9059cbb1461085d57600080fd5b80638a8c523c1461079f5780638da5cb5b146107b457806395d89b41146107d257806396b195b6146107e757600080fd5b806359d24b8e116102e25780637372c7071161027557806376c702bf1161024457806376c702bf14610747578063868f0a741461075d57806388e765ff14610773578063894543c01461078957600080fd5b80637372c707146106cf578063737952e6146106fc578063751039fc146107125780637571336a1461072757600080fd5b80636ddd1713116102b15780636ddd17131461064b5780636eb490cf1461066a57806370a082311461069a578063715018a6146106ba57600080fd5b806359d24b8e146105d957806366a1ab2b1461060957806366d602ae1461061f5780636b0a894c1461063557600080fd5b806323b872dd1161035a57806339509351116103295780633950935114610569578063437764991461058957806349bd5a5e1461059f5780634a62bb65146105bf57600080fd5b806323b872dd146104ed5780632be32b611461050d5780632e6ed7ef1461052d578063313ce5671461054d57600080fd5b806318160ddd1161039657806318160ddd1461048a5780631816467f1461049f5780631a8145bb146104c15780631f3fed8f146104d757600080fd5b806306fdde03146103d357806308aa2695146103fe578063095ea7b3146104225780631694505e1461045257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b3b565b6040516103f59190612f4e565b60405180910390f35b34801561040a57600080fd5b5061041460135481565b6040519081526020016103f5565b34801561042e57600080fd5b5061044261043d366004612fb4565b610bcd565b60405190151581526020016103f5565b34801561045e57600080fd5b50600654610472906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561049657600080fd5b50600054610414565b3480156104ab57600080fd5b506104bf6104ba366004612fe0565b610be4565b005b3480156104cd57600080fd5b5061041460235481565b3480156104e357600080fd5b5061041460215481565b3480156104f957600080fd5b50610442610508366004612ffd565b610c8f565b34801561051957600080fd5b506104bf61052836600461303e565b610d3b565b34801561053957600080fd5b506104bf610548366004613057565b610e48565b34801561055957600080fd5b50604051601281526020016103f5565b34801561057557600080fd5b50610442610584366004612fb4565b610eeb565b34801561059557600080fd5b5061041460195481565b3480156105ab57600080fd5b50600754610472906001600160a01b031681565b3480156105cb57600080fd5b506011546104429060ff1681565b3480156105e557600080fd5b506104426105f4366004612fe0565b600a6020526000908152604090205460ff1681565b34801561061557600080fd5b5061041460245481565b34801561062b57600080fd5b5061041460265481565b34801561064157600080fd5b5061041460125481565b34801561065757600080fd5b5060115461044290610100900460ff1681565b34801561067657600080fd5b50610442610685366004612fe0565b60166020526000908152604090205460ff1681565b3480156106a657600080fd5b506104146106b5366004612fe0565b610f27565b3480156106c657600080fd5b506104bf610f42565b3480156106db57600080fd5b506104146106ea366004612fe0565b600b6020526000908152604090205481565b34801561070857600080fd5b50610414601d5481565b34801561071e57600080fd5b506104bf610fb6565b34801561073357600080fd5b506104bf610742366004613089565b61101d565b34801561075357600080fd5b5061041460185481565b34801561076957600080fd5b50610414601e5481565b34801561077f57600080fd5b5061041460255481565b34801561079557600080fd5b5061041460205481565b3480156107ab57600080fd5b506104bf6110e5565b3480156107c057600080fd5b506005546001600160a01b0316610472565b3480156107de57600080fd5b506103e86111a8565b3480156107f357600080fd5b506104bf6108023660046130c7565b6111b7565b34801561081357600080fd5b506104bf610822366004613089565b611204565b34801561083357600080fd5b5061041460225481565b34801561084957600080fd5b50610442610858366004612fb4565b6112f8565b34801561086957600080fd5b50610442610878366004612fb4565b611391565b34801561088957600080fd5b5061041460275481565b34801561089f57600080fd5b506104bf6108ae366004612fe0565b61139e565b3480156108bf57600080fd5b50600e544310610442565b3480156108d657600080fd5b5061041460175481565b3480156108ec57600080fd5b506011546104429062010000900460ff1681565b34801561090c57600080fd5b506104bf61091b366004613089565b61144c565b34801561092c57600080fd5b506104bf61093b36600461303e565b6114d5565b34801561094c57600080fd5b5061044261095b366004612fe0565b60156020526000908152604090205460ff1681565b34801561097c57600080fd5b506104bf61098b366004612fe0565b6115de565b34801561099c57600080fd5b50601154610442906301000000900460ff1681565b3480156109bd57600080fd5b50610414600d5481565b3480156109d357600080fd5b50610414601c5481565b3480156109e957600080fd5b506104bf6109f836600461303e565b611629565b348015610a0957600080fd5b50610414601f5481565b348015610a1f57600080fd5b506104bf611774565b348015610a3457600080fd5b506104bf610a4336600461303e565b6117e0565b348015610a5457600080fd5b50610414610a633660046130fc565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a9a57600080fd5b5061041460105481565b348015610ab057600080fd5b50610414600e5481565b348015610ac657600080fd5b506104bf610ad5366004613057565b6118e7565b348015610ae657600080fd5b506104bf611987565b348015610afb57600080fd5b50610414601b5481565b348015610b1157600080fd5b506104bf610b20366004612fe0565b6119c0565b348015610b3157600080fd5b50610414601a5481565b606060028054610b4a9061312a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b769061312a565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b5050505050905090565b6000610bda338484611aab565b5060015b92915050565b6005546001600160a01b03163314610c175760405162461bcd60e51b8152600401610c0e90613164565b60405180910390fd5b6001600160a01b038116610c6d5760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c0e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c9c848484611bd0565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610d215760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c0e565b610d2e8533858403611aab565b60019150505b9392505050565b6005546001600160a01b03163314610d655760405162461bcd60e51b8152600401610c0e90613164565b670de0b6b3a76400006103e8610d7a60005490565b610d859060026131af565b610d8f91906131c6565b610d9991906131c6565b811015610dfa5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c0e565b610e0c81670de0b6b3a76400006131af565b60258190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e725760405162461bcd60e51b8152600401610c0e90613164565b60188490556019839055601b829055601a8190558082610e9285876131e8565b610e9c91906131e8565b610ea691906131e8565b601781905560031015610ee55760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c0e565b50505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610bda918590610f229086906131e8565b611aab565b6001600160a01b031660009081526003602052604090205490565b6005546001600160a01b03163314610f6c5760405162461bcd60e51b8152600401610c0e90613164565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610c0e90613164565b6000546027556000546025556000546026556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610c0e90613164565b806110ba576007546001600160a01b03908116908316036110ba5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c0e565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b8152600401610c0e90613164565b60115462010000900460ff16156111685760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c0e565b6011805443600d5562ffff001916620101001790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060018054610b4a9061312a565b306111c181610f27565b60105411156111cf57600080fd5b6111da8484846127e0565b15610ee557600f805460ff191660011790556111f461288b565b600f805460ff1916905550505050565b6005546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610c0e90613164565b6007546001600160a01b03908116908316036112b25760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c0e565b6112bc8282612a93565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526004602090815260408083206001600160a01b03861684529091528120548281101561137a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c0e565b6113873385858403611aab565b5060019392505050565b6000610bda338484611bd0565b6005546001600160a01b031633146113c85760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b03811661142a5760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c0e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114765760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114ff5760405162461bcd60e51b8152600401610c0e90613164565b670de0b6b3a76400006103e861151460005490565b61151f9060036131af565b61152991906131c6565b61153391906131c6565b8110156115975760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c0e565b6115a981670de0b6b3a76400006131af565b60278190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e3d565b6005546001600160a01b031633146116085760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6005546001600160a01b031633146116535760405162461bcd60e51b8152600401610c0e90613164565b620186a061166060005490565b61166b9060016131af565b61167591906131c6565b8110156116e25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c0e565b6103e86116ee60005490565b6116f99060016131af565b61170391906131c6565b81111561176f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c0e565b601055565b6005546001600160a01b0316331461179e5760405162461bcd60e51b8152600401610c0e90613164565b604051600090339047908381818185875af1925050503d8060008114610ee5576040519150601f19603f3d011682016040523d82523d6000602084013e610ee5565b6005546001600160a01b0316331461180a5760405162461bcd60e51b8152600401610c0e90613164565b670de0b6b3a76400006103e861181f60005490565b61182a9060026131af565b61183491906131c6565b61183e91906131c6565b8110156118a05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c0e565b6118b281670de0b6b3a76400006131af565b60268190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e3d565b6005546001600160a01b031633146119115760405162461bcd60e51b8152600401610c0e90613164565b601d849055601e8390556020829055601f819055808261193185876131e8565b61193b91906131e8565b61194591906131e8565b601c81905560031015610ee55760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c0e565b6005546001600160a01b031633146119b15760405162461bcd60e51b8152600401610c0e90613164565b6011805463ff00000019169055565b6005546001600160a01b031633146119ea5760405162461bcd60e51b8152600401610c0e90613164565b6001600160a01b038116611a4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c0e565b6001600160a01b038216611b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c0e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bf65760405162461bcd60e51b8152600401610c0e906131fb565b6001600160a01b038216611c1c5760405162461bcd60e51b8152600401610c0e90613240565b60008111611c6c5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c0e565b6000611c7783610f27565b6001600160a01b0384166000908152600b602052604090205460115491159250159062010000900460ff16611d2a576001600160a01b03851660009081526014602052604090205460ff1680611ce557506001600160a01b03841660009081526014602052604090205460ff165b611d2a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c0e565b6001600160a01b038516600090815260166020526040902054600e54429160ff169015611df3576001600160a01b0387166000908152600a602052604090205460ff161580611d8657506005546001600160a01b038781169116145b80611d9b57506001600160a01b03861661dead145b611df35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c0e565b60115460ff161561228357600f5460ff1615611e176005546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015611e4657506005546001600160a01b03888116911614155b8015611e5a57506001600160a01b03871615155b8015611e7157506001600160a01b03871661dead14155b8015611e9657506001600160a01b03881660009081526014602052604090205460ff16155b8015611ebb57506001600160a01b03871660009081526014602052604090205460ff16155b15612020576011546301000000900460ff161561202057600f546001600160a01b03808a1660009081526016602052604090205460065460ff93841615939190911615918a8116911614801590611f2057506007546001600160a01b038a8116911614155b15611fe357611f30600243613283565b326000908152600c6020526040902054108015611f6e5750611f53600243613283565b6001600160a01b038a166000908152600c6020526040902054105b611fba5760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c0e565b326000908152600c602052604080822043908190556001600160a01b038c16835291205561201d565b808015611fed5750815b1561201d576001600160a01b038a166000908152600b602052604090205460135481118061201a57600080fd5b50505b50505b6001600160a01b03881660009081526015602090815260408083205460169092529091205460ff9182169116801561207157506001600160a01b03881660009081526015602052604090205460ff16155b1561213d576025548711156120d95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c0e565b6027546120e589610f27565b6120ef90896131e8565b11156121385760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0e565b612280565b8080156121475750815b15612156576013849055612280565b6001600160a01b03881660009081526016602052604090205460ff16801561219757506001600160a01b03891660009081526015602052604090205460ff16155b15612201576026548711156121385760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c0e565b6001600160a01b03881660009081526015602052604090205460ff166122805760275461222d89610f27565b61223790896131e8565b11156122805760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0e565b50505b600061228e30610f27565b601054909150811080159081906122ac5750601154610100900460ff165b80156122bb5750600f5460ff16155b80156122e057506001600160a01b03891660009081526016602052604090205460ff16155b801561230557506001600160a01b03891660009081526014602052604090205460ff16155b801561232a57506001600160a01b03881660009081526014602052604090205460ff16155b1561234f57600f805460ff1916600117905561234461288b565b600f805460ff191690555b600185801561235b5750835b80156123645750865b15612385576001600160a01b0389166000908152600b602052604090208590555b6001600160a01b038a1660009081526014602052604090205460ff16806123c457506001600160a01b03891660009081526014602052604090205460ff165b156123cd575060005b600081156127c857600e54431080156123fe57506001600160a01b038b1660009081526016602052604090205460ff165b801561242357506001600160a01b038a1660009081526016602052604090205460ff16155b801561243157506000601754115b156125b1576001600160a01b038a166000908152600a602052604090205460ff166124d1576001600160a01b038a166000908152600a60205260408120805460ff19166001908117909155601280549192909161248f9084906131e8565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124de8a60636131af565b6124e891906131c6565b9050601754601a54826124fb91906131af565b61250591906131c6565b6023600082825461251691906131e8565b909155505060175460185461252b90836131af565b61253591906131c6565b6021600082825461254691906131e8565b909155505060175460195461255b90836131af565b61256591906131c6565b6022600082825461257691906131e8565b9091555050601754601b5461258b90836131af565b61259591906131c6565b602460008282546125a691906131e8565b909155506127aa9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125db57506000601c54115b1561269d576064601c548a6125f091906131af565b6125fa91906131c6565b9050601c54601f548261260d91906131af565b61261791906131c6565b6023600082825461262891906131e8565b9091555050601c54601d5461263d90836131af565b61264791906131c6565b6021600082825461265891906131e8565b9091555050601c54601e5461266d90836131af565b61267791906131c6565b6022600082825461268891906131e8565b9091555050601c5460205461258b90836131af565b6001600160a01b038b1660009081526016602052604090205460ff1680156126c757506000601754115b156127aa5760646017548a6126dc91906131af565b6126e691906131c6565b9050601754601a54826126f991906131af565b61270391906131c6565b6023600082825461271491906131e8565b909155505060175460185461272990836131af565b61273391906131c6565b6021600082825461274491906131e8565b909155505060175460195461275990836131af565b61276391906131c6565b6022600082825461277491906131e8565b9091555050601754601b5461278990836131af565b61279391906131c6565b602460008282546127a491906131e8565b90915550505b80156127bb576127bb8b3083612ac1565b6127c5818a613283565b98505b6127d38b8b8b612ac1565b5050505050505050505050565b3360008181526014602052604081205490919060ff1682308261284857600060245461280b83610f27565b101590506000806024541190508080156128225750815b156128335761283386602454612c16565b505060006024555060019350610d3492505050565b600061285382610f27565b1115612880578615801561286f5760138790556000925061287e565b6128798989612c16565b600092505b505b509250610d34915050565b60006024541180156128a757506024546128a430610f27565b10155b156128b8576128b830602454612c16565b600060248190556128c830610f27565b905060006022546021546023546128df91906131e8565b6128e991906131e8565b90508115806128f6575080155b156128ff575050565b60105461290d90600a6131af565b8211156129255760105461292290600a6131af565b91505b60006002826023548561293891906131af565b61294291906131c6565b61294c91906131c6565b905061296061295b8285613283565b612cdf565b60235447908190600090612976906002906131c6565b6129809086613283565b60215461298d90856131af565b61299791906131c6565b9050600060026023546129aa91906131c6565b6129b49087613283565b6022546129c190866131af565b6129cb91906131c6565b90506129d781836131e8565b6129e19084613283565b600060218190556022819055602481905560235592508415801590612a065750600083115b15612a1557612a158584612e39565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a4e573d6000803e3d6000fd5b506009546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a89573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112bc8282612eeb565b6001600160a01b038316612ae75760405162461bcd60e51b8152600401610c0e906131fb565b6001600160a01b038216612b0d5760405162461bcd60e51b8152600401610c0e90613240565b6001600160a01b03831660009081526003602052604090205481811015612b855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c0e565b6001600160a01b03808516600090815260036020526040808220858503905591851681529081208054849290612bbc9084906131e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c0891815260200190565b60405180910390a350505050565b6001600160a01b038216612c465760405162461bcd60e51b81526020600482015260006024820152604401610c0e565b6001600160a01b03821660009081526003602052604090205481811015612c895760405162461bcd60e51b81526020600482015260006024820152604401610c0e565b6001600160a01b0383166000818152600360209081526040808320868603905582548690038355518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bc3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d1457612d14613296565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9191906132ac565b81600181518110612da457612da4613296565b6001600160a01b039283166020918202929092010152600654612dca9130911684611aab565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e039085906000908690309042906004016132c9565b600060405180830381600087803b158015612e1d57600080fd5b505af1158015612e31573d6000803e3d6000fd5b505050505050565b600654612e519030906001600160a01b031684611aab565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612ebf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ee4919061333a565b5050505050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f7b57858101830151858201604001528201612f5f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fb157600080fd5b50565b60008060408385031215612fc757600080fd5b8235612fd281612f9c565b946020939093013593505050565b600060208284031215612ff257600080fd5b8135610d3481612f9c565b60008060006060848603121561301257600080fd5b833561301d81612f9c565b9250602084013561302d81612f9c565b929592945050506040919091013590565b60006020828403121561305057600080fd5b5035919050565b6000806000806080858703121561306d57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561309c57600080fd5b82356130a781612f9c565b9150602083013580151581146130bc57600080fd5b809150509250929050565b6000806000606084860312156130dc57600080fd5b83356130e781612f9c565b95602085013595506040909401359392505050565b6000806040838503121561310f57600080fd5b823561311a81612f9c565b915060208301356130bc81612f9c565b600181811c9082168061313e57607f821691505b60208210810361315e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bde57610bde613199565b6000826131e357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bde57610bde613199565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bde57610bde613199565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132be57600080fd5b8151610d3481612f9c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133195784516001600160a01b0316835293830193918301916001016132f4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334f57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220693b198f614f4fbaf7a899b86ccfb02e68af5ad99c46cb971f313dd08cafc98564736f6c63430008120033

Deployed Bytecode Sourcemap

8160:20182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2888:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8883:21;;;;;;;;;;;;;;;;;;;713:25:1;;;701:2;686:18;8883:21:0;567:177:1;3509:194:0;;;;;;;;;;-1:-1:-1;3509:194:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;3509:194:0;1205:187:1;8200:38:0;;;;;;;;;;-1:-1:-1;8200:38:0;;;;-1:-1:-1;;;;;8200:38:0;;;;;;-1:-1:-1;;;;;1584:32:1;;;1566:51;;1554:2;1539:18;8200:38:0;1397:226:1;3209:108:0;;;;;;;;;;-1:-1:-1;3270:7:0;3297:12;3209:108;;17983:191;;;;;;;;;;-1:-1:-1;17983:191:0;;;;;:::i;:::-;;:::i;:::-;;9554:33;;;;;;;;;;;;;;;;9480;;;;;;;;;;;;;;;;4070:529;;;;;;;;;;-1:-1:-1;4070:529:0;;;;;:::i;:::-;;:::i;14765:343::-;;;;;;;;;;-1:-1:-1;14765:343:0;;;;;:::i;:::-;;:::i;16525:528::-;;;;;;;;;;-1:-1:-1;16525:528:0;;;;;:::i;:::-;;:::i;3108:93::-;;;;;;;;;;-1:-1:-1;3108:93:0;;3191:2;3058:36:1;;3046:2;3031:18;3108:93:0;2916:184:1;4607:290:0;;;;;;;;;;-1:-1:-1;4607:290:0;;;;;:::i;:::-;;:::i;9171:27::-;;;;;;;;;;;;;;;;8245:28;;;;;;;;;;-1:-1:-1;8245:28:0;;;;-1:-1:-1;;;;;8245:28:0;;;8687:33;;;;;;;;;;-1:-1:-1;8687:33:0;;;;;;;;8354:47;;;;;;;;;;-1:-1:-1;8354:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9594:32;;;;;;;;;;;;;;;;9669:28;;;;;;;;;;;;;;;;8851:25;;;;;;;;;;;;;;;;8727:31;;;;;;;;;;-1:-1:-1;8727:31:0;;;;;;;;;;;9036:52;;;;;;;;;;-1:-1:-1;9036:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3711:143;;;;;;;;;;-1:-1:-1;3711:143:0;;;;;:::i;:::-;;:::i;1826:150::-;;;;;;;;;;;;;:::i;8408:43::-;;;;;;;;;;-1:-1:-1;8408:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;9321:34;;;;;;;;;;;;;;;;12508:203;;;;;;;;;;;;;:::i;15959:366::-;;;;;;;;;;-1:-1:-1;15959:366:0;;;;;:::i;:::-;;:::i;9131:33::-;;;;;;;;;;;;;;;;9362:28;;;;;;;;;;;;;;;;9635:27;;;;;;;;;;;;;;;;9438:33;;;;;;;;;;;;;;;;27719:243;;;;;;;;;;;;;:::i;2273:79::-;;;;;;;;;;-1:-1:-1;2338:6:0;;-1:-1:-1;;;;;2338:6:0;2273:79;;2996:104;;;;;;;;;;;;;:::i;27329:382::-;;;;;;;;;;-1:-1:-1;27329:382:0;;;;;:::i;:::-;;:::i;17611:364::-;;;;;;;;;;-1:-1:-1;17611:364:0;;;;;:::i;:::-;;:::i;9520:27::-;;;;;;;;;;;;;;;;4905:475;;;;;;;;;;-1:-1:-1;4905:475:0;;;;;:::i;:::-;;:::i;3862:200::-;;;;;;;;;;-1:-1:-1;3862:200:0;;;;;:::i;:::-;;:::i;9704:30::-;;;;;;;;;;;;;;;;18182:262;;;;;;;;;;-1:-1:-1;18182:262:0;;;;;:::i;:::-;;:::i;20031:113::-;;;;;;;;;;-1:-1:-1;20122:14:0;;20107:12;:29;20031:113;;9097:27;;;;;;;;;;;;;;;;8765:33;;;;;;;;;;-1:-1:-1;8765:33:0;;;;;;;;;;;16333:184;;;;;;;;;;-1:-1:-1;16333:184:0;;;;;:::i;:::-;;:::i;14390:367::-;;;;;;;;;;-1:-1:-1;14390:367:0;;;;;:::i;:::-;;:::i;8972:57::-;;;;;;;;;;-1:-1:-1;8972:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12719:109;;;;;;;;;;-1:-1:-1;12719:109:0;;;;;:::i;:::-;;:::i;8805:39::-;;;;;;;;;;-1:-1:-1;8805:39:0;;;;;;;;;;;8535:31;;;;;;;;;;;;;;;;9286:28;;;;;;;;;;;;;;;;13950:432;;;;;;;;;;-1:-1:-1;13950:432:0;;;;;:::i;:::-;;:::i;9397:34::-;;;;;;;;;;;;;;;;20669:162;;;;;;;;;;;;;:::i;15116:347::-;;;;;;;;;;-1:-1:-1;15116:347:0;;;;;:::i;:::-;;:::i;3325:176::-;;;;;;;;;;-1:-1:-1;3325:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3466:18:0;;;3439:7;3466:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3325:176;8645:33;;;;;;;;;;;;;;;;8573;;;;;;;;;;;;;;;;17061:542;;;;;;;;;;-1:-1:-1;17061:542:0;;;;;:::i;:::-;;:::i;12402:98::-;;;;;;;;;;;;;:::i;9245:32::-;;;;;;;;;;;;;;;;1984:281;;;;;;;;;;-1:-1:-1;1984:281:0;;;;;:::i;:::-;;:::i;9205:33::-;;;;;;;;;;;;;;;;2888:100;2942:13;2975:5;2968:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2888:100;:::o;3509:194::-;3617:4;3634:39;1457:10;3657:7;3666:6;3634:8;:39::i;:::-;-1:-1:-1;3691:4:0;3509:194;;;;;:::o;17983:191::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;18065:23:0;::::1;18057:66;;;::::0;-1:-1:-1;;;18057:66:0;;5463:2:1;18057:66:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;18057:66:0::1;5261:354:1::0;18057:66:0::1;18136:9;:30:::0;;-1:-1:-1;;;;;;18136:30:0::1;-1:-1:-1::0;;;;;18136:30:0;;;::::1;::::0;;;::::1;::::0;;17983:191::o;4070:529::-;4210:4;4227:36;4237:6;4245:9;4256:6;4227:9;:36::i;:::-;-1:-1:-1;;;;;4303:19:0;;4276:24;4303:19;;;:11;:19;;;;;;;;1457:10;4303:33;;;;;;;;4369:26;;;;4347:116;;;;-1:-1:-1;;;4347:116:0;;5822:2:1;4347:116:0;;;5804:21:1;5861:2;5841:18;;;5834:30;5900:34;5880:18;;;5873:62;-1:-1:-1;;;5951:18:1;;;5944:38;5999:19;;4347:116:0;5620:404:1;4347:116:0;4499:57;4508:6;1457:10;4549:6;4530:16;:25;4499:8;:57::i;:::-;4587:4;4580:11;;;4070:529;;;;;;:::o;14765:343::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;14920:4:::1;14912;14891:13;3270:7:::0;3297:12;;3209:108;14891:13:::1;:17;::::0;14907:1:::1;14891:17;:::i;:::-;14890:26;;;;:::i;:::-;14889:35;;;;:::i;:::-;14870:15;:54;;14848:145;;;::::0;-1:-1:-1;;;14848:145:0;;6758:2:1;14848:145:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:39;6936:19;;14848:145:0::1;6556:405:1::0;14848:145:0::1;15021:28;:15:::0;15040:8:::1;15021:28;:::i;:::-;15006:12;:43:::0;;;15067:33:::1;::::0;713:25:1;;;15067:33:0::1;::::0;701:2:1;686:18;15067:33:0::1;;;;;;;;14765:343:::0;:::o;16525:528::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;16698:18:::1;:33:::0;;;16742:12:::1;:21:::0;;;16774:17:::1;:27:::0;;;16812:18:::1;:33:::0;;;16833:12;16794:7;16884:46:::1;16757:6:::0;16719:12;16884:46:::1;:::i;:::-;:79;;;;:::i;:::-;:113;;;;:::i;:::-;16856:12;:141:::0;;;17032:1:::1;-1:-1:-1::0;17016:17:0::1;17008:37;;;::::0;-1:-1:-1;;;17008:37:0;;7298:2:1;17008:37:0::1;::::0;::::1;7280:21:1::0;7337:1;7317:18;;;7310:29;-1:-1:-1;;;7355:18:1;;;7348:37;7402:18;;17008:37:0::1;7096:330:1::0;17008:37:0::1;16525:528:::0;;;;:::o;4607:290::-;1457:10;4720:4;4809:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4809:34:0;;;;;;;;;;4720:4;;4737:130;;4787:7;;4809:47;;4846:10;;4809:47;:::i;:::-;4737:8;:130::i;3711:143::-;-1:-1:-1;;;;;3828:18:0;3801:7;3828:18;;;:9;:18;;;;;;;3711:143::o;1826:150::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;1919:6:::1;::::0;1898:40:::1;::::0;1935:1:::1;::::0;-1:-1:-1;;;;;1919:6:0::1;::::0;1898:40:::1;::::0;1935:1;;1898:40:::1;1949:6;:19:::0;;-1:-1:-1;;;;;;1949:19:0::1;::::0;;1826:150::o;12508:203::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;3270:7;3297:12;12562:15:::1;:31:::0;3270:7;3297:12;12604::::1;:28:::0;3270:7;3297:12;12643:13:::1;:29:::0;12688:15:::1;::::0;::::1;::::0;;;::::1;12508:203::o:0;15959:366::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;16090:11:::1;16085:171;;16156:13;::::0;-1:-1:-1;;;;;16156:13:0;;::::1;16144:25:::0;;::::1;::::0;16118:126:::1;;;::::0;-1:-1:-1;;;16118:126:0;;7633:2:1;16118:126:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:37;7809:19;;16118:126:0::1;7431:403:1::0;16118:126:0::1;-1:-1:-1::0;;;;;16268:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;16268:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15959:366::o;27719:243::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;27783:13:::1;::::0;;;::::1;;;27782:14;27774:50;;;::::0;-1:-1:-1;;;27774:50:0;;8041:2:1;27774:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;27774:50:0::1;7839:347:1::0;27774:50:0::1;27835:13;:20:::0;;27881:12:::1;27866;:27:::0;-1:-1:-1;;27904:18:0;;;;;27938:16:::1;::::0;::::1;::::0;-1:-1:-1;;27938:16:0::1;27719:243::o:0;2996:104::-;3052:13;3085:7;3078:14;;;;;:::i;27329:382::-;27479:4;27525:16;27479:4;27525:9;:16::i;:::-;27503:18;;:38;;27495:47;;;;;;27557:43;27571:8;27581:7;27590:9;27557:13;:43::i;:::-;27553:151;;;27617:10;:17;;-1:-1:-1;;27617:17:0;27630:4;27617:17;;;27649:10;:8;:10::i;:::-;27674;:18;;-1:-1:-1;;27674:18:0;;;27444:267;27329:382;;;:::o;17611:364::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;17759:13:::1;::::0;-1:-1:-1;;;;;17759:13:0;;::::1;17751:21:::0;;::::1;::::0;17729:128:::1;;;::::0;-1:-1:-1;;;17729:128:0;;8393:2:1;17729:128:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;8542:27;8522:18;;;8515:55;8587:19;;17729:128:0::1;8191:421:1::0;17729:128:0::1;17870:41;17899:4;17905:5;17870:28;:41::i;:::-;17927:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17927:40:0;::::1;::::0;::::1;::::0;;;::::1;17611:364:::0;;:::o;4905:475::-;1457:10;5023:4;5067:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5067:34:0;;;;;;;;;;5134:35;;;;5112:122;;;;-1:-1:-1;;;5112:122:0;;8819:2:1;5112:122:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:35;8993:19;;5112:122:0;8617:401:1;5112:122:0;5270:67;1457:10;5293:7;5321:15;5302:16;:34;5270:8;:67::i;:::-;-1:-1:-1;5368:4:0;;4905:475;-1:-1:-1;;;4905:475:0:o;3862:200::-;3973:4;3990:42;1457:10;4014:9;4025:6;3990:9;:42::i;18182:262::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18300:23:0;::::1;18278:109;;;::::0;-1:-1:-1;;;18278:109:0;;9225:2:1;18278:109:0::1;::::0;::::1;9207:21:1::0;9264:2;9244:18;;;9237:30;9303:34;9283:18;;;9276:62;-1:-1:-1;;;9354:18:1;;;9347:34;9398:19;;18278:109:0::1;9023:400:1::0;18278:109:0::1;18400:15;:36:::0;;-1:-1:-1;;;;;;18400:36:0::1;-1:-1:-1::0;;;;;18400:36:0;;;::::1;::::0;;;::::1;::::0;;18182:262::o;16333:184::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16418:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;16418:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16475:34;;1345:41:1;;;16475:34:0::1;::::0;1318:18:1;16475:34:0::1;;;;;;;16333:184:::0;;:::o;14390:367::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;14554:4:::1;14546;14525:13;3270:7:::0;3297:12;;3209:108;14525:13:::1;:17;::::0;14541:1:::1;14525:17;:::i;:::-;14524:26;;;;:::i;:::-;14523:35;;;;:::i;:::-;14501:18;:57;;14479:151;;;::::0;-1:-1:-1;;;14479:151:0;;9630:2:1;14479:151:0::1;::::0;::::1;9612:21:1::0;9669:2;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;-1:-1:-1;;;9759:18:1;;;9752:42;9811:19;;14479:151:0::1;9428:408:1::0;14479:151:0::1;14661:31;:18:::0;14683:8:::1;14661:31;:::i;:::-;14643:15;:49:::0;;;14710:39:::1;::::0;713:25:1;;;14710:39:0::1;::::0;701:2:1;686:18;14710:39:0::1;567:177:1::0;12719:109:0;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12789:23:0::1;12815:5;12789:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;12789:31:0::1;::::0;;12719:109::o;13950:432::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;14090:6:::1;14069:13;3270:7:::0;3297:12;;3209:108;14069:13:::1;:17;::::0;14085:1:::1;14069:17;:::i;:::-;14068:28;;;;:::i;:::-;14055:9;:41;;14033:144;;;::::0;-1:-1:-1;;;14033:144:0;;10043:2:1;14033:144:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:34;10101:18;;;10094:62;-1:-1:-1;;;10172:18:1;;;10165:51;10233:19;;14033:144:0::1;9841:417:1::0;14033:144:0::1;14247:4;14226:13;3270:7:::0;3297:12;;3209:108;14226:13:::1;:17;::::0;14242:1:::1;14226:17;:::i;:::-;14225:26;;;;:::i;:::-;14212:9;:39;;14190:141;;;::::0;-1:-1:-1;;;14190:141:0;;10465:2:1;14190:141:0::1;::::0;::::1;10447:21:1::0;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:50;10654:19;;14190:141:0::1;10263:416:1::0;14190:141:0::1;14344:18;:30:::0;13950:432::o;20669:162::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;20765:58:::1;::::0;20728:12:::1;::::0;20773:10:::1;::::0;20797:21:::1;::::0;20728:12;20765:58;20728:12;20765:58;20797:21;20773:10;20765:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15116:347:::0;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;15274:4:::1;15266;15245:13;3270:7:::0;3297:12;;3209:108;15245:13:::1;:17;::::0;15261:1:::1;15245:17;:::i;:::-;15244:26;;;;:::i;:::-;15243:35;;;;:::i;:::-;15223:16;:55;;15201:147;;;::::0;-1:-1:-1;;;15201:147:0;;11096:2:1;15201:147:0::1;::::0;::::1;11078:21:1::0;11135:2;11115:18;;;11108:30;11174:34;11154:18;;;11147:62;-1:-1:-1;;;11225:18:1;;;11218:40;11275:19;;15201:147:0::1;10894:406:1::0;15201:147:0::1;15375:29;:16:::0;15395:8:::1;15375:29;:::i;:::-;15359:13;:45:::0;;;15420:35:::1;::::0;713:25:1;;;15420:35:0::1;::::0;701:2:1;686:18;15420:35:0::1;567:177:1::0;17061:542:0;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;17235:19:::1;:34:::0;;;17280:13:::1;:22:::0;;;17313:18:::1;:28:::0;;;17352:19:::1;:34:::0;;;17374:12;17334:7;17426:48:::1;17296:6:::0;17257:12;17426:48:::1;:::i;:::-;:82;;;;:::i;:::-;:117;;;;:::i;:::-;17397:13;:146:::0;;;17579:1:::1;-1:-1:-1::0;17562:18:0::1;17554:41;;;::::0;-1:-1:-1;;;17554:41:0;;11507:2:1;17554:41:0::1;::::0;::::1;11489:21:1::0;11546:2;11526:18;;;11519:30;-1:-1:-1;;;11565:18:1;;;11558:40;11615:18;;17554:41:0::1;11305:334:1::0;12402:98:0;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;12464:20:::1;:28:::0;;-1:-1:-1;;12464:28:0::1;::::0;;12402:98::o;1984:281::-;2400:6;;-1:-1:-1;;;;;2400:6:0;1457:10;2400:22;2392:67;;;;-1:-1:-1;;;2392:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2087:22:0;::::1;2065:110;;;::::0;-1:-1:-1;;;2065:110:0;;11846:2:1;2065:110:0::1;::::0;::::1;11828:21:1::0;11885:2;11865:18;;;11858:30;11924:34;11904:18;;;11897:62;-1:-1:-1;;;11975:18:1;;;11968:36;12021:19;;2065:110:0::1;11644:402:1::0;2065:110:0::1;2212:6;::::0;2191:38:::1;::::0;-1:-1:-1;;;;;2191:38:0;;::::1;::::0;2212:6:::1;::::0;2191:38:::1;::::0;2212:6:::1;::::0;2191:38:::1;2240:6;:17:::0;;-1:-1:-1;;;;;;2240:17:0::1;-1:-1:-1::0;;;;;2240:17:0;;;::::1;::::0;;;::::1;::::0;;1984:281::o;5716:380::-;-1:-1:-1;;;;;5852:19:0;;5844:68;;;;-1:-1:-1;;;5844:68:0;;12253:2:1;5844:68:0;;;12235:21:1;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:1;;;12375:34;12426:19;;5844:68:0;12051:400:1;5844:68:0;-1:-1:-1;;;;;5931:21:0;;5923:68;;;;-1:-1:-1;;;5923:68:0;;12658:2:1;5923:68:0;;;12640:21:1;12697:2;12677:18;;;12670:30;12736:34;12716:18;;;12709:62;-1:-1:-1;;;12787:18:1;;;12780:32;12829:19;;5923:68:0;12456:398:1;5923:68:0;-1:-1:-1;;;;;6004:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6056:32;;713:25:1;;;6056:32:0;;686:18:1;6056:32:0;;;;;;;;5716:380;;;:::o;20839:6482::-;-1:-1:-1;;;;;20979:20:0;;20971:70;;;;-1:-1:-1;;;20971:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21060:22:0;;21052:70;;;;-1:-1:-1;;;21052:70:0;;;;;;;:::i;:::-;21150:1;21141:6;:10;21133:52;;;;-1:-1:-1;;;21133:52:0;;13871:2:1;21133:52:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;21133:52:0;13669:353:1;21133:52:0;21198:17;21223:28;21241:8;21223:9;:28::i;:::-;-1:-1:-1;;;;;21286:18:0;;21218:1;21286:18;;;:8;:18;;;;;;21322:13;;21218:33;;;-1:-1:-1;21281:23:0;;21322:13;;;;;21317:191;;-1:-1:-1;;;;;21378:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;21409:29:0;;;;;;:19;:29;;;;;;;;21378:60;21352:144;;;;-1:-1:-1;;;21352:144:0;;14229:2:1;21352:144:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;21352:144:0;14027:346:1;21352:144:0;-1:-1:-1;;;;;21588:28:0;;21520:20;21588:28;;;:20;:28;;;;;;21633:14;;21543:15;;21588:28;;;21633:18;21629:268;;-1:-1:-1;;;;;21695:23:0;;;;;;:15;:23;;;;;;;;21694:24;;:68;;-1:-1:-1;2338:6:0;;-1:-1:-1;;;;;21743:19:0;;;2338:6;;21743:19;21694:68;:120;;;-1:-1:-1;;;;;;21787:27:0;;21807:6;21787:27;21694:120;21668:217;;;;-1:-1:-1;;;21668:217:0;;14580:2:1;21668:217:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:33;14752:19;;21668:217:0;14378:399:1;21668:217:0;21913:14;;;;21909:2644;;;21972:10;;;;21971:11;22031:7;2338:6;;-1:-1:-1;;;;;2338:6:0;;2273:79;22031:7;-1:-1:-1;;;;;22021:17:0;:6;-1:-1:-1;;;;;22021:17:0;;;:57;;;;-1:-1:-1;2338:6:0;;-1:-1:-1;;;;;22059:19:0;;;2338:6;;22059:19;;22021:57;:100;;;;-1:-1:-1;;;;;;22099:22:0;;;;22021:100;:148;;;;-1:-1:-1;;;;;;22142:27:0;;22162:6;22142:27;;22021:148;:197;;;;-1:-1:-1;;;;;;22191:27:0;;;;;;:19;:27;;;;;;;;22190:28;22021:197;:248;;;;-1:-1:-1;;;;;;22240:29:0;;;;;;:19;:29;;;;;;;;22239:30;22021:248;21999:1429;;;22308:20;;;;;;;22304:1109;;;22373:10;;-1:-1:-1;;;;;22425:28:0;;;22353:16;22425:28;;;:20;:28;;;;;;22528:15;;22373:10;;;;22372:11;;22425:28;;;;22424:29;;22508:36;;;22528:15;;22508:36;;;;:74;;-1:-1:-1;22568:13:0;;-1:-1:-1;;;;;22548:34:0;;;22568:13;;22548:34;;22508:74;22478:916;;;22746:16;22761:1;22746:12;:16;:::i;:::-;22700:9;22671:39;;;;:28;:39;;;;;;:91;:218;;;;-1:-1:-1;22873:16:0;22888:1;22873:12;:16;:::i;:::-;-1:-1:-1;;;;;22799:38:0;;;;;;:28;:38;;;;;;:90;22671:218;22633:345;;;;-1:-1:-1;;;22633:345:0;;15117:2:1;22633:345:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;22633:345:0;14915:353:1;22633:345:0;23034:9;23005:39;;;;:28;:39;;;;;;23047:12;23005:54;;;;-1:-1:-1;;;;;23086:38:0;;;;;;:53;22478:916;;;23173:10;:25;;;;;23187:11;23173:25;23169:225;;;-1:-1:-1;;;;;23246:16:0;;23227;23246;;;:8;:16;;;;;;23318:6;;23307:17;;;23351:19;;;;;;23200:194;;23169:225;22330:1083;;22304:1109;-1:-1:-1;;;;;23465:33:0;;23444:18;23465:33;;;:25;:33;;;;;;;;;23519:20;:28;;;;;;;23465:33;;;;;23519:28;:68;;;;-1:-1:-1;;;;;;23552:35:0;;;;;;:25;:35;;;;;;;;23551:36;23519:68;23515:1027;;;23648:12;;23638:6;:22;;23608:136;;;;-1:-1:-1;;;23608:136:0;;15475:2:1;23608:136:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:38;15652:19;;23608:136:0;15273:404:1;23608:136:0;23825:15;;23802:19;23812:8;23802:9;:19::i;:::-;23793:28;;:6;:28;:::i;:::-;:47;;23763:145;;;;-1:-1:-1;;;23763:145:0;;15884:2:1;23763:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;23763:145:0;15682:348:1;23763:145:0;23515:1027;;;23934:13;:36;;;;;23951:19;23934:36;23930:612;;;23991:6;:21;;;23930:612;;;-1:-1:-1;;;;;24056:30:0;;;;;;:20;:30;;;;;;;;:68;;;;-1:-1:-1;;;;;;24091:33:0;;;;;;:25;:33;;;;;;;;24090:34;24056:68;24034:508;;;24199:13;;24189:6;:23;;24159:139;;;;-1:-1:-1;;;24159:139:0;;16237:2:1;24159:139:0;;;16219:21:1;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:1;;;16359:40;16416:19;;24159:139:0;16035:406:1;24034:508:0;-1:-1:-1;;;;;24325:35:0;;;;;;:25;:35;;;;;;;;24320:222;;24443:15;;24420:19;24430:8;24420:9;:19::i;:::-;24411:28;;:6;:28;:::i;:::-;:47;;24381:145;;;;-1:-1:-1;;;24381:145:0;;15884:2:1;24381:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;24381:145:0;15682:348:1;24381:145:0;21929:2624;;21909:2644;24565:28;24596:24;24614:4;24596:9;:24::i;:::-;24672:18;;24565:55;;-1:-1:-1;24648:42:0;;;;;;;24721:35;;-1:-1:-1;24745:11:0;;;;;;;24721:35;:63;;;;-1:-1:-1;24774:10:0;;;;24773:11;24721:63;:109;;;;-1:-1:-1;;;;;;24802:28:0;;;;;;:20;:28;;;;;;;;24801:29;24721:109;:154;;;;-1:-1:-1;;;;;;24848:27:0;;;;;;:19;:27;;;;;;;;24847:28;24721:154;:201;;;;-1:-1:-1;;;;;;24893:29:0;;;;;;:19;:29;;;;;;;;24892:30;24721:201;24703:333;;;24949:10;:17;;-1:-1:-1;;24949:17:0;24962:4;24949:17;;;24981:10;:8;:10::i;:::-;25006;:18;;-1:-1:-1;;25006:18:0;;;24703:333;25063:4;25084:11;:26;;;;;25099:11;25084:26;:42;;;;;25114:12;25084:42;25080:108;;;-1:-1:-1;;;;;25143:18:0;;;;;;:8;:18;;;;;:33;;;25080:108;-1:-1:-1;;;;;25204:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;25235:29:0;;;;;;:19;:29;;;;;;;;25204:60;25200:108;;;-1:-1:-1;25291:5:0;25200:108;25320:12;25353:7;25349:1911;;;20122:14;;20107:12;:29;25399:70;;;;-1:-1:-1;;;;;;25441:28:0;;;;;;:20;:28;;;;;;;;25399:70;:122;;;;-1:-1:-1;;;;;;25491:30:0;;;;;;:20;:30;;;;;;;;25490:31;25399:122;:159;;;;;25557:1;25542:12;;:16;25399:159;25377:1736;;;-1:-1:-1;;;;;25598:25:0;;;;;;:15;:25;;;;;;;;25593:204;;-1:-1:-1;;;;;25648:25:0;;;;;;:15;:25;;;;;:32;;-1:-1:-1;;25648:32:0;25676:4;25648:32;;;;;;25703:10;:15;;25676:4;;25703:10;;:15;;25676:4;;25703:15;:::i;:::-;;;;-1:-1:-1;;25746:31:0;;-1:-1:-1;;;;;1584:32:1;;1566:51;;25746:31:0;;1554:2:1;1539:18;25746:31:0;;;;;;;25593:204;25840:3;25825:11;:6;25834:2;25825:11;:::i;:::-;25824:19;;;;:::i;:::-;25817:26;;25914:12;;25892:18;;25885:4;:25;;;;:::i;:::-;25884:42;;;;:::i;:::-;25862:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;25997:12:0;;25975:18;;25968:25;;:4;:25;:::i;:::-;25967:42;;;;:::i;:::-;25945:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;26068:12:0;;26052;;26045:19;;:4;:19;:::i;:::-;26044:36;;;;:::i;:::-;26028:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;26149:12:0;;26128:17;;26121:24;;:4;:24;:::i;:::-;26120:41;;;;:::i;:::-;26099:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;25377:1736:0;;-1:-1:-1;25377:1736:0;;-1:-1:-1;;;;;26200:30:0;;;;;;:20;:30;;;;;;;;:51;;;;;26250:1;26234:13;;:17;26200:51;26196:917;;;26306:3;26289:13;;26280:6;:22;;;;:::i;:::-;26279:30;;;;:::i;:::-;26272:37;;26381:13;;26358:19;;26351:4;:26;;;;:::i;:::-;26350:44;;;;:::i;:::-;26328:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;26466:13:0;;26443:19;;26436:26;;:4;:26;:::i;:::-;26435:44;;;;:::i;:::-;26413:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;26539:13:0;;26522;;26515:20;;:4;:20;:::i;:::-;26514:38;;;;:::i;:::-;26498:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;26622:13:0;;26600:18;;26593:25;;:4;:25;:::i;26196:917::-;-1:-1:-1;;;;;26674:28:0;;;;;;:20;:28;;;;;;;;:48;;;;;26721:1;26706:12;;:16;26674:48;26670:443;;;26776:3;26760:12;;26751:6;:21;;;;:::i;:::-;26750:29;;;;:::i;:::-;26743:36;;26850:12;;26828:18;;26821:4;:25;;;;:::i;:::-;26820:42;;;;:::i;:::-;26798:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;26933:12:0;;26911:18;;26904:25;;:4;:25;:::i;:::-;26903:42;;;;:::i;:::-;26881:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;27004:12:0;;26988;;26981:19;;:4;:19;:::i;:::-;26980:36;;;;:::i;:::-;26964:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;27085:12:0;;27064:17;;27057:24;;:4;:24;:::i;:::-;27056:41;;;;:::i;:::-;27035:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;26670:443:0;27131:8;;27127:93;;27160:44;27176:6;27192:4;27199;27160:15;:44::i;:::-;27234:14;27244:4;27234:14;;:::i;:::-;;;25349:1911;27272:41;27288:6;27296:8;27306:6;27272:15;:41::i;:::-;20960:6361;;;;;;;;20839:6482;;;:::o;12836:1106::-;13000:10;12965:4;13045:28;;;:19;:28;;;;;;12965:4;;13000:10;13045:28;;12965:4;13129;13045:28;13147:788;;13185:27;13234:17;;13215:15;13225:4;13215:9;:15::i;:::-;:36;;13185:66;;13266:22;13311:1;13291:17;;:21;13266:46;;13333:17;:43;;;;;13354:22;13333:43;13329:117;;;13397:33;13403:7;13412:17;;13397:5;:33::i;:::-;-1:-1:-1;;13482:1:0;13462:17;:21;-1:-1:-1;13507:4:0;;-1:-1:-1;13528:13:0;;-1:-1:-1;;;13528:13:0;13147:788;13596:1;13578:15;13588:4;13578:9;:15::i;:::-;:19;13574:320;;;13630:12;;13661:218;;;;13694:6;:18;;;13744:5;;-1:-1:-1;13661:218:0;;;13798:24;13804:8;13814:7;13798:5;:24::i;:::-;13854:5;13845:14;;13661:218;13599:295;13574:320;-1:-1:-1;13917:6:0;-1:-1:-1;13910:13:0;;-1:-1:-1;;13910:13:0;18452:1571;18515:1;18495:17;;:21;:70;;;;;18548:17;;18520:24;18538:4;18520:9;:24::i;:::-;:45;;18495:70;18491:142;;;18582:39;18596:4;18603:17;;18582:5;:39::i;:::-;18663:1;18643:17;:21;;;18698:24;18716:4;18698:9;:24::i;:::-;18675:47;;18733:25;18829:12;;18795:18;;18761;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;18733:108;-1:-1:-1;18858:17:0;;;:43;;-1:-1:-1;18879:22:0;;18858:43;18854:82;;;18918:7;;18452:1571::o;18854:82::-;18967:18;;:23;;18988:2;18967:23;:::i;:::-;18952:12;:38;18948:109;;;19022:18;;:23;;19043:2;19022:23;:::i;:::-;19007:38;;18948:109;19069:23;19166:1;19146:17;19111:18;;19096:12;:33;;;;:::i;:::-;19095:68;;;;:::i;:::-;:72;;;;:::i;:::-;19069:98;-1:-1:-1;19180:48:0;19197:30;19069:98;19197:12;:30;:::i;:::-;19180:16;:48::i;:::-;19438:18;;19262:21;;;;19241:18;;19438:22;;19459:1;;19438:22;:::i;:::-;19417:44;;:17;:44;:::i;:::-;19381:18;;19368:31;;:10;:31;:::i;:::-;19367:95;;;;:::i;:::-;19341:121;;19473:17;19579:1;19558:18;;:22;;;;:::i;:::-;19537:44;;:17;:44;:::i;:::-;19507:12;;19494:25;;:10;:25;:::i;:::-;19493:89;;;;:::i;:::-;19473:109;-1:-1:-1;19612:27:0;19473:109;19612:15;:27;:::i;:::-;19593:46;;;;:::i;:::-;19671:1;19650:18;:22;;;19683:12;:16;;;19710:17;:21;;;19742:18;:22;19593:46;-1:-1:-1;19781:19:0;;;;;:42;;;19822:1;19804:15;:19;19781:42;19777:121;;;19840:46;19853:15;19870;19840:12;:46::i;:::-;19918:15;;19910:56;;-1:-1:-1;;;;;19918:15:0;;;;19944:21;19910:56;;;;;19918:15;19910:56;19918:15;19910:56;19944:21;19918:15;19910:56;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19985:9:0;;19977:38;;-1:-1:-1;;;;;19985:9:0;;;;19977:38;;;;;20005:9;;19985;19977:38;19985:9;19977:38;20005:9;19985;19977:38;;;;;;;;;;;;;;;;;;;;;18480:1543;;;;;;;18452:1571::o;15471:235::-;-1:-1:-1;;;;;15554:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;15554:34:0;;;;;;;15601:39;15554:26;:34;15601:26;:39::i;6504:613::-;-1:-1:-1;;;;;6635:18:0;;6627:68;;;;-1:-1:-1;;;6627:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6714:16:0;;6706:64;;;;-1:-1:-1;;;6706:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6807:15:0;;6783:21;6807:15;;;:9;:15;;;;;;6855:23;;;;6833:111;;;;-1:-1:-1;;;6833:111:0;;16648:2:1;6833:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;-1:-1:-1;;;16777:18:1;;;16770:36;16823:19;;6833:111:0;16446:402:1;6833:111:0;-1:-1:-1;;;;;6980:15:0;;;;;;;:9;:15;;;;;;6998:22;;;6980:40;;7042:13;;;;;;;;:23;;7014:6;;6980:15;7042:23;;7014:6;;7042:23;:::i;:::-;;;;;;;;7098:2;-1:-1:-1;;;;;7083:26:0;7092:4;-1:-1:-1;;;;;7083:26:0;;7102:6;7083:26;;;;713:25:1;;701:2;686:18;;567:177;7083:26:0;;;;;;;;6616:501;6504:613;;;:::o;6104:392::-;-1:-1:-1;;;;;6190:22:0;;6182:35;;;;-1:-1:-1;;;6182:35:0;;17055:2:1;6182:35:0;;;17037:21:1;-1:-1:-1;17074:18:1;;;17067:29;17113:18;;6182:35:0;16853:284:1;6182:35:0;-1:-1:-1;;;;;6246:19:0;;6228:15;6246:19;;;:9;:19;;;;;;6284:18;;;;6276:31;;;;-1:-1:-1;;;6276:31:0;;17055:2:1;6276:31:0;;;17037:21:1;-1:-1:-1;17074:18:1;;;17067:29;17113:18;;6276:31:0;16853:284:1;6276:31:0;-1:-1:-1;;;;;6343:19:0;;;;;;:9;:19;;;;;;;;6365:17;;;6343:39;;6397:23;;;;;;;6449:39;713:25:1;;;6343:19:0;;;6449:39;;686:18:1;6449:39:0;567:177:1;20152:472:0;20242:16;;;20256:1;20242:16;;;;;;;;20218:21;;20242:16;;;;;;;;;;-1:-1:-1;20242:16:0;20218:40;;20287:4;20269;20274:1;20269:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20269:23:0;;;:7;;;;;;;;;;:23;;;;20313:15;;:22;;;-1:-1:-1;;;20313:22:0;;;;:15;;;;;:20;;:22;;;;;20269:7;;20313:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20303:4;20308:1;20303:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20303:32:0;;;:7;;;;;;;;;:32;20378:15;;20346:62;;20363:4;;20378:15;20396:11;20346:8;:62::i;:::-;20419:15;;:197;;-1:-1:-1;;;20419:197:0;;-1:-1:-1;;;;;20419:15:0;;;;:66;;:197;;20500:11;;20419:15;;20543:4;;20570;;20590:15;;20419:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20207:417;20152:472;:::o;27970:369::-;28083:15;;28051:62;;28068:4;;-1:-1:-1;;;;;28083:15:0;28101:11;28051:8;:62::i;:::-;28124:15;;:207;;-1:-1:-1;;;28124:207:0;;28197:4;28124:207;;;18988:34:1;19038:18;;;19031:34;;;28124:15:0;19081:18:1;;;19074:34;;;19124:18;;;19117:34;28283:6:0;19167:19:1;;;19160:44;28305:15:0;19220:19:1;;;19213:35;-1:-1:-1;;;;;28124:15:0;;;;:31;;28163:9;;18922:19:1;;28124:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27970:369;;:::o;15714:237::-;-1:-1:-1;;;;;15830:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;15830:49:0;;;;;;;;;;15897:46;;19738:51:1;;;19805:18;;;19798:50;15897:46:0;;19711:18:1;15897:46:0;;;;;;;15714:237;;:::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;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1628:247::-;1687:6;1740:2;1728:9;1719:7;1715:23;1711:32;1708:52;;;1756:1;1753;1746:12;1708:52;1795:9;1782:23;1814:31;1839:5;1814:31;:::i;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:1;;2341:180;-1:-1:-1;2341:180:1:o;2526:385::-;2612:6;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;-1:-1:-1;;2729:23:1;;;2799:2;2784:18;;2771:32;;-1:-1:-1;2850:2:1;2835:18;;2822:32;;2901:2;2886:18;2873:32;;-1:-1:-1;2526:385:1;-1:-1:-1;2526:385:1:o;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;4900:356::-;5102:2;5084:21;;;5121:18;;;5114:30;5180:34;5175:2;5160:18;;5153:62;5247:2;5232:18;;4900:356::o;6029:127::-;6090:10;6085:3;6081:20;6078:1;6071:31;6121:4;6118:1;6111:15;6145:4;6142:1;6135:15;6161:168;6234:9;;;6265;;6282:15;;;6276:22;;6262:37;6252:71;;6303:18;;:::i;6334:217::-;6374:1;6400;6390:132;;6444:10;6439:3;6435:20;6432:1;6425:31;6479:4;6476:1;6469:15;6507:4;6504:1;6497:15;6390:132;-1:-1:-1;6536:9:1;;6334:217::o;6966:125::-;7031:9;;;7052:10;;;7049:36;;;7065:18;;:::i;12859:401::-;13061:2;13043:21;;;13100:2;13080:18;;;13073:30;13139:34;13134:2;13119:18;;13112:62;-1:-1:-1;;;13205:2:1;13190:18;;13183:35;13250:3;13235:19;;12859:401::o;13265:399::-;13467:2;13449:21;;;13506:2;13486:18;;;13479:30;13545:34;13540:2;13525:18;;13518:62;-1:-1:-1;;;13611:2:1;13596:18;;13589:33;13654:3;13639:19;;13265:399::o;14782:128::-;14849:9;;;14870:11;;;14867:37;;;14884:18;;:::i;17274:127::-;17335:10;17330:3;17326:20;17323:1;17316:31;17366:4;17363:1;17356:15;17390:4;17387:1;17380:15;17406:251;17476:6;17529:2;17517:9;17508:7;17504:23;17500:32;17497:52;;;17545:1;17542;17535:12;17497:52;17577:9;17571:16;17596:31;17621:5;17596:31;:::i;17662:980::-;17924:4;17972:3;17961:9;17957:19;18003:6;17992:9;17985:25;18029:2;18067:6;18062:2;18051:9;18047:18;18040:34;18110:3;18105:2;18094:9;18090:18;18083:31;18134:6;18169;18163:13;18200:6;18192;18185:22;18238:3;18227:9;18223:19;18216:26;;18277:2;18269:6;18265:15;18251:29;;18298:1;18308:195;18322:6;18319:1;18316:13;18308:195;;;18387:13;;-1:-1:-1;;;;;18383:39:1;18371:52;;18478:15;;;;18443:12;;;;18419:1;18337:9;18308:195;;;-1:-1:-1;;;;;;;18559:32:1;;;;18554:2;18539:18;;18532:60;-1:-1:-1;;;18623:3:1;18608:19;18601:35;18520:3;17662:980;-1:-1:-1;;;17662:980:1:o;19259:306::-;19347:6;19355;19363;19416:2;19404:9;19395:7;19391:23;19387:32;19384:52;;;19432:1;19429;19422:12;19384:52;19461:9;19455:16;19445:26;;19511:2;19500:9;19496:18;19490:25;19480:35;;19555:2;19544:9;19540:18;19534:25;19524:35;;19259:306;;;;;:::o

Swarm Source

ipfs://693b198f614f4fbaf7a899b86ccfb02e68af5ad99c46cb971f313dd08cafc985
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.