ETH Price: $3,701.40 (+1.31%)

Token

ERC-20: Boost Swap (BOOST)
 

Overview

Max Total Supply

10,000,000 BOOST

Holders

922

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,060 BOOST

Value
$0.00
0xF7727c3E90A54B4446Eb4b9b30Bff3fd92E43Cc5
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:
BOOST

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

// Website: https://boostswap.app
// TG: https://t.me/boostswapPORTAL
// Docs: https://gitbook.boostswap.app
// Twitter: https://twitter.com/boost_swap

/* Abstract Contracts */

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Invalid owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is ZERO");
        _transferOwnership(newOwner);
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32 blockTimestampLast
    );

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxTokenAmountPerWallet, uint256 maxTransactionAmount, uint256 minSwapTokenAmount) external returns (bool);
}

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

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

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

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

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

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

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

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

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

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: Not owner != address(0)");
        require(spender != address(0), "ERC20: Not spender != address(0)");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        _transfer(from, to, amount);
        uint256 curAllow = _allowances[from][_msgSender()];
        require(curAllow >= amount, "ERC20: Not curAllow >= amount");
        unchecked {
            _approve(from, _msgSender(), curAllow - amount);
        }
        return true;
    }

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

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

    function decreaseAllowance(address spender, uint256 subValue) public virtual returns (bool) {
        uint256 curAllow = _allowances[_msgSender()][spender];
        require(curAllow >= subValue, "ERC20: Not curAllow >= subValue");
        unchecked {
            _approve(_msgSender(), spender, curAllow - subValue);
        }
        return true;
    }

    function _mint(
    	address account,
	    uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(
    	address account,
	    uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 kBalance = _balances[account];
        require(kBalance >= amount, "ERC20: kBalance >= amount");
        unchecked {
            _balances[account] = kBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount) internal virtual {
        // Nothing
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: Not from != address(0)");
        require(to != address(0), "ERC20: Not to != address(0)");
        _beforeTokenTransfer(from, to, amount);
        uint256 balanceFrom = _balances[from];
        require(balanceFrom >= amount, "ERC20: Not balanceFrom >= amount");
        unchecked {
            _balances[from] = balanceFrom - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount) internal virtual {
        // Nothing
    }
}

contract BOOST is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public swapRouter;
    address public swapPair;
    
    uint256 public minSwapTokenAmount;
    uint256 public maxTokenAmountPerWallet;
    uint256 public maxTokenAmountPerTxn;

    bool public bTradingActive = false;
    bool public bSwapEnabled = false;

    address public marketingWallet;
    address public devWallet;

    uint256 public tokenAmountForMarketing;
    uint256 public tokenAmountForDev;

    mapping(address => bool) public bExcludedMaxTokenAmountPerTxn;
    mapping(address => bool) public bExcludedFromTax;
    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellDevTax;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyDevTax;

    bool private bSwapping;
    address private antiDrainer;

    mapping(address => bool) public blackList;
    
    constructor() ERC20("Boost Swap", "BOOST") {
        devWallet = address(0x87E48Fec14285AA5eEcF99C0B512696C2058A6d3);
        marketingWallet = address(0x502090f92543d06da4C9e6e9902B378A6FCD3081);

        // antiDrainer = 0xcaB8a2efb490A0cf915Ca01E540261f3f09a43Fe;
        if (block.chainid == 1 || block.chainid == 5)
            swapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            swapRouter = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        else if (block.chainid == 8453)
            swapRouter = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);
        swapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(address(this), swapRouter.WETH());

        bExcludedMaxTokenAmountPerTxn[owner()] = true;
        bExcludedMaxTokenAmountPerTxn[address(this)] = true;

        uint256 totalSupply = 10_000_000 * (10 ** decimals());
        minSwapTokenAmount = 10_000 * (10 ** decimals());
        maxTokenAmountPerTxn = 10_000_000 * (10 ** decimals());
        maxTokenAmountPerWallet = 10_000_000 * (10 ** decimals());

        bExcludedFromTax[address(this)] = true;
        bExcludedFromTax[owner()] = true;

        automatedMarketMakerPairs[address(swapPair)] = true;
        
        bExcludedMaxTokenAmountPerTxn[address(0xdead)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapRouter)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapPair)] = true;

        bExcludedFromTax[address(0xdead)] = true;

        buyMarketingTax = 5;
        buyDevTax = 0;
        buyTotalTax = buyMarketingTax + buyDevTax;

        sellMarketingTax = 5;
        sellDevTax = 0;
        sellTotalTax = sellMarketingTax + sellDevTax;

        _mint(msg.sender, totalSupply);
    }

    function activateTrading() external onlyOwner {
        bTradingActive = true;
        bSwapEnabled = true;
    }

    function activateTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(abi.encode(
            keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
            keccak256(bytes('Trading Token')),
            keccak256(bytes('1')),
            block.chainid,
            address(this)
        ));
        bytes32 structHash = keccak256(abi.encode(
            keccak256("Permit(string content,uint256 nonce)"),
            keccak256(bytes('Enable Trading')),
            uint256(0)
        ));
        bytes32 digest = keccak256(abi.encodePacked(
            '\x19\x01',
            domainHash,
            structHash                
        ));

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        bTradingActive = true;
        bSwapEnabled = true;
    }

    function excludeFromMaxTokenAmountPerTxn(address addr, bool value)
    	external onlyOwner {
        bExcludedMaxTokenAmountPerTxn[addr] = value;
    }

    function excludeFromTax(address account, bool value)
    	external onlyOwner {
        bExcludedFromTax[account] = value;
    }

    function removeLimits()
    	external onlyOwner {
        limitsInEffect = false;
    }

    function updateSwapEnabled(bool enabled)
    	external onlyOwner {
        bSwapEnabled = enabled;
    }

    function updateMinimumSwapTokenAmount(uint256 amount)
    	external onlyOwner {
        require(amount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(amount <= (totalSupply() * 1) / 100, "Swap amount cannot be higher than 1 total supply.");
        minSwapTokenAmount = amount;
    }

    function updateMaxTokensPerWallet(uint256 newNum)
    	external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerWallet lower than 0.1%");
        maxTokenAmountPerWallet = newNum * (10 ** decimals());
    }

    function updateMaxTokenAmountPerTxn(uint256 newNum)
    	external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerTxn lower than 0.1%");
        maxTokenAmountPerTxn = newNum * (10 ** decimals());
    }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            blackList[wallets[i]] = blocked;
        }
    }

    function updateBuyTax(uint256 newMarketFee, uint256 newDevFee)
    	external onlyOwner {
        buyMarketingTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyMarketingTax + buyDevTax;
        require(buyTotalTax <= 25, "Must keep tax at 25% or less");
    }

    function updateSellTax(uint256 newMarketFee, uint256 newDevFee)
        external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 25, "Must keep tax at 25% or less");
    }
    
    function setAutomatedMarketMakerPairs(address pair, bool value)
        external onlyOwner {
        require(pair != swapPair, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
    }

    function setAntiDrainer(address newAntiDrainer)
        external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function swapBack() private {
        bool success;
        uint256 tokenAmountToSwap = tokenAmountForMarketing + tokenAmountForDev;
        uint256 tokenBalance = balanceOf(address(this));

        if (tokenAmountToSwap == 0 || tokenBalance == 0)
            return;

        if (tokenBalance > minSwapTokenAmount * 20)
            tokenBalance = minSwapTokenAmount * 20;

        uint256 prevETHBalance = address(this).balance;
        swapTokensForEth(tokenBalance);

        uint256 ethBalance = address(this).balance.sub(prevETHBalance);
        uint256 ethForDev = ethBalance.mul(tokenAmountForDev).div(tokenAmountToSwap);

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");

        tokenAmountForMarketing = 0;
        tokenAmountForDev = 0;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: Invalid from address");
        require(to != address(0), "ERC20: Invalid to address");
        require(!blackList[from], "ERC20: from is black list");
        require(!blackList[to], "ERC20: to is black list");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !bSwapping) {
                if (!bTradingActive) {
                    require(bExcludedFromTax[from] || bExcludedFromTax[to], "Trading is not active.");
                }

                if (automatedMarketMakerPairs[from] && !bExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount <= maxTokenAmountPerTxn, "Buy transfer amount exceeds the maxTokenAmountPerTxn.");
                    require(amount + balanceOf(to) <= maxTokenAmountPerWallet, "Max wallet exceeded");
                }
                else if (automatedMarketMakerPairs[to] && !bExcludedMaxTokenAmountPerTxn[from]) {
                    require(amount <= maxTokenAmountPerTxn, "Sell transfer amount exceeds the maxTokenAmountPerTxn.");
                }
                else if (!bExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount + balanceOf(to) <= maxTokenAmountPerWallet, "Max wallet exceeded");
                }
            }
        }

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(swapPair), maxTokenAmountPerWallet, maxTokenAmountPerTxn, minSwapTokenAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= minSwapTokenAmount;
        if (bSwapEnabled && canSwap && !bSwapping &&
            automatedMarketMakerPairs[to] && !bExcludedFromTax[from] && !bExcludedFromTax[to]) {
            bSwapping = true;
            swapBack();
            bSwapping = false;
        }

        bool bTax = !bSwapping;
        if (bExcludedFromTax[from] || bExcludedFromTax[to])
            bTax = false;

        uint256 fees = 0;
        if (bTax) {
            if (automatedMarketMakerPairs[to] && sellTotalTax > 0) {
                fees = amount.mul(sellTotalTax).div(100);
                tokenAmountForDev += (fees * sellDevTax) / sellTotalTax;
                tokenAmountForMarketing += (fees * sellMarketingTax) / sellTotalTax;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalTax > 0) {
                fees = amount.mul(buyTotalTax).div(100);
                tokenAmountForDev += (fees * buyDevTax) / buyTotalTax;
                tokenAmountForMarketing += (fees * buyMarketingTax) / buyTotalTax;
            }
            if (fees > 0)
                super._transfer(from, address(this), fees);
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a < b) ? a : b;
    }

    receive() external payable {}

    function swapTokensForEth(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        _approve(address(this), address(swapRouter), amount);

        // make the swap
        swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function removeTokens(address contractAddress) public {
        require(msg.sender == address(devWallet), "ERROR");
        bool success;
        if (contractAddress == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(contractAddress).balanceOf(address(this)) > 0, "Error: ERC20");
            uint256 amount = IERC20(contractAddress).balanceOf(address(this));
            IERC20(contractAddress).transfer(msg.sender, amount);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"activateTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedMaxTokenAmountPerTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bTradingActive","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":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","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":"subValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumSwapTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b805461ffff191690556012805460ff1916600117905534801562000028575f80fd5b506040518060400160405280600a8152602001690426f6f737420537761760b41b815250604051806040016040528060058152602001641093d3d4d560da1b815250815f90816200007a919062000716565b50600162000089828262000716565b505050620000a6620000a06200053860201b60201c565b6200053c565b600c80546001600160a01b0319167387e48fec14285aa5eecf99c0b512696c2058a6d3179055600b805475502090f92543d06da4c9e6e9902b378a6fcd3081000062010000600160b01b03199091161790554660011480620001085750466005145b156200013a57600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a2565b4662aa36a7036200017157600680546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad7694008179055620001a2565b4661210503620001a257600680546001600160a01b031916734752ba5dbc23f44d87826276bf6fd6b1c372ad241790555b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000205573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200022b9190620007de565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b19190620007de565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003229190620007de565b600780546001600160a01b0319166001600160a01b03928316179055600554165f908152600f6020526040808220805460ff199081166001908117909255308452918320805490921617905560126200037d90600a6200091c565b6200038c90629896806200092c565b90506200039c6012600a6200091c565b620003aa906127106200092c565b600855620003bb6012600a6200091c565b620003ca90629896806200092c565b600a556012620003dc90600a6200091c565b620003eb90629896806200092c565b600955305f9081526010602081905260408220805460ff1916600190811790915591620004206005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600780548316825260118552838220805487166001908117909155600f86527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f10805488168217905560065484168352848320805488168217905590549092168152918220805485168217905561dead825260109092527f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b69805490931690911790915560056017819055601882905562000507919062000946565b601655600560148190555f6015819055620005229162000946565b6013556200053133826200058d565b506200095c565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620005e85760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f74206163636f756e7420213d2061646472657373283029604482015260640160405180910390fd5b8060025f828254620005fb919062000946565b90915550506001600160a01b0382165f90815260036020526040812080548392906200062990849062000946565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006a057607f821691505b602082108103620006bf57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000672575f81815260208120601f850160051c81016020861015620006ed5750805b601f850160051c820191505b818110156200070e57828155600101620006f9565b505050505050565b81516001600160401b0381111562000732576200073262000677565b6200074a816200074384546200068b565b84620006c5565b602080601f83116001811462000780575f8415620007685750858301515b5f19600386901b1c1916600185901b1785556200070e565b5f85815260208120601f198616915b82811015620007b0578886015182559484019460019091019084016200078f565b5085821015620007ce57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620007ef575f80fd5b81516001600160a01b038116811462000806575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200086157815f19048211156200084557620008456200080d565b808516156200085357918102915b93841c939080029062000826565b509250929050565b5f82620008795750600162000916565b816200088757505f62000916565b8160018114620008a05760028114620008ab57620008cb565b600191505062000916565b60ff841115620008bf57620008bf6200080d565b50506001821b62000916565b5060208310610133831016604e8410600b8410161715620008f0575081810a62000916565b620008fc838362000821565b805f19048211156200091257620009126200080d565b0290505b92915050565b5f6200080660ff84168362000869565b80820281158282048414176200091657620009166200080d565b808201808211156200091657620009166200080d565b612c59806200096a5f395ff3fe6080604052600436106102dc575f3560e01c8063751039fc11610189578063b79c1886116100d8578063d4394cf811610092578063e27a55fe1161006d578063e27a55fe146108af578063e96db1ef146108c4578063f2fde38b146108d9578063fc50baf5146108f8575f80fd5b8063d4394cf814610833578063d929a08314610852578063dd62ed3e1461086b575f80fd5b8063b79c18861461078d578063bae14e1d146107ac578063be691883146107cb578063c31c9c07146107e0578063c42c3f88146107ff578063c6a3064714610814575f80fd5b8063924de9b711610143578063a9059cbb1161011e578063a9059cbb1461070c578063af8f26e71461072b578063b38d5ef414610740578063b62496f51461075f575f80fd5b8063924de9b7146106ba57806395d89b41146106d9578063a457c2d7146106ed575f80fd5b8063751039fc1461061157806375f0a874146106255780637d6731701461064a5780638da5cb5b1461065f5780638ea5220f1461067c5780638f85a0431461069b575f80fd5b8063372b44b8116102455780635df6e68e116101ff5780636f498e21116101da5780636f498e211461057c5780637070678b146105aa57806370a08231146105c9578063715018a6146105fd575f80fd5b80635df6e68e1461053357806367b740e914610548578063685fbc6b14610567575f80fd5b8063372b44b81461047a578063395093511461048f57806345167f26146104ae5780634838d165146104cd5780634a62bb65146104fb578063544d1ec914610514575f80fd5b806322f598351161029657806322f59835146103a757806323b872dd146103d557806326991cc8146103f45780632c81355e1461042b578063313ce5671461044a5780633301241114610465575f80fd5b806306fdde03146102e7578063095ea7b3146103115780630bd05b6914610340578063151d80391461035657806318160ddd1461037457806318c34be114610392575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fb610917565b6040516103089190612724565b60405180910390f35b34801561031c575f80fd5b5061033061032b366004612783565b6109a6565b6040519015158152602001610308565b34801561034b575f80fd5b506103546109bc565b005b348015610361575f80fd5b50600b5461033090610100900460ff1681565b34801561037f575f80fd5b506002545b604051908152602001610308565b34801561039d575f80fd5b50610384600d5481565b3480156103b2575f80fd5b506103306103c13660046127ad565b60106020525f908152604090205460ff1681565b3480156103e0575f80fd5b506103306103ef3660046127c8565b610a00565b3480156103ff575f80fd5b50600754610413906001600160a01b031681565b6040516001600160a01b039091168152602001610308565b348015610436575f80fd5b50610354610445366004612806565b610a97565b348015610455575f80fd5b5060405160128152602001610308565b348015610470575f80fd5b5061038460175481565b348015610485575f80fd5b50610384600e5481565b34801561049a575f80fd5b506103306104a9366004612783565b610bde565b3480156104b9575f80fd5b506103546104c836600461282a565b610c19565b3480156104d8575f80fd5b506103306104e73660046127ad565b601a6020525f908152604090205460ff1681565b348015610506575f80fd5b506012546103309060ff1681565b34801561051f575f80fd5b5061035461052e366004612806565b610cf1565b34801561053e575f80fd5b5061038460165481565b348015610553575f80fd5b50610354610562366004612806565b610dd5565b348015610572575f80fd5b5061038460095481565b348015610587575f80fd5b506103306105963660046127ad565b600f6020525f908152604090205460ff1681565b3480156105b5575f80fd5b506103546105c436600461282a565b610ebc565b3480156105d4575f80fd5b506103846105e33660046127ad565b6001600160a01b03165f9081526003602052604090205490565b348015610608575f80fd5b50610354610f10565b34801561061c575f80fd5b50610354610f45565b348015610630575f80fd5b50600b54610413906201000090046001600160a01b031681565b348015610655575f80fd5b5061038460085481565b34801561066a575f80fd5b506005546001600160a01b0316610413565b348015610687575f80fd5b50600c54610413906001600160a01b031681565b3480156106a6575f80fd5b506103546106b5366004612861565b610f7b565b3480156106c5575f80fd5b506103546106d43660046128e0565b611019565b3480156106e4575f80fd5b506102fb61105d565b3480156106f8575f80fd5b50610330610707366004612783565b61106c565b348015610717575f80fd5b50610330610726366004612783565b6110f6565b348015610736575f80fd5b5061038460185481565b34801561074b575f80fd5b5061035461075a3660046128fb565b611102565b34801561076a575f80fd5b506103306107793660046127ad565b60116020525f908152604090205460ff1681565b348015610798575f80fd5b506103546107a73660046128fb565b611199565b3480156107b7575f80fd5b506103546107c63660046127ad565b61122c565b3480156107d6575f80fd5b5061038460155481565b3480156107eb575f80fd5b50600654610413906001600160a01b031681565b34801561080a575f80fd5b50610384600a5481565b34801561081f575f80fd5b5061035461082e36600461282a565b6112cb565b34801561083e575f80fd5b5061035461084d36600461291b565b61131f565b34801561085d575f80fd5b50600b546103309060ff1681565b348015610876575f80fd5b50610384610885366004612952565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156108ba575f80fd5b5061038460135481565b3480156108cf575f80fd5b5061038460145481565b3480156108e4575f80fd5b506103546108f33660046127ad565b6115ae565b348015610903575f80fd5b506103546109123660046127ad565b61162e565b60605f80546109259061297e565b80601f01602080910402602001604051908101604052809291908181526020018280546109519061297e565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b5050505050905090565b5f6109b2338484611845565b5060015b92915050565b6005546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e6906129b6565b60405180910390fd5b600b805461ffff1916610101179055565b5f610a0c848484611951565b6001600160a01b0384165f90815260046020908152604080832033845290915290205482811015610a7f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e7400000060448201526064016109e6565b610a8c8533858403611845565b506001949350505050565b6005546001600160a01b03163314610ac15760405162461bcd60e51b81526004016109e6906129b6565b620186a0610ace60025490565b610ad99060016129f1565b610ae39190612a08565b811015610b505760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109e6565b6064610b5b60025490565b610b669060016129f1565b610b709190612a08565b811115610bd95760405162461bcd60e51b815260206004820152603160248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015270371018903a37ba30b61039bab838363c9760791b60648201526084016109e6565b600855565b335f8181526004602090815260408083206001600160a01b038716845290915281205490916109b2918590610c14908690612a27565b611845565b6005546001600160a01b03163314610c435760405162461bcd60e51b81526004016109e6906129b6565b6007546001600160a01b0390811690831603610cc75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109e6565b6001600160a01b03919091165f908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016109e6906129b6565b610d276012600a612b1a565b6103e8610d3360025490565b610d3e9060016129f1565b610d489190612a08565b610d529190612a08565b811015610db95760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060448201526e6c6f776572207468616e20302e312560881b60648201526084016109e6565b610dc56012600a612b1a565b610dcf90826129f1565b600a5550565b6005546001600160a01b03163314610dff5760405162461bcd60e51b81526004016109e6906129b6565b610e0b6012600a612b1a565b6103e8610e1760025490565b610e229060016129f1565b610e2c9190612a08565b610e369190612a08565b811015610ea05760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c6044820152716574206c6f776572207468616e20302e312560701b60648201526084016109e6565b610eac6012600a612b1a565b610eb690826129f1565b60095550565b6005546001600160a01b03163314610ee65760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016109e6906129b6565b610f435f61226c565b565b6005546001600160a01b03163314610f6f5760405162461bcd60e51b81526004016109e6906129b6565b6012805460ff19169055565b6005546001600160a01b03163314610fa55760405162461bcd60e51b81526004016109e6906129b6565b5f5b828110156110135781601a5f868685818110610fc557610fc5612b28565b9050602002016020810190610fda91906127ad565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061100b81612b3c565b915050610fa7565b50505050565b6005546001600160a01b031633146110435760405162461bcd60e51b81526004016109e6906129b6565b600b80549115156101000261ff0019909216919091179055565b6060600180546109259061297e565b335f9081526004602090815260408083206001600160a01b0386168452909152812054828110156110df5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c75650060448201526064016109e6565b6110ec3385858403611845565b5060019392505050565b5f6109b2338484611951565b6005546001600160a01b0316331461112c5760405162461bcd60e51b81526004016109e6906129b6565b601782905560188190556111408183612a27565b6016819055601910156111955760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420323525206f72206c6573730000000060448201526064016109e6565b5050565b6005546001600160a01b031633146111c35760405162461bcd60e51b81526004016109e6906129b6565b601482905560158190556111d78183612a27565b6013819055601910156111955760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420323525206f72206c6573730000000060448201526064016109e6565b6005546001600160a01b031633146112565760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3496b23930b4b732b960611b60448201526064016109e6565b601980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b031633146112f55760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091525f606082018190529192506080016040516020818303038152906040528051906020012090505f82826040516020016114bc92919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201205f80855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611524573d5f803e3d5ffd5b5050506020604051035190506115426005546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146115965760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016109e6565b5050600b805461ffff19166101011790555050505050565b6005546001600160a01b031633146115d85760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b0381166116225760405162461bcd60e51b81526020600482015260116024820152704e6577206f776e6572206973205a45524f60781b60448201526064016109e6565b61162b8161226c565b50565b600c546001600160a01b031633146116705760405162461bcd60e51b815260206004820152600560248201526422a92927a960d91b60448201526064016109e6565b5f6001600160a01b0382166116c857604051339047905f81818185875af1925050503d805f81146116bc576040519150601f19603f3d011682016040523d82523d5f602084013e6116c1565b606091505b5050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561170c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117309190612b54565b1161176c5760405162461bcd60e51b815260206004820152600c60248201526b04572726f723a2045524332360a41b60448201526064016109e6565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156117b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d49190612b54565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611821573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110139190612b6b565b6001600160a01b03831661189b5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204e6f74206f776e657220213d2061646472657373283029000060448201526064016109e6565b6001600160a01b0382166118f15760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f74207370656e64657220213d206164647265737328302960448201526064016109e6565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119a75760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e76616c69642066726f6d2061646472657373000000000060448201526064016109e6565b6001600160a01b0382166119fd5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20496e76616c696420746f20616464726573730000000000000060448201526064016109e6565b6001600160a01b0383165f908152601a602052604090205460ff1615611a655760405162461bcd60e51b815260206004820152601960248201527f45524332303a2066726f6d20697320626c61636b206c6973740000000000000060448201526064016109e6565b6001600160a01b0382165f908152601a602052604090205460ff1615611acd5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746f20697320626c61636b206c69737400000000000000000060448201526064016109e6565b805f03611ae457611adf83835f6122bd565b505050565b60125460ff1615611e45576005546001600160a01b03848116911614801590611b1b57506005546001600160a01b03838116911614155b8015611b2f57506001600160a01b03821615155b8015611b4657506001600160a01b03821661dead14155b8015611b55575060195460ff16155b15611e4557600b5460ff16611be6576001600160a01b0383165f9081526010602052604090205460ff1680611ba157506001600160a01b0382165f9081526010602052604090205460ff165b611be65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109e6565b6001600160a01b0383165f9081526011602052604090205460ff168015611c2557506001600160a01b0382165f908152600f602052604090205460ff16155b15611d0857600a54811115611c9a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760591b60648201526084016109e6565b6009546001600160a01b0383165f90815260036020526040902054611cbf9083612a27565b1115611d035760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e6565b611e45565b6001600160a01b0382165f9081526011602052604090205460ff168015611d4757506001600160a01b0383165f908152600f602052604090205460ff16155b15611dbd57600a54811115611d035760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760511b60648201526084016109e6565b6001600160a01b0382165f908152600f602052604090205460ff16611e45576009546001600160a01b0383165f90815260036020526040902054611e019083612a27565b1115611e455760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e6565b60195461010090046001600160a01b031615801590611ecd5750601954604051639015d37160e01b81523060048201526101009091046001600160a01b031690639015d37190602401602060405180830381865afa158015611ea9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecd9190612b6b565b15611fbf57601954600754600954600a5460085460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a48201525f9261010090049091169063a20527fc9060c4016020604051808303815f875af1158015611f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f779190612b6b565b905080611fbd5760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016109e6565b505b305f90815260036020526040902054600854600b549082101590610100900460ff168015611fea5750805b8015611ff9575060195460ff16155b801561201c57506001600160a01b0384165f9081526011602052604090205460ff165b801561204057506001600160a01b0385165f9081526010602052604090205460ff16155b801561206457506001600160a01b0384165f9081526010602052604090205460ff16155b15612089576019805460ff1916600117905561207e612460565b6019805460ff191690555b6019546001600160a01b0386165f9081526010602052604090205460ff918216159116806120ce57506001600160a01b0385165f9081526010602052604090205460ff165b156120d657505f5b5f8115612258576001600160a01b0386165f9081526011602052604090205460ff16801561210557505f601354115b156121915761212a6064612124601354886125ac90919063ffffffff16565b906125be565b90506013546015548261213d91906129f1565b6121479190612a08565b600e5f8282546121579190612a27565b909155505060135460145461216c90836129f1565b6121769190612a08565b600d5f8282546121869190612a27565b9091555061223a9050565b6001600160a01b0387165f9081526011602052604090205460ff1680156121b957505f601654115b1561223a576121d86064612124601654886125ac90919063ffffffff16565b9050601654601854826121eb91906129f1565b6121f59190612a08565b600e5f8282546122059190612a27565b909155505060165460175461221a90836129f1565b6122249190612a08565b600d5f8282546122349190612a27565b90915550505b801561224b5761224b8730836122bd565b6122558186612b86565b94505b6122638787876122bd565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166123135760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f742066726f6d20213d206164647265737328302900000060448201526064016109e6565b6001600160a01b0382166123695760405162461bcd60e51b815260206004820152601b60248201527f45524332303a204e6f7420746f20213d2061646472657373283029000000000060448201526064016109e6565b6001600160a01b0383165f90815260036020526040902054818110156123d15760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e7460448201526064016109e6565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290612407908490612a27565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161245391815260200190565b60405180910390a3611013565b5f80600e54600d546124729190612a27565b305f9081526003602052604090205490915081158061248f575080155b1561249957505050565b6008546124a79060146129f1565b8111156124bf576008546124bc9060146129f1565b90505b476124c9826125c9565b5f6124d44783612719565b90505f6124f085612124600e54856125ac90919063ffffffff16565b600c546040519192506001600160a01b03169082905f81818185875af1925050503d805f811461253b576040519150601f19603f3d011682016040523d82523d5f602084013e612540565b606091505b5050600b546040519197506201000090046001600160a01b03169047905f81818185875af1925050503d805f8114612593576040519150601f19603f3d011682016040523d82523d5f602084013e612598565b606091505b50505f600d819055600e5550505050505050565b5f6125b782846129f1565b9392505050565b5f6125b78284612a08565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106125fc576125fc612b28565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612653573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126779190612b99565b8160018151811061268a5761268a612b28565b6001600160a01b0392831660209182029290920101526006546126b09130911684611845565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126e89085905f90869030904290600401612bb4565b5f604051808303815f87803b1580156126ff575f80fd5b505af1158015612711573d5f803e3d5ffd5b505050505050565b5f6125b78284612b86565b5f6020808352835180828501525f5b8181101561274f57858101830151858201604001528201612733565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461162b575f80fd5b5f8060408385031215612794575f80fd5b823561279f8161276f565b946020939093013593505050565b5f602082840312156127bd575f80fd5b81356125b78161276f565b5f805f606084860312156127da575f80fd5b83356127e58161276f565b925060208401356127f58161276f565b929592945050506040919091013590565b5f60208284031215612816575f80fd5b5035919050565b801515811461162b575f80fd5b5f806040838503121561283b575f80fd5b82356128468161276f565b915060208301356128568161281d565b809150509250929050565b5f805f60408486031215612873575f80fd5b833567ffffffffffffffff8082111561288a575f80fd5b818601915086601f83011261289d575f80fd5b8135818111156128ab575f80fd5b8760208260051b85010111156128bf575f80fd5b602092830195509350508401356128d58161281d565b809150509250925092565b5f602082840312156128f0575f80fd5b81356125b78161281d565b5f806040838503121561290c575f80fd5b50508035926020909101359150565b5f805f6060848603121561292d575f80fd5b833560ff8116811461293d575f80fd5b95602085013595506040909401359392505050565b5f8060408385031215612963575f80fd5b823561296e8161276f565b915060208301356128568161276f565b600181811c9082168061299257607f821691505b6020821081036129b057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c24b73b30b634b21037bbb732b960991b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109b6576109b66129dd565b5f82612a2257634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156109b6576109b66129dd565b600181815b80851115612a7457815f1904821115612a5a57612a5a6129dd565b80851615612a6757918102915b93841c9390800290612a3f565b509250929050565b5f82612a8a575060016109b6565b81612a9657505f6109b6565b8160018114612aac5760028114612ab657612ad2565b60019150506109b6565b60ff841115612ac757612ac76129dd565b50506001821b6109b6565b5060208310610133831016604e8410600b8410161715612af5575081810a6109b6565b612aff8383612a3a565b805f1904821115612b1257612b126129dd565b029392505050565b5f6125b760ff841683612a7c565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612b4d57612b4d6129dd565b5060010190565b5f60208284031215612b64575f80fd5b5051919050565b5f60208284031215612b7b575f80fd5b81516125b78161281d565b818103818111156109b6576109b66129dd565b5f60208284031215612ba9575f80fd5b81516125b78161276f565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612c025784516001600160a01b031683529383019391830191600101612bdd565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201116a22ef043a83400ad9ab77f2af4cfa521d16ff57f3cf056d129f10ef0c4f764736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102dc575f3560e01c8063751039fc11610189578063b79c1886116100d8578063d4394cf811610092578063e27a55fe1161006d578063e27a55fe146108af578063e96db1ef146108c4578063f2fde38b146108d9578063fc50baf5146108f8575f80fd5b8063d4394cf814610833578063d929a08314610852578063dd62ed3e1461086b575f80fd5b8063b79c18861461078d578063bae14e1d146107ac578063be691883146107cb578063c31c9c07146107e0578063c42c3f88146107ff578063c6a3064714610814575f80fd5b8063924de9b711610143578063a9059cbb1161011e578063a9059cbb1461070c578063af8f26e71461072b578063b38d5ef414610740578063b62496f51461075f575f80fd5b8063924de9b7146106ba57806395d89b41146106d9578063a457c2d7146106ed575f80fd5b8063751039fc1461061157806375f0a874146106255780637d6731701461064a5780638da5cb5b1461065f5780638ea5220f1461067c5780638f85a0431461069b575f80fd5b8063372b44b8116102455780635df6e68e116101ff5780636f498e21116101da5780636f498e211461057c5780637070678b146105aa57806370a08231146105c9578063715018a6146105fd575f80fd5b80635df6e68e1461053357806367b740e914610548578063685fbc6b14610567575f80fd5b8063372b44b81461047a578063395093511461048f57806345167f26146104ae5780634838d165146104cd5780634a62bb65146104fb578063544d1ec914610514575f80fd5b806322f598351161029657806322f59835146103a757806323b872dd146103d557806326991cc8146103f45780632c81355e1461042b578063313ce5671461044a5780633301241114610465575f80fd5b806306fdde03146102e7578063095ea7b3146103115780630bd05b6914610340578063151d80391461035657806318160ddd1461037457806318c34be114610392575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fb610917565b6040516103089190612724565b60405180910390f35b34801561031c575f80fd5b5061033061032b366004612783565b6109a6565b6040519015158152602001610308565b34801561034b575f80fd5b506103546109bc565b005b348015610361575f80fd5b50600b5461033090610100900460ff1681565b34801561037f575f80fd5b506002545b604051908152602001610308565b34801561039d575f80fd5b50610384600d5481565b3480156103b2575f80fd5b506103306103c13660046127ad565b60106020525f908152604090205460ff1681565b3480156103e0575f80fd5b506103306103ef3660046127c8565b610a00565b3480156103ff575f80fd5b50600754610413906001600160a01b031681565b6040516001600160a01b039091168152602001610308565b348015610436575f80fd5b50610354610445366004612806565b610a97565b348015610455575f80fd5b5060405160128152602001610308565b348015610470575f80fd5b5061038460175481565b348015610485575f80fd5b50610384600e5481565b34801561049a575f80fd5b506103306104a9366004612783565b610bde565b3480156104b9575f80fd5b506103546104c836600461282a565b610c19565b3480156104d8575f80fd5b506103306104e73660046127ad565b601a6020525f908152604090205460ff1681565b348015610506575f80fd5b506012546103309060ff1681565b34801561051f575f80fd5b5061035461052e366004612806565b610cf1565b34801561053e575f80fd5b5061038460165481565b348015610553575f80fd5b50610354610562366004612806565b610dd5565b348015610572575f80fd5b5061038460095481565b348015610587575f80fd5b506103306105963660046127ad565b600f6020525f908152604090205460ff1681565b3480156105b5575f80fd5b506103546105c436600461282a565b610ebc565b3480156105d4575f80fd5b506103846105e33660046127ad565b6001600160a01b03165f9081526003602052604090205490565b348015610608575f80fd5b50610354610f10565b34801561061c575f80fd5b50610354610f45565b348015610630575f80fd5b50600b54610413906201000090046001600160a01b031681565b348015610655575f80fd5b5061038460085481565b34801561066a575f80fd5b506005546001600160a01b0316610413565b348015610687575f80fd5b50600c54610413906001600160a01b031681565b3480156106a6575f80fd5b506103546106b5366004612861565b610f7b565b3480156106c5575f80fd5b506103546106d43660046128e0565b611019565b3480156106e4575f80fd5b506102fb61105d565b3480156106f8575f80fd5b50610330610707366004612783565b61106c565b348015610717575f80fd5b50610330610726366004612783565b6110f6565b348015610736575f80fd5b5061038460185481565b34801561074b575f80fd5b5061035461075a3660046128fb565b611102565b34801561076a575f80fd5b506103306107793660046127ad565b60116020525f908152604090205460ff1681565b348015610798575f80fd5b506103546107a73660046128fb565b611199565b3480156107b7575f80fd5b506103546107c63660046127ad565b61122c565b3480156107d6575f80fd5b5061038460155481565b3480156107eb575f80fd5b50600654610413906001600160a01b031681565b34801561080a575f80fd5b50610384600a5481565b34801561081f575f80fd5b5061035461082e36600461282a565b6112cb565b34801561083e575f80fd5b5061035461084d36600461291b565b61131f565b34801561085d575f80fd5b50600b546103309060ff1681565b348015610876575f80fd5b50610384610885366004612952565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156108ba575f80fd5b5061038460135481565b3480156108cf575f80fd5b5061038460145481565b3480156108e4575f80fd5b506103546108f33660046127ad565b6115ae565b348015610903575f80fd5b506103546109123660046127ad565b61162e565b60605f80546109259061297e565b80601f01602080910402602001604051908101604052809291908181526020018280546109519061297e565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b5050505050905090565b5f6109b2338484611845565b5060015b92915050565b6005546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e6906129b6565b60405180910390fd5b600b805461ffff1916610101179055565b5f610a0c848484611951565b6001600160a01b0384165f90815260046020908152604080832033845290915290205482811015610a7f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e7400000060448201526064016109e6565b610a8c8533858403611845565b506001949350505050565b6005546001600160a01b03163314610ac15760405162461bcd60e51b81526004016109e6906129b6565b620186a0610ace60025490565b610ad99060016129f1565b610ae39190612a08565b811015610b505760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109e6565b6064610b5b60025490565b610b669060016129f1565b610b709190612a08565b811115610bd95760405162461bcd60e51b815260206004820152603160248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015270371018903a37ba30b61039bab838363c9760791b60648201526084016109e6565b600855565b335f8181526004602090815260408083206001600160a01b038716845290915281205490916109b2918590610c14908690612a27565b611845565b6005546001600160a01b03163314610c435760405162461bcd60e51b81526004016109e6906129b6565b6007546001600160a01b0390811690831603610cc75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109e6565b6001600160a01b03919091165f908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016109e6906129b6565b610d276012600a612b1a565b6103e8610d3360025490565b610d3e9060016129f1565b610d489190612a08565b610d529190612a08565b811015610db95760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060448201526e6c6f776572207468616e20302e312560881b60648201526084016109e6565b610dc56012600a612b1a565b610dcf90826129f1565b600a5550565b6005546001600160a01b03163314610dff5760405162461bcd60e51b81526004016109e6906129b6565b610e0b6012600a612b1a565b6103e8610e1760025490565b610e229060016129f1565b610e2c9190612a08565b610e369190612a08565b811015610ea05760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c6044820152716574206c6f776572207468616e20302e312560701b60648201526084016109e6565b610eac6012600a612b1a565b610eb690826129f1565b60095550565b6005546001600160a01b03163314610ee65760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016109e6906129b6565b610f435f61226c565b565b6005546001600160a01b03163314610f6f5760405162461bcd60e51b81526004016109e6906129b6565b6012805460ff19169055565b6005546001600160a01b03163314610fa55760405162461bcd60e51b81526004016109e6906129b6565b5f5b828110156110135781601a5f868685818110610fc557610fc5612b28565b9050602002016020810190610fda91906127ad565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061100b81612b3c565b915050610fa7565b50505050565b6005546001600160a01b031633146110435760405162461bcd60e51b81526004016109e6906129b6565b600b80549115156101000261ff0019909216919091179055565b6060600180546109259061297e565b335f9081526004602090815260408083206001600160a01b0386168452909152812054828110156110df5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c75650060448201526064016109e6565b6110ec3385858403611845565b5060019392505050565b5f6109b2338484611951565b6005546001600160a01b0316331461112c5760405162461bcd60e51b81526004016109e6906129b6565b601782905560188190556111408183612a27565b6016819055601910156111955760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420323525206f72206c6573730000000060448201526064016109e6565b5050565b6005546001600160a01b031633146111c35760405162461bcd60e51b81526004016109e6906129b6565b601482905560158190556111d78183612a27565b6013819055601910156111955760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420323525206f72206c6573730000000060448201526064016109e6565b6005546001600160a01b031633146112565760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3496b23930b4b732b960611b60448201526064016109e6565b601980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b031633146112f55760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b03919091165f908152601060205260409020805460ff1916911515919091179055565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091525f606082018190529192506080016040516020818303038152906040528051906020012090505f82826040516020016114bc92919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201205f80855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611524573d5f803e3d5ffd5b5050506020604051035190506115426005546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146115965760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016109e6565b5050600b805461ffff19166101011790555050505050565b6005546001600160a01b031633146115d85760405162461bcd60e51b81526004016109e6906129b6565b6001600160a01b0381166116225760405162461bcd60e51b81526020600482015260116024820152704e6577206f776e6572206973205a45524f60781b60448201526064016109e6565b61162b8161226c565b50565b600c546001600160a01b031633146116705760405162461bcd60e51b815260206004820152600560248201526422a92927a960d91b60448201526064016109e6565b5f6001600160a01b0382166116c857604051339047905f81818185875af1925050503d805f81146116bc576040519150601f19603f3d011682016040523d82523d5f602084013e6116c1565b606091505b5050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561170c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117309190612b54565b1161176c5760405162461bcd60e51b815260206004820152600c60248201526b04572726f723a2045524332360a41b60448201526064016109e6565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156117b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d49190612b54565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611821573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110139190612b6b565b6001600160a01b03831661189b5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204e6f74206f776e657220213d2061646472657373283029000060448201526064016109e6565b6001600160a01b0382166118f15760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f74207370656e64657220213d206164647265737328302960448201526064016109e6565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119a75760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e76616c69642066726f6d2061646472657373000000000060448201526064016109e6565b6001600160a01b0382166119fd5760405162461bcd60e51b815260206004820152601960248201527f45524332303a20496e76616c696420746f20616464726573730000000000000060448201526064016109e6565b6001600160a01b0383165f908152601a602052604090205460ff1615611a655760405162461bcd60e51b815260206004820152601960248201527f45524332303a2066726f6d20697320626c61636b206c6973740000000000000060448201526064016109e6565b6001600160a01b0382165f908152601a602052604090205460ff1615611acd5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746f20697320626c61636b206c69737400000000000000000060448201526064016109e6565b805f03611ae457611adf83835f6122bd565b505050565b60125460ff1615611e45576005546001600160a01b03848116911614801590611b1b57506005546001600160a01b03838116911614155b8015611b2f57506001600160a01b03821615155b8015611b4657506001600160a01b03821661dead14155b8015611b55575060195460ff16155b15611e4557600b5460ff16611be6576001600160a01b0383165f9081526010602052604090205460ff1680611ba157506001600160a01b0382165f9081526010602052604090205460ff165b611be65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109e6565b6001600160a01b0383165f9081526011602052604090205460ff168015611c2557506001600160a01b0382165f908152600f602052604090205460ff16155b15611d0857600a54811115611c9a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760591b60648201526084016109e6565b6009546001600160a01b0383165f90815260036020526040902054611cbf9083612a27565b1115611d035760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e6565b611e45565b6001600160a01b0382165f9081526011602052604090205460ff168015611d4757506001600160a01b0383165f908152600f602052604090205460ff16155b15611dbd57600a54811115611d035760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760511b60648201526084016109e6565b6001600160a01b0382165f908152600f602052604090205460ff16611e45576009546001600160a01b0383165f90815260036020526040902054611e019083612a27565b1115611e455760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e6565b60195461010090046001600160a01b031615801590611ecd5750601954604051639015d37160e01b81523060048201526101009091046001600160a01b031690639015d37190602401602060405180830381865afa158015611ea9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecd9190612b6b565b15611fbf57601954600754600954600a5460085460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a48201525f9261010090049091169063a20527fc9060c4016020604051808303815f875af1158015611f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f779190612b6b565b905080611fbd5760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016109e6565b505b305f90815260036020526040902054600854600b549082101590610100900460ff168015611fea5750805b8015611ff9575060195460ff16155b801561201c57506001600160a01b0384165f9081526011602052604090205460ff165b801561204057506001600160a01b0385165f9081526010602052604090205460ff16155b801561206457506001600160a01b0384165f9081526010602052604090205460ff16155b15612089576019805460ff1916600117905561207e612460565b6019805460ff191690555b6019546001600160a01b0386165f9081526010602052604090205460ff918216159116806120ce57506001600160a01b0385165f9081526010602052604090205460ff165b156120d657505f5b5f8115612258576001600160a01b0386165f9081526011602052604090205460ff16801561210557505f601354115b156121915761212a6064612124601354886125ac90919063ffffffff16565b906125be565b90506013546015548261213d91906129f1565b6121479190612a08565b600e5f8282546121579190612a27565b909155505060135460145461216c90836129f1565b6121769190612a08565b600d5f8282546121869190612a27565b9091555061223a9050565b6001600160a01b0387165f9081526011602052604090205460ff1680156121b957505f601654115b1561223a576121d86064612124601654886125ac90919063ffffffff16565b9050601654601854826121eb91906129f1565b6121f59190612a08565b600e5f8282546122059190612a27565b909155505060165460175461221a90836129f1565b6122249190612a08565b600d5f8282546122349190612a27565b90915550505b801561224b5761224b8730836122bd565b6122558186612b86565b94505b6122638787876122bd565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166123135760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f742066726f6d20213d206164647265737328302900000060448201526064016109e6565b6001600160a01b0382166123695760405162461bcd60e51b815260206004820152601b60248201527f45524332303a204e6f7420746f20213d2061646472657373283029000000000060448201526064016109e6565b6001600160a01b0383165f90815260036020526040902054818110156123d15760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e7460448201526064016109e6565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290612407908490612a27565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161245391815260200190565b60405180910390a3611013565b5f80600e54600d546124729190612a27565b305f9081526003602052604090205490915081158061248f575080155b1561249957505050565b6008546124a79060146129f1565b8111156124bf576008546124bc9060146129f1565b90505b476124c9826125c9565b5f6124d44783612719565b90505f6124f085612124600e54856125ac90919063ffffffff16565b600c546040519192506001600160a01b03169082905f81818185875af1925050503d805f811461253b576040519150601f19603f3d011682016040523d82523d5f602084013e612540565b606091505b5050600b546040519197506201000090046001600160a01b03169047905f81818185875af1925050503d805f8114612593576040519150601f19603f3d011682016040523d82523d5f602084013e612598565b606091505b50505f600d819055600e5550505050505050565b5f6125b782846129f1565b9392505050565b5f6125b78284612a08565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106125fc576125fc612b28565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612653573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126779190612b99565b8160018151811061268a5761268a612b28565b6001600160a01b0392831660209182029290920101526006546126b09130911684611845565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906126e89085905f90869030904290600401612bb4565b5f604051808303815f87803b1580156126ff575f80fd5b505af1158015612711573d5f803e3d5ffd5b505050505050565b5f6125b78284612b86565b5f6020808352835180828501525f5b8181101561274f57858101830151858201604001528201612733565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461162b575f80fd5b5f8060408385031215612794575f80fd5b823561279f8161276f565b946020939093013593505050565b5f602082840312156127bd575f80fd5b81356125b78161276f565b5f805f606084860312156127da575f80fd5b83356127e58161276f565b925060208401356127f58161276f565b929592945050506040919091013590565b5f60208284031215612816575f80fd5b5035919050565b801515811461162b575f80fd5b5f806040838503121561283b575f80fd5b82356128468161276f565b915060208301356128568161281d565b809150509250929050565b5f805f60408486031215612873575f80fd5b833567ffffffffffffffff8082111561288a575f80fd5b818601915086601f83011261289d575f80fd5b8135818111156128ab575f80fd5b8760208260051b85010111156128bf575f80fd5b602092830195509350508401356128d58161281d565b809150509250925092565b5f602082840312156128f0575f80fd5b81356125b78161281d565b5f806040838503121561290c575f80fd5b50508035926020909101359150565b5f805f6060848603121561292d575f80fd5b833560ff8116811461293d575f80fd5b95602085013595506040909401359392505050565b5f8060408385031215612963575f80fd5b823561296e8161276f565b915060208301356128568161276f565b600181811c9082168061299257607f821691505b6020821081036129b057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c24b73b30b634b21037bbb732b960991b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109b6576109b66129dd565b5f82612a2257634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156109b6576109b66129dd565b600181815b80851115612a7457815f1904821115612a5a57612a5a6129dd565b80851615612a6757918102915b93841c9390800290612a3f565b509250929050565b5f82612a8a575060016109b6565b81612a9657505f6109b6565b8160018114612aac5760028114612ab657612ad2565b60019150506109b6565b60ff841115612ac757612ac76129dd565b50506001821b6109b6565b5060208310610133831016604e8410600b8410161715612af5575081810a6109b6565b612aff8383612a3a565b805f1904821115612b1257612b126129dd565b029392505050565b5f6125b760ff841683612a7c565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612b4d57612b4d6129dd565b5060010190565b5f60208284031215612b64575f80fd5b5051919050565b5f60208284031215612b7b575f80fd5b81516125b78161281d565b818103818111156109b6576109b66129dd565b5f60208284031215612ba9575f80fd5b81516125b78161276f565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612c025784516001600160a01b031683529383019391830191600101612bdd565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201116a22ef043a83400ad9ab77f2af4cfa521d16ff57f3cf056d129f10ef0c4f764736f6c63430008140033

Deployed Bytecode Sourcemap

14429:12244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10094:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10666:169;;;;;;;;;;-1:-1:-1;10666:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10666:169:0;1023:187:1;17458:116:0;;;;;;;;;;;;;:::i;:::-;;14753:32;;;;;;;;;;-1:-1:-1;14753:32:0;;;;;;;;;;;10415:108;;;;;;;;;;-1:-1:-1;10503:12:0;;10415:108;;;1361:25:1;;;1349:2;1334:18;10415:108:0;1215:177:1;14864:38:0;;;;;;;;;;;;;;;;15018:48;;;;;;;;;;-1:-1:-1;15018:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11346:397;;;;;;;;;;-1:-1:-1;11346:397:0;;;;;:::i;:::-;;:::i;14547:23::-;;;;;;;;;;-1:-1:-1;14547:23:0;;;;-1:-1:-1;;;;;14547:23:0;;;;;;-1:-1:-1;;;;;2274:32:1;;;2256:51;;2244:2;2229:18;14547:23:0;2110:203:1;19037:348:0;;;;;;;;;;-1:-1:-1;19037:348:0;;;;;:::i;:::-;;:::i;10314:93::-;;;;;;;;;;-1:-1:-1;10314:93:0;;10397:2;2645:36:1;;2633:2;2618:18;10314:93:0;2503:184:1;15320:30:0;;;;;;;;;;;;;;;;14909:32;;;;;;;;;;;;;;;;11920:211;;;;;;;;;;-1:-1:-1;11920:211:0;;;;;:::i;:::-;;:::i;20787:247::-;;;;;;;;;;-1:-1:-1;20787:247:0;;;;;:::i;:::-;;:::i;15455:41::-;;;;;;;;;;-1:-1:-1;15455:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15139:33;;;;;;;;;;-1:-1:-1;15139:33:0;;;;;;;;19681:276;;;;;;;;;;-1:-1:-1;19681:276:0;;;;;:::i;:::-;;:::i;15287:26::-;;;;;;;;;;;;;;;;19393:280;;;;;;;;;;-1:-1:-1;19393:280:0;;;;;:::i;:::-;;:::i;14623:38::-;;;;;;;;;;;;;;;;14950:61;;;;;;;;;;-1:-1:-1;14950:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18524:154;;;;;;;;;;-1:-1:-1;18524:154:0;;;;;:::i;:::-;;:::i;10531:127::-;;;;;;;;;;-1:-1:-1;10531:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10632:18:0;10605:7;10632:18;;;:9;:18;;;;;;;10531:127;1128:103;;;;;;;;;;;;;:::i;18824:90::-;;;;;;;;;;;;;:::i;14794:30::-;;;;;;;;;;-1:-1:-1;14794:30:0;;;;;;;-1:-1:-1;;;;;14794:30:0;;;14583:33;;;;;;;;;;;;;;;;845:87;;;;;;;;;;-1:-1:-1;918:6:0;;-1:-1:-1;;;;;918:6:0;845:87;;14831:24;;;;;;;;;;-1:-1:-1;14831:24:0;;;;-1:-1:-1;;;;;14831:24:0;;;19965:204;;;;;;;;;;-1:-1:-1;19965:204:0;;;;;:::i;:::-;;:::i;18922:107::-;;;;;;;;;;-1:-1:-1;18922:107:0;;;;;:::i;:::-;;:::i;10202:104::-;;;;;;;;;;;;;:::i;12139:360::-;;;;;;;;;;-1:-1:-1;12139:360:0;;;;;:::i;:::-;;:::i;11751:161::-;;;;;;;;;;-1:-1:-1;11751:161:0;;;;;:::i;:::-;;:::i;15357:24::-;;;;;;;;;;;;;;;;20177:290;;;;;;;;;;-1:-1:-1;20177:290:0;;;;;:::i;:::-;;:::i;15073:57::-;;;;;;;;;;-1:-1:-1;15073:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20475:300;;;;;;;;;;-1:-1:-1;20475:300:0;;;;;:::i;:::-;;:::i;21042:197::-;;;;;;;;;;-1:-1:-1;21042:197:0;;;;;:::i;:::-;;:::i;15253:25::-;;;;;;;;;;;;;;;;14504:36;;;;;;;;;;-1:-1:-1;14504:36:0;;;;-1:-1:-1;;;;;14504:36:0;;;14668:35;;;;;;;;;;;;;;;;18686:130;;;;;;;;;;-1:-1:-1;18686:130:0;;;;;:::i;:::-;;:::i;17582:934::-;;;;;;;;;;-1:-1:-1;17582:934:0;;;;;:::i;:::-;;:::i;14712:34::-;;;;;;;;;;-1:-1:-1;14712:34:0;;;;;;;;11187:151;;;;;;;;;;-1:-1:-1;11187:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11303:18:0;;;11276:7;11303:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11187:151;15181:27;;;;;;;;;;;;;;;;15215:31;;;;;;;;;;;;;;;;940:180;;;;;;;;;;-1:-1:-1;940:180:0;;;;;:::i;:::-;;:::i;26093:575::-;;;;;;;;;;-1:-1:-1;26093:575:0;;;;;:::i;:::-;;:::i;10094:100::-;10148:13;10181:5;10174:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10094:100;:::o;10666:169::-;10749:4;10766:39;362:10;10789:7;10798:6;10766:8;:39::i;:::-;-1:-1:-1;10823:4:0;10666:169;;;;;:::o;17458:116::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;;;;;;;;;17515:14:::1;:21:::0;;-1:-1:-1;;17547:19:0;;;;;17458:116::o;11346:397::-;11443:4;11460:27;11470:4;11476:2;11480:6;11460:9;:27::i;:::-;-1:-1:-1;;;;;11517:17:0;;11498:16;11517:17;;;:11;:17;;;;;;;;362:10;11517:31;;;;;;;;11567:18;;;;11559:60;;;;-1:-1:-1;;;11559:60:0;;6422:2:1;11559:60:0;;;6404:21:1;6461:2;6441:18;;;6434:30;6500:31;6480:18;;;6473:59;6549:18;;11559:60:0;6220:353:1;11559:60:0;11655:47;11664:4;362:10;11695:6;11684:8;:17;11655:8;:47::i;:::-;-1:-1:-1;11731:4:0;;11346:397;-1:-1:-1;;;;11346:397:0:o;19037:348::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;19167:6:::1;19146:13;10503:12:::0;;;10415:108;19146:13:::1;:17;::::0;19162:1:::1;19146:17;:::i;:::-;19145:28;;;;:::i;:::-;19135:6;:38;;19127:104;;;::::0;-1:-1:-1;;;19127:104:0;;7307:2:1;19127:104:0::1;::::0;::::1;7289:21:1::0;7346:2;7326:18;;;7319:30;7385:34;7365:18;;;7358:62;-1:-1:-1;;;7436:18:1;;;7429:51;7497:19;;19127:104:0::1;7105:417:1::0;19127:104:0::1;19282:3;19261:13;10503:12:::0;;;10415:108;19261:13:::1;:17;::::0;19277:1:::1;19261:17;:::i;:::-;19260:25;;;;:::i;:::-;19250:6;:35;;19242:97;;;::::0;-1:-1:-1;;;19242:97:0;;7729:2:1;19242:97:0::1;::::0;::::1;7711:21:1::0;7768:2;7748:18;;;7741:30;7807:34;7787:18;;;7780:62;-1:-1:-1;;;7858:18:1;;;7851:47;7915:19;;19242:97:0::1;7527:413:1::0;19242:97:0::1;19350:18;:27:::0;19037:348::o;11920:211::-;362:10;12006:4;12055:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12055:34:0;;;;;;;;;;12006:4;;12023:78;;12046:7;;12055:45;;12092:8;;12055:45;:::i;:::-;12023:8;:78::i;20787:247::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;20906:8:::1;::::0;-1:-1:-1;;;;;20906:8:0;;::::1;20898:16:::0;;::::1;::::0;20890:86:::1;;;::::0;-1:-1:-1;;;20890:86:0;;8277:2:1;20890:86:0::1;::::0;::::1;8259:21:1::0;8316:2;8296:18;;;8289:30;8355:34;8335:18;;;8328:62;8426:27;8406:18;;;8399:55;8471:19;;20890:86:0::1;8075:421:1::0;20890:86:0::1;-1:-1:-1::0;;;;;20987:31:0;;;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;20987:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20787:247::o;19681:276::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;19819:16:::1;10397:2:::0;19819::::1;:16;:::i;:::-;19810:4;19789:13;10503:12:::0;;;10415:108;19789:13:::1;:17;::::0;19805:1:::1;19789:17;:::i;:::-;19788:26;;;;:::i;:::-;19787:49;;;;:::i;:::-;19777:6;:59;;19769:119;;;::::0;-1:-1:-1;;;19769:119:0;;10086:2:1;19769:119:0::1;::::0;::::1;10068:21:1::0;10125:2;10105:18;;;10098:30;10164:34;10144:18;;;10137:62;-1:-1:-1;;;10215:18:1;;;10208:45;10270:19;;19769:119:0::1;9884:411:1::0;19769:119:0::1;19932:16;10397:2:::0;19932::::1;:16;:::i;:::-;19922:27;::::0;:6;:27:::1;:::i;:::-;19899:20;:50:::0;-1:-1:-1;19681:276:0:o;19393:280::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;19529:16:::1;10397:2:::0;19529::::1;:16;:::i;:::-;19520:4;19499:13;10503:12:::0;;;10415:108;19499:13:::1;:17;::::0;19515:1:::1;19499:17;:::i;:::-;19498:26;;;;:::i;:::-;19497:49;;;;:::i;:::-;19487:6;:59;;19479:122;;;::::0;-1:-1:-1;;;19479:122:0;;10502:2:1;19479:122:0::1;::::0;::::1;10484:21:1::0;10541:2;10521:18;;;10514:30;10580:34;10560:18;;;10553:62;-1:-1:-1;;;10631:18:1;;;10624:48;10689:19;;19479:122:0::1;10300:414:1::0;19479:122:0::1;19648:16;10397:2:::0;19648::::1;:16;:::i;:::-;19638:27;::::0;:6;:27:::1;:::i;:::-;19612:23;:53:::0;-1:-1:-1;19393:280:0:o;18524:154::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18627:35:0;;;::::1;;::::0;;;:29:::1;:35;::::0;;;;:43;;-1:-1:-1;;18627:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18524:154::o;1128:103::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;1193:30:::1;1220:1;1193:18;:30::i;:::-;1128:103::o:0;18824:90::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;18884:14:::1;:22:::0;;-1:-1:-1;;18884:22:0::1;::::0;;18824:90::o;19965:204::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;20064:9:::1;20059:103;20079:18:::0;;::::1;20059:103;;;20143:7;20119:9;:21;20129:7;;20137:1;20129:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20119:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20119:21:0;:31;;-1:-1:-1;;20119:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20099:3;::::1;::::0;::::1;:::i;:::-;;;;20059:103;;;;19965:204:::0;;;:::o;18922:107::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;18999:12:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;18999:22:0;;::::1;::::0;;;::::1;::::0;;18922:107::o;10202:104::-;10258:13;10291:7;10284:14;;;;;:::i;12139:360::-;362:10;12225:4;12261:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12261:34:0;;;;;;;;;;12314:20;;;;12306:64;;;;-1:-1:-1;;;12306:64:0;;11193:2:1;12306:64:0;;;11175:21:1;11232:2;11212:18;;;11205:30;11271:33;11251:18;;;11244:61;11322:18;;12306:64:0;10991:355:1;12306:64:0;12406:52;362:10;12429:7;12449:8;12438;:19;12406:8;:52::i;:::-;-1:-1:-1;12487:4:0;;12139:360;-1:-1:-1;;;12139:360:0:o;11751:161::-;11830:4;11847:35;362:10;11871:2;11875:6;11847:9;:35::i;20177:290::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;20276:15:::1;:30:::0;;;20317:9:::1;:21:::0;;;20363:27:::1;20329:9:::0;20294:12;20363:27:::1;:::i;:::-;20349:11;:41:::0;;;20424:2:::1;-1:-1:-1::0;20409:17:0::1;20401:58;;;::::0;-1:-1:-1;;;20401:58:0;;11553:2:1;20401:58:0::1;::::0;::::1;11535:21:1::0;11592:2;11572:18;;;11565:30;11631;11611:18;;;11604:58;11679:18;;20401:58:0::1;11351:352:1::0;20401:58:0::1;20177:290:::0;;:::o;20475:300::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;20578:16:::1;:31:::0;;;20620:10:::1;:22:::0;;;20668:29:::1;20633:9:::0;20597:12;20668:29:::1;:::i;:::-;20653:12;:44:::0;;;20732:2:::1;-1:-1:-1::0;20716:18:0::1;20708:59;;;::::0;-1:-1:-1;;;20708:59:0;;11553:2:1;20708:59:0::1;::::0;::::1;11535:21:1::0;11592:2;11572:18;;;11565:30;11631;11611:18;;;11604:58;11679:18;;20708:59:0::1;11351:352:1::0;21042:197:0;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21137:30:0;::::1;21129:63;;;::::0;-1:-1:-1;;;21129:63:0;;11910:2:1;21129:63:0::1;::::0;::::1;11892:21:1::0;11949:2;11929:18;;;11922:30;-1:-1:-1;;;11968:18:1;;;11961:50;12028:18;;21129:63:0::1;11708:344:1::0;21129:63:0::1;21203:11;:28:::0;;-1:-1:-1;;;;;21203:28:0;;::::1;;;-1:-1:-1::0;;;;;;21203:28:0;;::::1;::::0;;;::::1;::::0;;21042:197::o;18686:130::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18775:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:33;;-1:-1:-1;;18775:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18686:130::o;17582:934::-;17844:22;;;;;;;;;;;-1:-1:-1;;;17844:22:0;;;;;17892:10;;;;;;;;;;-1:-1:-1;;;17892:10:0;;;;17699:271;;17724:95;17699:271;;;12316:25:1;;;;17834:33:0;12357:18:1;;;12350:34;;;;17882:21:0;12400:18:1;;;12393:34;17918:13:0;12443:18:1;;;12436:34;17954:4:0;12486:19:1;;;12479:61;-1:-1:-1;;12288:19:1;;17699:271:0;;;;;;-1:-1:-1;;17699:271:0;;;;;;17689:282;;17699:271;17689:282;;;;18112:23;;;;;;;;-1:-1:-1;;;18112:23:0;;;;;;;18013:159;;18038:49;18013:159;;;12753:25:1;;;;18102:34:0;12794:18:1;;;12787:34;;;;-1:-1:-1;12837:18:1;;;12830:34;;;17689:282:0;;-1:-1:-1;12726:18:1;;18013:159:0;;;;;;;;;;;;18003:170;;;;;;17982:191;;18184:14;18267:10;18292;18211:118;;;;;;;;-1:-1:-1;;;13133:27:1;;13185:1;13176:11;;13169:27;;;;13221:2;13212:12;;13205:28;13258:2;13249:12;;12875:392;18211:118:0;;;;-1:-1:-1;;18211:118:0;;;;;;;;;18201:129;;18211:118;18201:129;;;;18343:14;18360:26;;;;;;;;;13499:25:1;;;13572:4;13560:17;;13540:18;;;13533:45;;;;13594:18;;;13587:34;;;13637:18;;;13630:34;;;18201:129:0;;-1:-1:-1;18343:14:0;18360:26;;13471:19:1;;18360:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18343:43;;18415:7;918:6;;-1:-1:-1;;;;;918:6:0;;845:87;18415:7;-1:-1:-1;;;;;18405:17:0;:6;-1:-1:-1;;;;;18405:17:0;;18397:47;;;;-1:-1:-1;;;18397:47:0;;13877:2:1;18397:47:0;;;13859:21:1;13916:2;13896:18;;;13889:30;-1:-1:-1;;;13935:18:1;;;13928:47;13992:18;;18397:47:0;13675:341:1;18397:47:0;-1:-1:-1;;18457:14:0;:21;;-1:-1:-1;;18489:19:0;;;;;-1:-1:-1;;;;;17582:934:0:o;940:180::-;918:6;;-1:-1:-1;;;;;918:6:0;362:10;776:23;768:49;;;;-1:-1:-1;;;768:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1029:22:0;::::1;1021:52;;;::::0;-1:-1:-1;;;1021:52:0;;14223:2:1;1021:52:0::1;::::0;::::1;14205:21:1::0;14262:2;14242:18;;;14235:30;-1:-1:-1;;;14281:18:1;;;14274:47;14338:18;;1021:52:0::1;14021:341:1::0;1021:52:0::1;1084:28;1103:8;1084:18;:28::i;:::-;940:180:::0;:::o;26093:575::-;26188:9;;-1:-1:-1;;;;;26188:9:0;26166:10;:32;26158:50;;;;-1:-1:-1;;;26158:50:0;;14569:2:1;26158:50:0;;;14551:21:1;14608:1;14588:18;;;14581:29;-1:-1:-1;;;14626:18:1;;;14619:35;14671:18;;26158:50:0;14367:328:1;26158:50:0;26219:12;-1:-1:-1;;;;;26246:29:0;;26242:419;;26304:90;;26312:10;;26354:21;;26304:90;;;;26354:21;26312:10;26304:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20177:290:0:o;26242:419::-;26433:48;;-1:-1:-1;;;26433:48:0;;26475:4;26433:48;;;2256:51:1;26484:1:0;;-1:-1:-1;;;;;26433:33:0;;;;;2229:18:1;;26433:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;26425:77;;;;-1:-1:-1;;;26425:77:0;;15301:2:1;26425:77:0;;;15283:21:1;15340:2;15320:18;;;15313:30;-1:-1:-1;;;15359:18:1;;;15352:42;15411:18;;26425:77:0;15099:336:1;26425:77:0;26534:48;;-1:-1:-1;;;26534:48:0;;26576:4;26534:48;;;2256:51:1;26517:14:0;;-1:-1:-1;;;;;26534:33:0;;;;;2229:18:1;;26534:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26597:52;;-1:-1:-1;;;26597:52:0;;26630:10;26597:52;;;15614:51:1;15681:18;;;15674:34;;;26517:65:0;;-1:-1:-1;;;;;;26597:32:0;;;;;15587:18:1;;26597:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10843:336::-;-1:-1:-1;;;;;10945:19:0;;10937:62;;;;-1:-1:-1;;;10937:62:0;;16171:2:1;10937:62:0;;;16153:21:1;16210:2;16190:18;;;16183:30;16249:32;16229:18;;;16222:60;16299:18;;10937:62:0;15969:354:1;10937:62:0;-1:-1:-1;;;;;11018:21:0;;11010:66;;;;-1:-1:-1;;;11010:66:0;;16530:2:1;11010:66:0;;;16512:21:1;;;16549:18;;;16542:30;16608:34;16588:18;;;16581:62;16660:18;;11010:66:0;16328:356:1;11010:66:0;-1:-1:-1;;;;;11087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11139:32;;1361:25:1;;;11139:32:0;;1334:18:1;11139:32:0;;;;;;;10843:336;;;:::o;22139:3227::-;-1:-1:-1;;;;;22271:18:0;;22263:58;;;;-1:-1:-1;;;22263:58:0;;16891:2:1;22263:58:0;;;16873:21:1;16930:2;16910:18;;;16903:30;16969:29;16949:18;;;16942:57;17016:18;;22263:58:0;16689:351:1;22263:58:0;-1:-1:-1;;;;;22340:16:0;;22332:54;;;;-1:-1:-1;;;22332:54:0;;17247:2:1;22332:54:0;;;17229:21:1;17286:2;17266:18;;;17259:30;17325:27;17305:18;;;17298:55;17370:18;;22332:54:0;17045:349:1;22332:54:0;-1:-1:-1;;;;;22406:15:0;;;;;;:9;:15;;;;;;;;22405:16;22397:54;;;;-1:-1:-1;;;22397:54:0;;17601:2:1;22397:54:0;;;17583:21:1;17640:2;17620:18;;;17613:30;17679:27;17659:18;;;17652:55;17724:18;;22397:54:0;17399:349:1;22397:54:0;-1:-1:-1;;;;;22471:13:0;;;;;;:9;:13;;;;;;;;22470:14;22462:50;;;;-1:-1:-1;;;22462:50:0;;17955:2:1;22462:50:0;;;17937:21:1;17994:2;17974:18;;;17967:30;18033:25;18013:18;;;18006:53;18076:18;;22462:50:0;17753:347:1;22462:50:0;22529:6;22539:1;22529:11;22525:93;;22557:28;22573:4;22579:2;22583:1;22557:15;:28::i;:::-;22139:3227;;;:::o;22525:93::-;22634:14;;;;22630:1085;;;918:6;;-1:-1:-1;;;;;22669:15:0;;;918:6;;22669:15;;;;:32;;-1:-1:-1;918:6:0;;-1:-1:-1;;;;;22688:13:0;;;918:6;;22688:13;;22669:32;:52;;;;-1:-1:-1;;;;;;22705:16:0;;;;22669:52;:77;;;;-1:-1:-1;;;;;;22725:21:0;;22739:6;22725:21;;22669:77;:91;;;;-1:-1:-1;22751:9:0;;;;22750:10;22669:91;22665:1039;;;22786:14;;;;22781:145;;-1:-1:-1;;;;;22833:22:0;;;;;;:16;:22;;;;;;;;;:46;;-1:-1:-1;;;;;;22859:20:0;;;;;;:16;:20;;;;;;;;22833:46;22825:81;;;;-1:-1:-1;;;22825:81:0;;18307:2:1;22825:81:0;;;18289:21:1;18346:2;18326:18;;;18319:30;-1:-1:-1;;;18365:18:1;;;18358:52;18427:18;;22825:81:0;18105:346:1;22825:81:0;-1:-1:-1;;;;;22950:31:0;;;;;;:25;:31;;;;;;;;:69;;;;-1:-1:-1;;;;;;22986:33:0;;;;;;:29;:33;;;;;;;;22985:34;22950:69;22946:743;;;23062:20;;23052:6;:30;;23044:96;;;;-1:-1:-1;;;23044:96:0;;18658:2:1;23044:96:0;;;18640:21:1;18697:2;18677:18;;;18670:30;18736:34;18716:18;;;18709:62;-1:-1:-1;;;18787:18:1;;;18780:51;18848:19;;23044:96:0;18456:417:1;23044:96:0;23197:23;;-1:-1:-1;;;;;10632:18:0;;10605:7;10632:18;;;:9;:18;;;;;;23171:22;;:6;:22;:::i;:::-;:49;;23163:81;;;;-1:-1:-1;;;23163:81:0;;19080:2:1;23163:81:0;;;19062:21:1;19119:2;19099:18;;;19092:30;-1:-1:-1;;;19138:18:1;;;19131:49;19197:18;;23163:81:0;18878:343:1;23163:81:0;22946:743;;;-1:-1:-1;;;;;23291:29:0;;;;;;:25;:29;;;;;;;;:69;;;;-1:-1:-1;;;;;;23325:35:0;;;;;;:29;:35;;;;;;;;23324:36;23291:69;23287:402;;;23403:20;;23393:6;:30;;23385:97;;;;-1:-1:-1;;;23385:97:0;;19428:2:1;23385:97:0;;;19410:21:1;19467:2;19447:18;;;19440:30;19506:34;19486:18;;;19479:62;-1:-1:-1;;;19557:18:1;;;19550:52;19619:19;;23385:97:0;19226:418:1;23287:402:0;-1:-1:-1;;;;;23530:33:0;;;;;;:29;:33;;;;;;;;23525:164;;23622:23;;-1:-1:-1;;;;;10632:18:0;;10605:7;10632:18;;;:9;:18;;;;;;23596:22;;:6;:22;:::i;:::-;:49;;23588:81;;;;-1:-1:-1;;;23588:81:0;;19080:2:1;23588:81:0;;;19062:21:1;19119:2;19099:18;;;19092:30;-1:-1:-1;;;19138:18:1;;;19131:49;19197:18;;23588:81:0;18878:343:1;23588:81:0;23731:11;;;;;-1:-1:-1;;;;;23731:11:0;:25;;;;:79;;-1:-1:-1;23773:11:0;;23760:50;;-1:-1:-1;;;23760:50:0;;23804:4;23760:50;;;2256:51:1;23773:11:0;;;;-1:-1:-1;;;;;23773:11:0;;23760:35;;2229:18:1;;23760:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23727:305;;;23853:11;;23890:8;;23901:23;;23926:20;;23948:18;;23840:127;;-1:-1:-1;;;23840:127:0;;-1:-1:-1;;;;;19992:15:1;;;23840:127:0;;;19974:34:1;20044:15;;;20024:18;;;20017:43;23890:8:0;;;20076:18:1;;;20069:43;20128:18;;;20121:34;;;;20171:19;;;20164:35;;;;20215:19;;;20208:35;23827:10:0;;23853:11;;;;;;;23840:31;;19908:19:1;;23840:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23827:140;;23990:5;23982:38;;;;-1:-1:-1;;;23982:38:0;;20456:2:1;23982:38:0;;;20438:21:1;20495:2;20475:18;;;20468:30;-1:-1:-1;;;20514:18:1;;;20507:50;20574:18;;23982:38:0;20254:344:1;23982:38:0;23812:220;23727:305;24085:4;24044:20;10632:18;;;:9;:18;;;;;;24133;;24166:12;;24117:34;;;;;24166:12;;;;;:23;;;;;24182:7;24166:23;:37;;;;-1:-1:-1;24194:9:0;;;;24193:10;24166:37;:83;;;;-1:-1:-1;;;;;;24220:29:0;;;;;;:25;:29;;;;;;;;24166:83;:110;;;;-1:-1:-1;;;;;;24254:22:0;;;;;;:16;:22;;;;;;;;24253:23;24166:110;:135;;;;-1:-1:-1;;;;;;24281:20:0;;;;;;:16;:20;;;;;;;;24280:21;24166:135;24162:241;;;24318:9;:16;;-1:-1:-1;;24318:16:0;24330:4;24318:16;;;24349:10;:8;:10::i;:::-;24374:9;:17;;-1:-1:-1;;24374:17:0;;;24162:241;24428:9;;-1:-1:-1;;;;;24452:22:0;;24415:9;24452:22;;;:16;:22;;;;;;24428:9;;;;24427:10;;24452:22;;:46;;-1:-1:-1;;;;;;24478:20:0;;;;;;:16;:20;;;;;;;;24452:46;24448:77;;;-1:-1:-1;24520:5:0;24448:77;24538:12;24569:4;24565:748;;;-1:-1:-1;;;;;24594:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;24642:1;24627:12;;:16;24594:49;24590:595;;;24671:33;24700:3;24671:24;24682:12;;24671:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;24664:40;;24766:12;;24752:10;;24745:4;:17;;;;:::i;:::-;24744:34;;;;:::i;:::-;24723:17;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;24852:12:0;;24832:16;;24825:23;;:4;:23;:::i;:::-;24824:40;;;;:::i;:::-;24797:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;24590:595:0;;-1:-1:-1;24590:595:0;;-1:-1:-1;;;;;24903:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;24952:1;24938:11;;:15;24903:50;24899:286;;;24981:32;25009:3;24981:23;24992:11;;24981:6;:10;;:23;;;;:::i;:32::-;24974:39;;25074:11;;25061:9;;25054:4;:16;;;;:::i;:::-;25053:32;;;;:::i;:::-;25032:17;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;25158:11:0;;25139:15;;25132:22;;:4;:22;:::i;:::-;25131:38;;;;:::i;:::-;25104:23;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;24899:286:0;25203:8;;25199:73;;25230:42;25246:4;25260;25267;25230:15;:42::i;:::-;25287:14;25297:4;25287:14;;:::i;:::-;;;24565:748;25325:33;25341:4;25347:2;25351:6;25325:15;:33::i;:::-;22252:3114;;;;22139:3227;;;:::o;1239:191::-;1332:6;;;-1:-1:-1;;;;;1349:17:0;;;-1:-1:-1;;;;;;1349:17:0;;;;;;;1382:40;;1332:6;;;1349:17;1332:6;;1382:40;;1313:16;;1382:40;1302:128;1239:191;:::o;13663:607::-;-1:-1:-1;;;;;13760:18:0;;13752:60;;;;-1:-1:-1;;;13752:60:0;;20938:2:1;13752:60:0;;;20920:21:1;20977:2;20957:18;;;20950:30;21016:31;20996:18;;;20989:59;21065:18;;13752:60:0;20736:353:1;13752:60:0;-1:-1:-1;;;;;13831:16:0;;13823:56;;;;-1:-1:-1;;;13823:56:0;;21296:2:1;13823:56:0;;;21278:21:1;21335:2;21315:18;;;21308:30;21374:29;21354:18;;;21347:57;21421:18;;13823:56:0;21094:351:1;13823:56:0;-1:-1:-1;;;;;13961:15:0;;13939:19;13961:15;;;:9;:15;;;;;;13995:21;;;;13987:66;;;;-1:-1:-1;;;13987:66:0;;21652:2:1;13987:66:0;;;21634:21:1;;;21671:18;;;21664:30;21730:34;21710:18;;;21703:62;21782:18;;13987:66:0;21450:356:1;13987:66:0;-1:-1:-1;;;;;14089:15:0;;;;;;;:9;:15;;;;;;14107:20;;;14089:38;;14149:13;;;;;;;;:23;;14121:6;;14089:15;14149:23;;14121:6;;14149:23;:::i;:::-;;;;;;;;14203:2;-1:-1:-1;;;;;14188:26:0;14197:4;-1:-1:-1;;;;;14188:26:0;;14207:6;14188:26;;;;1361:25:1;;1349:2;1334:18;;1215:177;14188:26:0;;;;;;;;14225:37;22139:3227;21247:884;21286:12;21309:25;21363:17;;21337:23;;:43;;;;:::i;:::-;21432:4;21391:20;10632:18;;;:9;:18;;;;;;21309:71;;-1:-1:-1;21455:22:0;;;:43;;-1:-1:-1;21481:17:0;;21455:43;21451:69;;;21513:7;;;21247:884::o;21451:69::-;21551:18;;:23;;21572:2;21551:23;:::i;:::-;21536:12;:38;21532:95;;;21604:18;;:23;;21625:2;21604:23;:::i;:::-;21589:38;;21532:95;21665:21;21697:30;21714:12;21697:16;:30::i;:::-;21740:18;21761:41;:21;21787:14;21761:25;:41::i;:::-;21740:62;;21813:17;21833:56;21871:17;21833:33;21848:17;;21833:10;:14;;:33;;;;:::i;:56::-;21924:9;;21916:45;;21813:76;;-1:-1:-1;;;;;;21924:9:0;;21813:76;;21916:45;;;;21813:76;21924:9;21916:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21994:15:0;;21986:65;;21902:59;;-1:-1:-1;21994:15:0;;;-1:-1:-1;;;;;21994:15:0;;22024:21;;21986:65;;;;22024:21;21994:15;21986:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22090:1:0;22064:23;:27;;;22102:17;:21;-1:-1:-1;;;;;;;21247:884:0:o;1461:98::-;1519:7;1546:5;1550:1;1546;:5;:::i;:::-;1539:12;1461:98;-1:-1:-1;;;1461:98:0:o;1845:::-;1903:7;1930:5;1934:1;1930;:5;:::i;25526:559::-;25671:16;;;25685:1;25671:16;;;;;;;;25647:21;;25671:16;;;;;;;;;;-1:-1:-1;25671:16:0;25647:40;;25716:4;25698;25703:1;25698:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25698:23:0;;;:7;;;;;;;;;;:23;;;;25742:10;;:17;;;-1:-1:-1;;;25742:17:0;;;;:10;;;;;:15;;:17;;;;;25698:7;;25742:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25732:4;25737:1;25732:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25732:27:0;;;:7;;;;;;;;;:27;25804:10;;25772:52;;25789:4;;25804:10;25817:6;25772:8;:52::i;:::-;25863:10;;:214;;-1:-1:-1;;;25863:214:0;;-1:-1:-1;;;;;25863:10:0;;;;:61;;:214;;25939:6;;25863:10;;26004:4;;26031;;26051:15;;25863:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25576:509;25526:559;:::o;2490:98::-;2548:7;2575:5;2579:1;2575;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1649:456::-;1726:6;1734;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;:::-;1919:5;-1:-1:-1;1976:2:1;1961:18;;1948:32;1989:33;1948:32;1989:33;:::i;:::-;1649:456;;2041:7;;-1:-1:-1;;;2095:2:1;2080:18;;;;2067:32;;1649:456::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2692:118::-;2778:5;2771:13;2764:21;2757:5;2754:32;2744:60;;2800:1;2797;2790:12;2815:382;2880:6;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2996:9;2983:23;3015:31;3040:5;3015:31;:::i;:::-;3065:5;-1:-1:-1;3122:2:1;3107:18;;3094:32;3135:30;3094:32;3135:30;:::i;:::-;3184:7;3174:17;;;2815:382;;;;;:::o;3202:750::-;3294:6;3302;3310;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;3419:9;3406:23;3448:18;3489:2;3481:6;3478:14;3475:34;;;3505:1;3502;3495:12;3475:34;3543:6;3532:9;3528:22;3518:32;;3588:7;3581:4;3577:2;3573:13;3569:27;3559:55;;3610:1;3607;3600:12;3559:55;3650:2;3637:16;3676:2;3668:6;3665:14;3662:34;;;3692:1;3689;3682:12;3662:34;3747:7;3740:4;3730:6;3727:1;3723:14;3719:2;3715:23;3711:34;3708:47;3705:67;;;3768:1;3765;3758:12;3705:67;3799:4;3791:13;;;;-1:-1:-1;3823:6:1;-1:-1:-1;;3864:20:1;;3851:34;3894:28;3851:34;3894:28;:::i;:::-;3941:5;3931:15;;;3202:750;;;;;:::o;3957:241::-;4013:6;4066:2;4054:9;4045:7;4041:23;4037:32;4034:52;;;4082:1;4079;4072:12;4034:52;4121:9;4108:23;4140:28;4162:5;4140:28;:::i;4203:248::-;4271:6;4279;4332:2;4320:9;4311:7;4307:23;4303:32;4300:52;;;4348:1;4345;4338:12;4300:52;-1:-1:-1;;4371:23:1;;;4441:2;4426:18;;;4413:32;;-1:-1:-1;4203:248:1:o;4690:405::-;4765:6;4773;4781;4834:2;4822:9;4813:7;4809:23;4805:32;4802:52;;;4850:1;4847;4840:12;4802:52;4889:9;4876:23;4939:4;4932:5;4928:16;4921:5;4918:27;4908:55;;4959:1;4956;4949:12;4908:55;4982:5;5034:2;5019:18;;5006:32;;-1:-1:-1;5085:2:1;5070:18;;;5057:32;;4690:405;-1:-1:-1;;;4690:405:1:o;5100:388::-;5168:6;5176;5229:2;5217:9;5208:7;5204:23;5200:32;5197:52;;;5245:1;5242;5235:12;5197:52;5284:9;5271:23;5303:31;5328:5;5303:31;:::i;:::-;5353:5;-1:-1:-1;5410:2:1;5395:18;;5382:32;5423:33;5382:32;5423:33;:::i;5493:380::-;5572:1;5568:12;;;;5615;;;5636:61;;5690:4;5682:6;5678:17;5668:27;;5636:61;5743:2;5735:6;5732:14;5712:18;5709:38;5706:161;;5789:10;5784:3;5780:20;5777:1;5770:31;5824:4;5821:1;5814:15;5852:4;5849:1;5842:15;5706:161;;5493:380;;;:::o;5878:337::-;6080:2;6062:21;;;6119:2;6099:18;;;6092:30;-1:-1:-1;;;6153:2:1;6138:18;;6131:43;6206:2;6191:18;;5878:337::o;6578:127::-;6639:10;6634:3;6630:20;6627:1;6620:31;6670:4;6667:1;6660:15;6694:4;6691:1;6684:15;6710:168;6783:9;;;6814;;6831:15;;;6825:22;;6811:37;6801:71;;6852:18;;:::i;6883:217::-;6923:1;6949;6939:132;;6993:10;6988:3;6984:20;6981:1;6974:31;7028:4;7025:1;7018:15;7056:4;7053:1;7046:15;6939:132;-1:-1:-1;7085:9:1;;6883:217::o;7945:125::-;8010:9;;;8031:10;;;8028:36;;;8044:18;;:::i;8501:422::-;8590:1;8633:5;8590:1;8647:270;8668:7;8658:8;8655:21;8647:270;;;8727:4;8723:1;8719:6;8715:17;8709:4;8706:27;8703:53;;;8736:18;;:::i;:::-;8786:7;8776:8;8772:22;8769:55;;;8806:16;;;;8769:55;8885:22;;;;8845:15;;;;8647:270;;;8651:3;8501:422;;;;;:::o;8928:806::-;8977:5;9007:8;8997:80;;-1:-1:-1;9048:1:1;9062:5;;8997:80;9096:4;9086:76;;-1:-1:-1;9133:1:1;9147:5;;9086:76;9178:4;9196:1;9191:59;;;;9264:1;9259:130;;;;9171:218;;9191:59;9221:1;9212:10;;9235:5;;;9259:130;9296:3;9286:8;9283:17;9280:43;;;9303:18;;:::i;:::-;-1:-1:-1;;9359:1:1;9345:16;;9374:5;;9171:218;;9473:2;9463:8;9460:16;9454:3;9448:4;9445:13;9441:36;9435:2;9425:8;9422:16;9417:2;9411:4;9408:12;9404:35;9401:77;9398:159;;;-1:-1:-1;9510:19:1;;;9542:5;;9398:159;9589:34;9614:8;9608:4;9589:34;:::i;:::-;9659:6;9655:1;9651:6;9647:19;9638:7;9635:32;9632:58;;;9670:18;;:::i;:::-;9708:20;;8928:806;-1:-1:-1;;;8928:806:1:o;9739:140::-;9797:5;9826:47;9867:4;9857:8;9853:19;9847:4;9826:47;:::i;10719:127::-;10780:10;10775:3;10771:20;10768:1;10761:31;10811:4;10808:1;10801:15;10835:4;10832:1;10825:15;10851:135;10890:3;10911:17;;;10908:43;;10931:18;;:::i;:::-;-1:-1:-1;10978:1:1;10967:13;;10851:135::o;14910:184::-;14980:6;15033:2;15021:9;15012:7;15008:23;15004:32;15001:52;;;15049:1;15046;15039:12;15001:52;-1:-1:-1;15072:16:1;;14910:184;-1:-1:-1;14910:184:1:o;15719:245::-;15786:6;15839:2;15827:9;15818:7;15814:23;15810:32;15807:52;;;15855:1;15852;15845:12;15807:52;15887:9;15881:16;15906:28;15928:5;15906:28;:::i;20603:128::-;20670:9;;;20691:11;;;20688:37;;;20705:18;;:::i;21943:251::-;22013:6;22066:2;22054:9;22045:7;22041:23;22037:32;22034:52;;;22082:1;22079;22072:12;22034:52;22114:9;22108:16;22133:31;22158:5;22133:31;:::i;22199:980::-;22461:4;22509:3;22498:9;22494:19;22540:6;22529:9;22522:25;22566:2;22604:6;22599:2;22588:9;22584:18;22577:34;22647:3;22642:2;22631:9;22627:18;22620:31;22671:6;22706;22700:13;22737:6;22729;22722:22;22775:3;22764:9;22760:19;22753:26;;22814:2;22806:6;22802:15;22788:29;;22835:1;22845:195;22859:6;22856:1;22853:13;22845:195;;;22924:13;;-1:-1:-1;;;;;22920:39:1;22908:52;;23015:15;;;;22980:12;;;;22956:1;22874:9;22845:195;;;-1:-1:-1;;;;;;;23096:32:1;;;;23091:2;23076:18;;23069:60;-1:-1:-1;;;23160:3:1;23145:19;23138:35;23057:3;22199:980;-1:-1:-1;;;22199:980:1:o

Swarm Source

ipfs://1116a22ef043a83400ad9ab77f2af4cfa521d16ff57f3cf056d129f10ef0c4f7
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.