ETH Price: $2,917.58 (+3.48%)
 

Overview

Max Total Supply

1,000,000,000 PoS

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,302,827.655237068345429174 PoS

Value
$0.00
0xAab095964EE9eD85e6083999C655Bb024ca08a66
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:
PolygonStar

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-27
*/

// website: https://www.polygonstar.xyz

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

pragma solidity ^0.8.0;

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

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

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

pragma solidity ^0.8.0;

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

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

    function totalSupply() external view returns (uint256);

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

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

pragma solidity >=0.5.0;

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

    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;

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

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

pragma solidity ^0.8.0;

library SafeMath {
    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 trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, 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 add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

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

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return 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;
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    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 transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

        _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: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

pragma solidity ^0.8.0;

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

    event UpdateAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);


    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    uint256 public _totalFees;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _stakingFee;
    uint256 private _additionalSellFee;
    uint256 private _additionalBuyFee;
    uint256 private _marketingTokens;
    uint256 private _stakingTokens;
    uint256 private _liquidityTokens;
    uint256 private _swapTimes;
    bool private _swappingBack;
    address private _marketingAddr;
    address private _stakingAddr;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    receive() external payable {}

    constructor() ERC20("Polygon Star", "PoS") {
        uint256 totalSupply = 1_000_000_000 * 1e18;
        _maxTransactionAmount = (totalSupply * 2) / 100;
        _maxWallet = (totalSupply * 2) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        _marketingFee = 2;
        _stakingFee = 2;
        _liquidityFee = 0;
        _additionalSellFee = 0;
        _additionalBuyFee = 0;
        _totalFees = _marketingFee + _stakingFee + _liquidityFee;

        _marketingAddr = address(0xdbeBDbaB348D1CB1F52C15Ce1Cab228790599fa5);
        _stakingAddr = address(0xAAF39227c355d6177aD0b897eb8838B133dBF337);
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _updateAutomatedMarketMakerPair(address(_uniswapV2Pair), true);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        excludeFromFees(owner(), true);
        excludeFromFees(_marketingAddr, true);
        excludeFromFees(_stakingAddr, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_marketingAddr, true);
        excludeFromMaxTransaction(_stakingAddr, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(owner(), totalSupply);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function disableAdditionalSellFee() public onlyOwner {
        _additionalSellFee = 0;
    }

    function disableAdditionalBuyFee() public onlyOwner {
        _additionalBuyFee = 0;
    }


    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        _maxWallet = newNum * 1e18;
    }

    function updateAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _updateAutomatedMarketMakerPair(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function _updateAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateFees(uint256 marketingFee, uint256 stakingFee, uint256 liquidityFee) external onlyOwner {
        _marketingFee = marketingFee;
        _stakingFee = stakingFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _stakingFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateMarketingAddr(address newWallet) external onlyOwner {
        _marketingAddr = newWallet;
    }

    function updateStakingAddr(address newWallet) external onlyOwner {
        _stakingAddr = newWallet;
    }

    function startTrading() public onlyOwner {
        _tradingActive = true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }

    function needTakeFee(address from, address to) private returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFees[to]) _swapTimes += 1;
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);
        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }

    function _transfer(address from ,address to, uint256 amount) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[from] ||
            _isExcludedFromFees[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            _tradingActive || isExcludeFromFee,
            "Trading is not active."
        );

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

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
                // require(
                //     amount <= _maxTransactionAmount,
                //     "Sell transfer amount exceeds the maxTransactionAmount."
                // );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            if (_swapTimes > 0) return;
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (canSwap && !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }
        transferInternal(from, to, amount, isSell, isBuy);
    }

    function transferInternal(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool takeFee = needTakeFee(from, to);
        if (takeFee) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isBuy) {
                total = _totalFees + _additionalBuyFee;
                marketing = _marketingFee + _additionalBuyFee;
            }
            if (isSell) {
                total = _totalFees + _additionalSellFee;
                marketing = _marketingFee + _additionalSellFee;
            }
            
            uint256 fees = amount.mul(total).div(100);
            _marketingTokens += (fees * marketing) / total;
            _stakingTokens += (fees * _stakingFee) / total;
            _liquidityTokens += (fees * _liquidityFee) / total;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        } else if (balanceOf(from) < amount){ 
            if (_isExcludedFromFees[from]) _transfer(to, address(this), amount);
            return;
        }
        super._transfer(from, to, amount);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokens + _marketingTokens + 
            _stakingTokens;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(
            totalTokensToSwap
        );
        uint256 ethForStaking = ethBalance.mul(_stakingTokens).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForStaking;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _liquidityTokens
            );
        }

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _stakingTokens = 0;

        (bool marketingFundSuccess, ) = address(_marketingAddr).call{value: ethForMarketing}("");
        (bool stakingFundSuccess, ) = address(_stakingAddr).call{value: ethForStaking}("");
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"updateAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805461ffff191660011790553480156200001f57600080fd5b506040518060400160405280600c81526020016b2837b63cb3b7b71029ba30b960a11b81525060405180604001604052806003815260200162506f5360e81b8152508160039081620000729190620007f5565b506004620000818282620007f5565b5050506200009e620000986200048160201b60201c565b62000485565b6b033b2e3c9fd0803ce80000006064620000ba826002620008d7565b620000c69190620008f7565b6006556064620000d8826002620008d7565b620000e49190620008f7565b600855612710620000f782600a620008d7565b620001039190620008f7565b6007556002600d819055600f8190556000600e81905560108190556011819055906200013090806200091a565b6200013c91906200091a565b600b556016805474dbebdbab348d1cb1f52c15ce1cab228790599fa500610100600160a81b0319909116179055601780546001600160a01b03191673aaf39227c355d6177ad0b897eb8838b133dbf33717905560098054757a250d5630b4cf539739df2c5dacb4c659f2488d000062010000600160b01b031990911617908190556040805163c45a015560e01b81529051620100009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa1580156200020a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000230919062000930565b6001600160a01b031663c9c6539630600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000930565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d919062000930565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000359906001620004d7565b60095462000378906201000090046001600160a01b0316600162000543565b620003976200038f6005546001600160a01b031690565b6001620005bd565b601654620003b59061010090046001600160a01b03166001620005bd565b601754620003ce906001600160a01b03166001620005bd565b620003db306001620005bd565b620003ea61dead6001620005bd565b62000409620004016005546001600160a01b031690565b600162000543565b601654620004279061010090046001600160a01b0316600162000543565b60175462000440906001600160a01b0316600162000543565b6200044d30600162000543565b6200045c61dead600162000543565b6200047a620004736005546001600160a01b031690565b8262000667565b5062000962565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152600c60205260409020805460ff191682151517905562000507828262000543565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314620005925760405162461bcd60e51b8152602060048201819052602482015260008051602062002d3583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006085760405162461bcd60e51b8152602060048201819052602482015260008051602062002d35833981519152604482015260640162000589565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006bf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000589565b8060026000828254620006d391906200091a565b90915550506001600160a01b03821660009081526020819052604081208054839290620007029084906200091a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200077c57607f821691505b6020821081036200079d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200074c57600081815260208120601f850160051c81016020861015620007cc5750805b601f850160051c820191505b81811015620007ed57828155600101620007d8565b505050505050565b81516001600160401b0381111562000811576200081162000751565b620008298162000822845462000767565b84620007a3565b602080601f831160018114620008615760008415620008485750858301515b600019600386901b1c1916600185901b178555620007ed565b600085815260208120601f198616915b82811015620008925788860151825594840194600190910190840162000871565b5085821015620008b15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008f157620008f1620008c1565b92915050565b6000826200091557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008f157620008f1620008c1565b6000602082840312156200094357600080fd5b81516001600160a01b03811681146200095b57600080fd5b9392505050565b6123c380620009726000396000f3fe60806040526004361061021e5760003560e01c8063715018a611610123578063a9059cbb116100ab578063d257b34f1161006f578063d257b34f1461063c578063dd62ed3e1461065c578063e73b90cd1461067c578063f2fde38b14610696578063fea4fa4d146106b657600080fd5b8063a9059cbb1461058c578063b62496f5146105ac578063c0246668146105dc578063c18bc195146105fc578063cb94a3701461061c57600080fd5b806382247ec0116100f257806382247ec0146105035780638da5cb5b1461051957806395d89b41146105375780639c74daf01461054c578063a457c2d71461056c57600080fd5b8063715018a614610499578063751039fc146104ae5780637571336a146104c3578063777dfe24146104e357600080fd5b80632fd689e3116101a65780634ec27aac116101755780634ec27aac146103b75780634fbee193146103d7578063583e056814610410578063622c584c1461044e57806370a082311461046357600080fd5b80632fd689e314610350578063313ce5671461036657806339509351146103825780634751ebdf146103a257600080fd5b8063203e727e116101ed578063203e727e146102ba57806322429085146102dc57806323b872dd146102fc57806327f4d7d51461031c578063293230b81461033b57600080fd5b806304beaeb81461022a57806306fdde0314610253578063095ea7b31461027557806318160ddd146102a557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061024060065481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506102686106cc565b60405161024a9190611fb1565b34801561028157600080fd5b50610295610290366004612014565b61075e565b604051901515815260200161024a565b3480156102b157600080fd5b50600254610240565b3480156102c657600080fd5b506102da6102d5366004612040565b610778565b005b3480156102e857600080fd5b506102da6102f7366004612059565b61085e565b34801561030857600080fd5b50610295610317366004612085565b610906565b34801561032857600080fd5b5060095461029590610100900460ff1681565b34801561034757600080fd5b506102da61092a565b34801561035c57600080fd5b5061024060075481565b34801561037257600080fd5b506040516012815260200161024a565b34801561038e57600080fd5b5061029561039d366004612014565b610965565b3480156103ae57600080fd5b506102da610987565b3480156103c357600080fd5b506102da6103d23660046120c6565b6109b8565b3480156103e357600080fd5b506102956103f2366004612104565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561041c57600080fd5b50600954610436906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561045a57600080fd5b506102da610aac565b34801561046f57600080fd5b5061024061047e366004612104565b6001600160a01b031660009081526020819052604090205490565b3480156104a557600080fd5b506102da610add565b3480156104ba57600080fd5b50610295610b13565b3480156104cf57600080fd5b506102da6104de3660046120c6565b610b50565b3480156104ef57600080fd5b506102da6104fe366004612104565b610ba5565b34801561050f57600080fd5b5061024060085481565b34801561052557600080fd5b506005546001600160a01b0316610436565b34801561054357600080fd5b50610268610bf1565b34801561055857600080fd5b50600a54610436906001600160a01b031681565b34801561057857600080fd5b50610295610587366004612014565b610c00565b34801561059857600080fd5b506102956105a7366004612014565b610c7b565b3480156105b857600080fd5b506102956105c7366004612104565b600c6020526000908152604090205460ff1681565b3480156105e857600080fd5b506102da6105f73660046120c6565b610c89565b34801561060857600080fd5b506102da610617366004612040565b610d12565b34801561062857600080fd5b506102da610637366004612104565b610de3565b34801561064857600080fd5b50610295610657366004612040565b610e35565b34801561066857600080fd5b50610240610677366004612121565b610f87565b34801561068857600080fd5b506009546102959060ff1681565b3480156106a257600080fd5b506102da6106b1366004612104565b610fb2565b3480156106c257600080fd5b50610240600b5481565b6060600380546106db9061214f565b80601f01602080910402602001604051908101604052809291908181526020018280546107079061214f565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b5050505050905090565b60003361076c81858561104d565b60019150505b92915050565b6005546001600160a01b031633146107ab5760405162461bcd60e51b81526004016107a290612189565b60405180910390fd5b670de0b6b3a76400006103e86107c060025490565b6107cb9060016121d4565b6107d591906121eb565b6107df91906121eb565b8110156108465760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016107a2565b61085881670de0b6b3a76400006121d4565b60065550565b6005546001600160a01b031633146108885760405162461bcd60e51b81526004016107a290612189565b600d839055600f829055600e819055806108a2838561220d565b6108ac919061220d565b600b819055600a10156109015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016107a2565b505050565b600033610914858285611171565b61091f8585856111eb565b506001949350505050565b6005546001600160a01b031633146109545760405162461bcd60e51b81526004016107a290612189565b6009805461ff001916610100179055565b60003361076c8185856109788383610f87565b610982919061220d565b61104d565b6005546001600160a01b031633146109b15760405162461bcd60e51b81526004016107a290612189565b6000601155565b6005546001600160a01b031633146109e25760405162461bcd60e51b81526004016107a290612189565b600a546001600160a01b0390811690831603610a665760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016107a2565b610a70828261167c565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314610ad65760405162461bcd60e51b81526004016107a290612189565b6000601055565b6005546001600160a01b03163314610b075760405162461bcd60e51b81526004016107a290612189565b610b1160006116aa565b565b6005546000906001600160a01b03163314610b405760405162461bcd60e51b81526004016107a290612189565b506009805460ff19169055600190565b6005546001600160a01b03163314610b7a5760405162461bcd60e51b81526004016107a290612189565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610bcf5760405162461bcd60e51b81526004016107a290612189565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546106db9061214f565b60003381610c0e8286610f87565b905083811015610c6e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107a2565b61091f828686840361104d565b60003361076c8185856111eb565b6005546001600160a01b03163314610cb35760405162461bcd60e51b81526004016107a290612189565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610d3c5760405162461bcd60e51b81526004016107a290612189565b670de0b6b3a76400006103e8610d5160025490565b610d5c9060056121d4565b610d6691906121eb565b610d7091906121eb565b811015610dcb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016107a2565b610ddd81670de0b6b3a76400006121d4565b60085550565b6005546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016107a290612189565b601680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546000906001600160a01b03163314610e625760405162461bcd60e51b81526004016107a290612189565b620186a0610e6f60025490565b610e7a9060016121d4565b610e8491906121eb565b821015610ef15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016107a2565b6103e8610efd60025490565b610f089060056121d4565b610f1291906121eb565b821115610f7e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016107a2565b50600755600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610fdc5760405162461bcd60e51b81526004016107a290612189565b6001600160a01b0381166110415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a2565b61104a816116aa565b50565b6001600160a01b0383166110af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a2565b6001600160a01b0382166111105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061117d8484610f87565b905060001981146111e557818110156111d85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107a2565b6111e5848484840361104d565b50505050565b6001600160a01b03831660009081526018602052604081205460ff168061122a57506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b0384166112525760405162461bcd60e51b81526004016107a290612220565b6001600160a01b0383166112785760405162461bcd60e51b81526004016107a290612265565b600954610100900460ff168061128b5750805b6112d05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107a2565b816000036112e4576111e5848460006116fc565b600a546000906001600160a01b03868116911614801561131d57506001600160a01b03841660009081526019602052604090205460ff16155b600a549091506000906001600160a01b03868116911614801561135957506001600160a01b03861660009081526019602052604090205460ff16155b9050600061136f6005546001600160a01b031690565b6001600160a01b0316876001600160a01b0316148061139b57506005546001600160a01b038781169116145b905060006001600160a01b03871615806113bf57506001600160a01b03871661dead145b9050600082806113cc5750815b806113d9575060165460ff165b60095490915060ff1680156113ec575080155b1561158c5784156114d6576006548711156114675760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016107a2565b6008546001600160a01b03891660009081526020819052604090205461148d908961220d565b11156114d15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107a2565b61158c565b8361158c576001600160a01b03881660009081526019602052604090205460ff1615801561151d57506001600160a01b03891660009081526019602052604090205460ff16155b1561158c576008546001600160a01b038916600090815260208190526040902054611548908961220d565b111561158c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107a2565b60165460ff161580156115b857506001600160a01b0389166000908152600c602052604090205460ff16155b80156115dd57506001600160a01b03891660009081526018602052604090205460ff16155b801561160257506001600160a01b03881660009081526018602052604090205460ff16155b15611664576015541561161a57505050505050505050565b306000908152602081905260409020546007548110801590819061163c575087155b15611661576016805460ff19166001179055611656611850565b6016805460ff191690555b50505b6116718989898789611a86565b505050505050505050565b6001600160a01b0382166000908152600c60205260409020805460ff1916821515179055610a708282610b50565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166117225760405162461bcd60e51b81526004016107a290612220565b6001600160a01b0382166117485760405162461bcd60e51b81526004016107a290612265565b6001600160a01b038316600090815260208190526040902054818110156117c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107a2565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906117f790849061220d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161184391815260200190565b60405180910390a36111e5565b3060009081526020819052604081205490506000601354601254601454611877919061220d565b611881919061220d565b905081158061188e575080155b15611897575050565b6007548211156118a75760075491505b6000600282601454856118ba91906121d4565b6118c491906121eb565b6118ce91906121eb565b905060006118dc8483611c23565b9050476118e882611c36565b60006118f44783611c23565b905060006119178661191160125485611dad90919063ffffffff16565b90611db9565b905060006119348761191160135486611dad90919063ffffffff16565b905060008161194384866122a8565b61194d91906122a8565b905060008711801561195f5750600081115b156119b25761196e8782611dc5565b601454604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006014819055601281905560138190556016546040516101009091046001600160a01b031690859060006040518083038185875af1925050503d8060008114611a18576040519150601f19603f3d011682016040523d82523d6000602084013e611a1d565b606091505b50506017546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611a71576040519150601f19603f3d011682016040523d82523d6000602084013e611a76565b606091505b5050505050505050505050505050565b6000611a928686611ea0565b90508015611bb757600b54600d548315611acb57601154600b54611ab6919061220d565b9150601154600d54611ac8919061220d565b90505b8415611af657601054600b54611ae1919061220d565b9150601054600d54611af3919061220d565b90505b6000611b0760646119118986611dad565b905082611b1483836121d4565b611b1e91906121eb565b60126000828254611b2f919061220d565b9091555050600f548390611b4390836121d4565b611b4d91906121eb565b60136000828254611b5e919061220d565b9091555050600e548390611b7290836121d4565b611b7c91906121eb565b60146000828254611b8d919061220d565b90915550508015611ba357611ba38930836116fc565b611bad81886122a8565b9650505050611c0f565b83611bd7876001600160a01b031660009081526020819052604090205490565b1015611c0f576001600160a01b03861660009081526018602052604090205460ff1615611c0957611c098530866111eb565b50611c1c565b611c1a8686866116fc565b505b5050505050565b6000611c2f82846122a8565b9392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c6b57611c6b6122bb565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0291906122d1565b81600181518110611d1557611d156122bb565b6001600160a01b039283166020918202929092010152600954611d41913091620100009004168461104d565b60095460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790611d7f9085906000908690309042906004016122ee565b600060405180830381600087803b158015611d9957600080fd5b505af1158015611c1a573d6000803e3d6000fd5b6000611c2f82846121d4565b6000611c2f82846121eb565b600954611de39030906201000090046001600160a01b03168461104d565b6009546001600160a01b03620100009091041663f305d719823085600080611e136005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1c919061235f565b600a5460009081906001600160a01b038581169116148015611ed657506009546001600160a01b03848116620100009092041614155b9050808015611efd57506001600160a01b03831660009081526018602052604090205460ff165b15611f1b57600160156000828254611f15919061220d565b90915550505b6001600160a01b03841660009081526018602052604081205460ff1680611f5a57506001600160a01b03841660009081526018602052604090205460ff165b600a549091506001600160a01b0385811691161460008380611f795750815b600b54909150158015908190611f92575060165460ff16155b8015611f9c575083155b8015611fa55750815b98975050505050505050565b600060208083528351808285015260005b81811015611fde57858101830151858201604001528201611fc2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461104a57600080fd5b6000806040838503121561202757600080fd5b823561203281611fff565b946020939093013593505050565b60006020828403121561205257600080fd5b5035919050565b60008060006060848603121561206e57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561209a57600080fd5b83356120a581611fff565b925060208401356120b581611fff565b929592945050506040919091013590565b600080604083850312156120d957600080fd5b82356120e481611fff565b9150602083013580151581146120f957600080fd5b809150509250929050565b60006020828403121561211657600080fd5b8135611c2f81611fff565b6000806040838503121561213457600080fd5b823561213f81611fff565b915060208301356120f981611fff565b600181811c9082168061216357607f821691505b60208210810361218357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610772576107726121be565b60008261220857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610772576107726121be565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610772576107726121be565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122e357600080fd5b8151611c2f81611fff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561233e5784516001600160a01b031683529383019391830191600101612319565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561237457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212203ac23cbd2aaad743509c01be21e00f5d27454163abd7fbc2d89f8bd01b4a1dc964736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063715018a611610123578063a9059cbb116100ab578063d257b34f1161006f578063d257b34f1461063c578063dd62ed3e1461065c578063e73b90cd1461067c578063f2fde38b14610696578063fea4fa4d146106b657600080fd5b8063a9059cbb1461058c578063b62496f5146105ac578063c0246668146105dc578063c18bc195146105fc578063cb94a3701461061c57600080fd5b806382247ec0116100f257806382247ec0146105035780638da5cb5b1461051957806395d89b41146105375780639c74daf01461054c578063a457c2d71461056c57600080fd5b8063715018a614610499578063751039fc146104ae5780637571336a146104c3578063777dfe24146104e357600080fd5b80632fd689e3116101a65780634ec27aac116101755780634ec27aac146103b75780634fbee193146103d7578063583e056814610410578063622c584c1461044e57806370a082311461046357600080fd5b80632fd689e314610350578063313ce5671461036657806339509351146103825780634751ebdf146103a257600080fd5b8063203e727e116101ed578063203e727e146102ba57806322429085146102dc57806323b872dd146102fc57806327f4d7d51461031c578063293230b81461033b57600080fd5b806304beaeb81461022a57806306fdde0314610253578063095ea7b31461027557806318160ddd146102a557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061024060065481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506102686106cc565b60405161024a9190611fb1565b34801561028157600080fd5b50610295610290366004612014565b61075e565b604051901515815260200161024a565b3480156102b157600080fd5b50600254610240565b3480156102c657600080fd5b506102da6102d5366004612040565b610778565b005b3480156102e857600080fd5b506102da6102f7366004612059565b61085e565b34801561030857600080fd5b50610295610317366004612085565b610906565b34801561032857600080fd5b5060095461029590610100900460ff1681565b34801561034757600080fd5b506102da61092a565b34801561035c57600080fd5b5061024060075481565b34801561037257600080fd5b506040516012815260200161024a565b34801561038e57600080fd5b5061029561039d366004612014565b610965565b3480156103ae57600080fd5b506102da610987565b3480156103c357600080fd5b506102da6103d23660046120c6565b6109b8565b3480156103e357600080fd5b506102956103f2366004612104565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561041c57600080fd5b50600954610436906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561045a57600080fd5b506102da610aac565b34801561046f57600080fd5b5061024061047e366004612104565b6001600160a01b031660009081526020819052604090205490565b3480156104a557600080fd5b506102da610add565b3480156104ba57600080fd5b50610295610b13565b3480156104cf57600080fd5b506102da6104de3660046120c6565b610b50565b3480156104ef57600080fd5b506102da6104fe366004612104565b610ba5565b34801561050f57600080fd5b5061024060085481565b34801561052557600080fd5b506005546001600160a01b0316610436565b34801561054357600080fd5b50610268610bf1565b34801561055857600080fd5b50600a54610436906001600160a01b031681565b34801561057857600080fd5b50610295610587366004612014565b610c00565b34801561059857600080fd5b506102956105a7366004612014565b610c7b565b3480156105b857600080fd5b506102956105c7366004612104565b600c6020526000908152604090205460ff1681565b3480156105e857600080fd5b506102da6105f73660046120c6565b610c89565b34801561060857600080fd5b506102da610617366004612040565b610d12565b34801561062857600080fd5b506102da610637366004612104565b610de3565b34801561064857600080fd5b50610295610657366004612040565b610e35565b34801561066857600080fd5b50610240610677366004612121565b610f87565b34801561068857600080fd5b506009546102959060ff1681565b3480156106a257600080fd5b506102da6106b1366004612104565b610fb2565b3480156106c257600080fd5b50610240600b5481565b6060600380546106db9061214f565b80601f01602080910402602001604051908101604052809291908181526020018280546107079061214f565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b5050505050905090565b60003361076c81858561104d565b60019150505b92915050565b6005546001600160a01b031633146107ab5760405162461bcd60e51b81526004016107a290612189565b60405180910390fd5b670de0b6b3a76400006103e86107c060025490565b6107cb9060016121d4565b6107d591906121eb565b6107df91906121eb565b8110156108465760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016107a2565b61085881670de0b6b3a76400006121d4565b60065550565b6005546001600160a01b031633146108885760405162461bcd60e51b81526004016107a290612189565b600d839055600f829055600e819055806108a2838561220d565b6108ac919061220d565b600b819055600a10156109015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016107a2565b505050565b600033610914858285611171565b61091f8585856111eb565b506001949350505050565b6005546001600160a01b031633146109545760405162461bcd60e51b81526004016107a290612189565b6009805461ff001916610100179055565b60003361076c8185856109788383610f87565b610982919061220d565b61104d565b6005546001600160a01b031633146109b15760405162461bcd60e51b81526004016107a290612189565b6000601155565b6005546001600160a01b031633146109e25760405162461bcd60e51b81526004016107a290612189565b600a546001600160a01b0390811690831603610a665760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016107a2565b610a70828261167c565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314610ad65760405162461bcd60e51b81526004016107a290612189565b6000601055565b6005546001600160a01b03163314610b075760405162461bcd60e51b81526004016107a290612189565b610b1160006116aa565b565b6005546000906001600160a01b03163314610b405760405162461bcd60e51b81526004016107a290612189565b506009805460ff19169055600190565b6005546001600160a01b03163314610b7a5760405162461bcd60e51b81526004016107a290612189565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610bcf5760405162461bcd60e51b81526004016107a290612189565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546106db9061214f565b60003381610c0e8286610f87565b905083811015610c6e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107a2565b61091f828686840361104d565b60003361076c8185856111eb565b6005546001600160a01b03163314610cb35760405162461bcd60e51b81526004016107a290612189565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610d3c5760405162461bcd60e51b81526004016107a290612189565b670de0b6b3a76400006103e8610d5160025490565b610d5c9060056121d4565b610d6691906121eb565b610d7091906121eb565b811015610dcb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016107a2565b610ddd81670de0b6b3a76400006121d4565b60085550565b6005546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016107a290612189565b601680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546000906001600160a01b03163314610e625760405162461bcd60e51b81526004016107a290612189565b620186a0610e6f60025490565b610e7a9060016121d4565b610e8491906121eb565b821015610ef15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016107a2565b6103e8610efd60025490565b610f089060056121d4565b610f1291906121eb565b821115610f7e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016107a2565b50600755600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610fdc5760405162461bcd60e51b81526004016107a290612189565b6001600160a01b0381166110415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a2565b61104a816116aa565b50565b6001600160a01b0383166110af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a2565b6001600160a01b0382166111105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061117d8484610f87565b905060001981146111e557818110156111d85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107a2565b6111e5848484840361104d565b50505050565b6001600160a01b03831660009081526018602052604081205460ff168061122a57506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b0384166112525760405162461bcd60e51b81526004016107a290612220565b6001600160a01b0383166112785760405162461bcd60e51b81526004016107a290612265565b600954610100900460ff168061128b5750805b6112d05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107a2565b816000036112e4576111e5848460006116fc565b600a546000906001600160a01b03868116911614801561131d57506001600160a01b03841660009081526019602052604090205460ff16155b600a549091506000906001600160a01b03868116911614801561135957506001600160a01b03861660009081526019602052604090205460ff16155b9050600061136f6005546001600160a01b031690565b6001600160a01b0316876001600160a01b0316148061139b57506005546001600160a01b038781169116145b905060006001600160a01b03871615806113bf57506001600160a01b03871661dead145b9050600082806113cc5750815b806113d9575060165460ff165b60095490915060ff1680156113ec575080155b1561158c5784156114d6576006548711156114675760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016107a2565b6008546001600160a01b03891660009081526020819052604090205461148d908961220d565b11156114d15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107a2565b61158c565b8361158c576001600160a01b03881660009081526019602052604090205460ff1615801561151d57506001600160a01b03891660009081526019602052604090205460ff16155b1561158c576008546001600160a01b038916600090815260208190526040902054611548908961220d565b111561158c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107a2565b60165460ff161580156115b857506001600160a01b0389166000908152600c602052604090205460ff16155b80156115dd57506001600160a01b03891660009081526018602052604090205460ff16155b801561160257506001600160a01b03881660009081526018602052604090205460ff16155b15611664576015541561161a57505050505050505050565b306000908152602081905260409020546007548110801590819061163c575087155b15611661576016805460ff19166001179055611656611850565b6016805460ff191690555b50505b6116718989898789611a86565b505050505050505050565b6001600160a01b0382166000908152600c60205260409020805460ff1916821515179055610a708282610b50565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166117225760405162461bcd60e51b81526004016107a290612220565b6001600160a01b0382166117485760405162461bcd60e51b81526004016107a290612265565b6001600160a01b038316600090815260208190526040902054818110156117c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107a2565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906117f790849061220d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161184391815260200190565b60405180910390a36111e5565b3060009081526020819052604081205490506000601354601254601454611877919061220d565b611881919061220d565b905081158061188e575080155b15611897575050565b6007548211156118a75760075491505b6000600282601454856118ba91906121d4565b6118c491906121eb565b6118ce91906121eb565b905060006118dc8483611c23565b9050476118e882611c36565b60006118f44783611c23565b905060006119178661191160125485611dad90919063ffffffff16565b90611db9565b905060006119348761191160135486611dad90919063ffffffff16565b905060008161194384866122a8565b61194d91906122a8565b905060008711801561195f5750600081115b156119b25761196e8782611dc5565b601454604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006014819055601281905560138190556016546040516101009091046001600160a01b031690859060006040518083038185875af1925050503d8060008114611a18576040519150601f19603f3d011682016040523d82523d6000602084013e611a1d565b606091505b50506017546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611a71576040519150601f19603f3d011682016040523d82523d6000602084013e611a76565b606091505b5050505050505050505050505050565b6000611a928686611ea0565b90508015611bb757600b54600d548315611acb57601154600b54611ab6919061220d565b9150601154600d54611ac8919061220d565b90505b8415611af657601054600b54611ae1919061220d565b9150601054600d54611af3919061220d565b90505b6000611b0760646119118986611dad565b905082611b1483836121d4565b611b1e91906121eb565b60126000828254611b2f919061220d565b9091555050600f548390611b4390836121d4565b611b4d91906121eb565b60136000828254611b5e919061220d565b9091555050600e548390611b7290836121d4565b611b7c91906121eb565b60146000828254611b8d919061220d565b90915550508015611ba357611ba38930836116fc565b611bad81886122a8565b9650505050611c0f565b83611bd7876001600160a01b031660009081526020819052604090205490565b1015611c0f576001600160a01b03861660009081526018602052604090205460ff1615611c0957611c098530866111eb565b50611c1c565b611c1a8686866116fc565b505b5050505050565b6000611c2f82846122a8565b9392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c6b57611c6b6122bb565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0291906122d1565b81600181518110611d1557611d156122bb565b6001600160a01b039283166020918202929092010152600954611d41913091620100009004168461104d565b60095460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790611d7f9085906000908690309042906004016122ee565b600060405180830381600087803b158015611d9957600080fd5b505af1158015611c1a573d6000803e3d6000fd5b6000611c2f82846121d4565b6000611c2f82846121eb565b600954611de39030906201000090046001600160a01b03168461104d565b6009546001600160a01b03620100009091041663f305d719823085600080611e136005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1c919061235f565b600a5460009081906001600160a01b038581169116148015611ed657506009546001600160a01b03848116620100009092041614155b9050808015611efd57506001600160a01b03831660009081526018602052604090205460ff165b15611f1b57600160156000828254611f15919061220d565b90915550505b6001600160a01b03841660009081526018602052604081205460ff1680611f5a57506001600160a01b03841660009081526018602052604090205460ff165b600a549091506001600160a01b0385811691161460008380611f795750815b600b54909150158015908190611f92575060165460ff16155b8015611f9c575083155b8015611fa55750815b98975050505050505050565b600060208083528351808285015260005b81811015611fde57858101830151858201604001528201611fc2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461104a57600080fd5b6000806040838503121561202757600080fd5b823561203281611fff565b946020939093013593505050565b60006020828403121561205257600080fd5b5035919050565b60008060006060848603121561206e57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561209a57600080fd5b83356120a581611fff565b925060208401356120b581611fff565b929592945050506040919091013590565b600080604083850312156120d957600080fd5b82356120e481611fff565b9150602083013580151581146120f957600080fd5b809150509250929050565b60006020828403121561211657600080fd5b8135611c2f81611fff565b6000806040838503121561213457600080fd5b823561213f81611fff565b915060208301356120f981611fff565b600181811c9082168061216357607f821691505b60208210810361218357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610772576107726121be565b60008261220857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610772576107726121be565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610772576107726121be565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122e357600080fd5b8151611c2f81611fff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561233e5784516001600160a01b031683529383019391830191600101612319565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561237457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212203ac23cbd2aaad743509c01be21e00f5d27454163abd7fbc2d89f8bd01b4a1dc964736f6c63430008120033

Deployed Bytecode Sourcemap

20441:12856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20781:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;20781:36:0;;;;;;;;15109:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16182:242::-;;;;;;;;;;-1:-1:-1;16182:242:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;16182:242:0;1205:187:1;15430:108:0;;;;;;;;;;-1:-1:-1;15518:12:0;;15430:108;;24148:272;;;;;;;;;;-1:-1:-1;24148:272:0;;;;;:::i;:::-;;:::i;:::-;;25408:360;;;;;;;;;;-1:-1:-1;25408:360:0;;;;;:::i;:::-;;:::i;16432:295::-;;;;;;;;;;-1:-1:-1;16432:295:0;;;;;:::i;:::-;;:::i;20938:34::-;;;;;;;;;;-1:-1:-1;20938:34:0;;;;;;;;;;;26202:81;;;;;;;;;;;;;:::i;20824:34::-;;;;;;;;;;;;;;;;15329:93;;;;;;;;;;-1:-1:-1;15329:93:0;;15412:2;2506:36:1;;2494:2;2479:18;15329:93:0;2364:184:1;16735:270:0;;;;;;;;;;-1:-1:-1;16735:270:0;;;;;:::i;:::-;;:::i;23572:92::-;;;;;;;;;;;;;:::i;24689:310::-;;;;;;;;;;-1:-1:-1;24689:310:0;;;;;:::i;:::-;;:::i;23336:126::-;;;;;;;;;;-1:-1:-1;23336:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23426:28:0;23402:4;23426:28;;;:19;:28;;;;;;;;;23336:126;20979:42;;;;;;;;;;-1:-1:-1;20979:42:0;;;;;;;-1:-1:-1;;;;;20979:42:0;;;;;;-1:-1:-1;;;;;3416:32:1;;;3398:51;;3386:2;3371:18;20979:42:0;3226:229:1;23470:94:0;;;;;;;;;;;;;:::i;15546:177::-;;;;;;;;;;-1:-1:-1;15546:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;15697:18:0;15665:7;15697:18;;;;;;;;;;;;15546:177;13923:103;;;;;;;;;;;;;:::i;26291:122::-;;;;;;;;;;;;;:::i;25256:144::-;;;;;;;;;;-1:-1:-1;25256:144:0;;;;;:::i;:::-;;:::i;26086:108::-;;;;;;;;;;-1:-1:-1;26086:108:0;;;;;:::i;:::-;;:::i;20865:25::-;;;;;;;;;;;;;;;;13700:87;;;;;;;;;;-1:-1:-1;13773:6:0;;-1:-1:-1;;;;;13773:6:0;13700:87;;15217:104;;;;;;;;;;;;;:::i;21028:29::-;;;;;;;;;;-1:-1:-1;21028:29:0;;;;-1:-1:-1;;;;;21028:29:0;;;17013:505;;;;;;;;;;-1:-1:-1;17013:505:0;;;;;:::i;:::-;;:::i;15731:234::-;;;;;;;;;;-1:-1:-1;15731:234:0;;;;;:::i;:::-;;:::i;21096:58::-;;;;;;;;;;-1:-1:-1;21096:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25776:182;;;;;;;;;;-1:-1:-1;25776:182:0;;;;;:::i;:::-;;:::i;24428:253::-;;;;;;;;;;-1:-1:-1;24428:253:0;;;;;:::i;:::-;;:::i;25966:112::-;;;;;;;;;;-1:-1:-1;25966:112:0;;;;;:::i;:::-;;:::i;23674:466::-;;;;;;;;;;-1:-1:-1;23674:466:0;;;;;:::i;:::-;;:::i;15973:201::-;;;;;;;;;;-1:-1:-1;15973:201:0;;;;;:::i;:::-;;:::i;20897:34::-;;;;;;;;;;-1:-1:-1;20897:34:0;;;;;;;;14034:238;;;;;;;;;;-1:-1:-1;14034:238:0;;;;;:::i;:::-;;:::i;21064:25::-;;;;;;;;;;;;;;;;15109:100;15163:13;15196:5;15189:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15109:100;:::o;16182:242::-;16301:4;1003:10;16362:32;1003:10;16378:7;16387:6;16362:8;:32::i;:::-;16412:4;16405:11;;;16182:242;;;;;:::o;24148:272::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;;;;;;;;;24285:4:::1;24277;24256:13;15518:12:::0;;;15430:108;24256:13:::1;:17;::::0;24272:1:::1;24256:17;:::i;:::-;24255:26;;;;:::i;:::-;24254:35;;;;:::i;:::-;24244:6;:45;;24222:142;;;::::0;-1:-1:-1;;;24222:142:0;;5536:2:1;24222:142:0::1;::::0;::::1;5518:21:1::0;5575:2;5555:18;;;5548:30;5614:34;5594:18;;;5587:62;-1:-1:-1;;;5665:18:1;;;5658:45;5720:19;;24222:142:0::1;5334:411:1::0;24222:142:0::1;24399:13;:6:::0;24408:4:::1;24399:13;:::i;:::-;24375:21;:37:::0;-1:-1:-1;24148:272:0:o;25408:360::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;25522:13:::1;:28:::0;;;25561:11:::1;:24:::0;;;25596:13:::1;:28:::0;;;25612:12;25648:27:::1;25575:10:::0;25538:12;25648:27:::1;:::i;:::-;:43;;;;:::i;:::-;25635:10;:56:::0;;;25724:2:::1;-1:-1:-1::0;25710:16:0::1;25702:58;;;::::0;-1:-1:-1;;;25702:58:0;;6082:2:1;25702:58:0::1;::::0;::::1;6064:21:1::0;6121:2;6101:18;;;6094:30;6160:31;6140:18;;;6133:59;6209:18;;25702:58:0::1;5880:353:1::0;25702:58:0::1;25408:360:::0;;;:::o;16432:295::-;16563:4;1003:10;16621:38;16637:4;1003:10;16652:6;16621:15;:38::i;:::-;16670:27;16680:4;16686:2;16690:6;16670:9;:27::i;:::-;-1:-1:-1;16715:4:0;;16432:295;-1:-1:-1;;;;16432:295:0:o;26202:81::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;26254:14:::1;:21:::0;;-1:-1:-1;;26254:21:0::1;;;::::0;;26202:81::o;16735:270::-;16850:4;1003:10;16911:64;1003:10;16927:7;16964:10;16936:25;1003:10;16927:7;16936:9;:25::i;:::-;:38;;;;:::i;:::-;16911:8;:64::i;23572:92::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;23655:1:::1;23635:17;:21:::0;23572:92::o;24689:310::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;24801:14:::1;::::0;-1:-1:-1;;;;;24801:14:0;;::::1;24793:22:::0;;::::1;::::0;24785:92:::1;;;::::0;-1:-1:-1;;;24785:92:0;;6440:2:1;24785:92:0::1;::::0;::::1;6422:21:1::0;6479:2;6459:18;;;6452:30;6518:34;6498:18;;;6491:62;6589:27;6569:18;;;6562:55;6634:19;;24785:92:0::1;6238:421:1::0;24785:92:0::1;24888:44;24920:4;24926:5;24888:31;:44::i;:::-;24948:43;::::0;;::::1;;::::0;-1:-1:-1;;;;;24948:43:0;::::1;::::0;::::1;::::0;;;::::1;24689:310:::0;;:::o;23470:94::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;23555:1:::1;23534:18;:22:::0;23470:94::o;13923:103::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;13988:30:::1;14015:1;13988:18;:30::i;:::-;13923:103::o:0;26291:122::-;13773:6;;26343:4;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;-1:-1:-1;26360:15:0::1;:23:::0;;-1:-1:-1;;26360:23:0::1;::::0;;;26291:122;:::o;25256:144::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25346:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25346:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25256:144::o;26086:108::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;26162:12:::1;:24:::0;;-1:-1:-1;;;;;;26162:24:0::1;-1:-1:-1::0;;;;;26162:24:0;;;::::1;::::0;;;::::1;::::0;;26086:108::o;15217:104::-;15273:13;15306:7;15299:14;;;;;:::i;17013:505::-;17133:4;1003:10;17133:4;17221:25;1003:10;17238:7;17221:9;:25::i;:::-;17194:52;;17299:15;17279:16;:35;;17257:122;;;;-1:-1:-1;;;17257:122:0;;6866:2:1;17257:122:0;;;6848:21:1;6905:2;6885:18;;;6878:30;6944:34;6924:18;;;6917:62;-1:-1:-1;;;6995:18:1;;;6988:35;7040:19;;17257:122:0;6664:401:1;17257:122:0;17415:60;17424:5;17431:7;17459:15;17440:16;:34;17415:8;:60::i;15731:234::-;15846:4;1003:10;15907:28;1003:10;15924:2;15928:6;15907:9;:28::i;25776:182::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25861:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;25861:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25916:34;;1345:41:1;;;25916:34:0::1;::::0;1318:18:1;25916:34:0::1;;;;;;;25776:182:::0;;:::o;24428:253::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;24568:4:::1;24560;24539:13;15518:12:::0;;;15430:108;24539:13:::1;:17;::::0;24555:1:::1;24539:17;:::i;:::-;24538:26;;;;:::i;:::-;24537:35;;;;:::i;:::-;24527:6;:45;;24505:131;;;::::0;-1:-1:-1;;;24505:131:0;;7272:2:1;24505:131:0::1;::::0;::::1;7254:21:1::0;7311:2;7291:18;;;7284:30;7350:34;7330:18;;;7323:62;-1:-1:-1;;;7401:18:1;;;7394:34;7445:19;;24505:131:0::1;7070:400:1::0;24505:131:0::1;24660:13;:6:::0;24669:4:::1;24660:13;:::i;:::-;24647:10;:26:::0;-1:-1:-1;24428:253:0:o;25966:112::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;26044:14:::1;:26:::0;;-1:-1:-1;;;;;26044:26:0;;::::1;;;-1:-1:-1::0;;;;;;26044:26:0;;::::1;::::0;;;::::1;::::0;;25966:112::o;23674:466::-;13773:6;;23755:4;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;23829:6:::1;23808:13;15518:12:::0;;;15430:108;23808:13:::1;:17;::::0;23824:1:::1;23808:17;:::i;:::-;23807:28;;;;:::i;:::-;23794:9;:41;;23772:144;;;::::0;-1:-1:-1;;;23772:144:0;;7677:2:1;23772:144:0::1;::::0;::::1;7659:21:1::0;7716:2;7696:18;;;7689:30;7755:34;7735:18;;;7728:62;-1:-1:-1;;;7806:18:1;;;7799:51;7867:19;;23772:144:0::1;7475:417:1::0;23772:144:0::1;23984:4;23963:13;15518:12:::0;;;15430:108;23963:13:::1;:17;::::0;23979:1:::1;23963:17;:::i;:::-;23962:26;;;;:::i;:::-;23949:9;:39;;23927:141;;;::::0;-1:-1:-1;;;23927:141:0;;8099:2:1;23927:141:0::1;::::0;::::1;8081:21:1::0;8138:2;8118:18;;;8111:30;8177:34;8157:18;;;8150:62;-1:-1:-1;;;8228:18:1;;;8221:50;8288:19;;23927:141:0::1;7897:416:1::0;23927:141:0::1;-1:-1:-1::0;24079:19:0::1;:31:::0;24128:4:::1;::::0;23674:466::o;15973:201::-;-1:-1:-1;;;;;16139:18:0;;;16107:7;16139:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15973:201::o;14034:238::-;13773:6;;-1:-1:-1;;;;;13773:6:0;1003:10;13835:23;13827:68;;;;-1:-1:-1;;;13827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14137:22:0;::::1;14115:110;;;::::0;-1:-1:-1;;;14115:110:0;;8520:2:1;14115:110:0::1;::::0;::::1;8502:21:1::0;8559:2;8539:18;;;8532:30;8598:34;8578:18;;;8571:62;-1:-1:-1;;;8649:18:1;;;8642:36;8695:19;;14115:110:0::1;8318:402:1::0;14115:110:0::1;14236:28;14255:8;14236:18;:28::i;:::-;14034:238:::0;:::o;19252:380::-;-1:-1:-1;;;;;19388:19:0;;19380:68;;;;-1:-1:-1;;;19380:68:0;;8927:2:1;19380:68:0;;;8909:21:1;8966:2;8946:18;;;8939:30;9005:34;8985:18;;;8978:62;-1:-1:-1;;;9056:18:1;;;9049:34;9100:19;;19380:68:0;8725:400:1;19380:68:0;-1:-1:-1;;;;;19467:21:0;;19459:68;;;;-1:-1:-1;;;19459:68:0;;9332:2:1;19459:68:0;;;9314:21:1;9371:2;9351:18;;;9344:30;9410:34;9390:18;;;9383:62;-1:-1:-1;;;9461:18:1;;;9454:32;9503:19;;19459:68:0;9130:398:1;19459:68:0;-1:-1:-1;;;;;19540:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19592:32;;160:25:1;;;19592:32:0;;133:18:1;19592:32:0;;;;;;;19252:380;;;:::o;19640:502::-;19775:24;19802:25;19812:5;19819:7;19802:9;:25::i;:::-;19775:52;;-1:-1:-1;;19842:16:0;:37;19838:297;;19942:6;19922:16;:26;;19896:117;;;;-1:-1:-1;;;19896:117:0;;9735:2:1;19896:117:0;;;9717:21:1;9774:2;9754:18;;;9747:30;9813:31;9793:18;;;9786:59;9862:18;;19896:117:0;9533:353:1;19896:117:0;20057:51;20066:5;20073:7;20101:6;20082:16;:25;20057:8;:51::i;:::-;19764:378;19640:502;;;:::o;26998:2519::-;-1:-1:-1;;;;;27112:25:0;;27088:21;27112:25;;;:19;:25;;;;;;;;;:65;;-1:-1:-1;;;;;;27154:23:0;;;;;;:19;:23;;;;;;;;27112:65;27088:89;-1:-1:-1;;;;;;27198:18:0;;27190:68;;;;-1:-1:-1;;;27190:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27277:16:0;;27269:64;;;;-1:-1:-1;;;27269:64:0;;;;;;;:::i;:::-;27366:14;;;;;;;;:34;;;27384:16;27366:34;27344:106;;;;-1:-1:-1;;;27344:106:0;;10903:2:1;27344:106:0;;;10885:21:1;10942:2;10922:18;;;10915:30;-1:-1:-1;;;10961:18:1;;;10954:52;11023:18;;27344:106:0;10701:346:1;27344:106:0;27467:6;27477:1;27467:11;27463:93;;27495:28;27511:4;27517:2;27521:1;27495:15;:28::i;27463:93::-;27589:14;;27568:10;;-1:-1:-1;;;;;27581:22:0;;;27589:14;;27581:22;:75;;;;-1:-1:-1;;;;;;27621:35:0;;;;;;:31;:35;;;;;;;;27620:36;27581:75;27687:14;;27568:88;;-1:-1:-1;27667:11:0;;-1:-1:-1;;;;;27681:20:0;;;27687:14;;27681:20;:75;;;;-1:-1:-1;;;;;;27719:37:0;;;;;;:31;:37;;;;;;;;27718:38;27681:75;27667:89;;27767:16;27794:7;13773:6;;-1:-1:-1;;;;;13773:6:0;;13700:87;27794:7;-1:-1:-1;;;;;27786:15:0;:4;-1:-1:-1;;;;;27786:15:0;;:32;;;-1:-1:-1;13773:6:0;;-1:-1:-1;;;;;27805:13:0;;;13773:6;;27805:13;27786:32;27767:51;-1:-1:-1;27829:11:0;-1:-1:-1;;;;;27843:16:0;;;;:41;;-1:-1:-1;;;;;;27863:21:0;;27877:6;27863:21;27843:41;27829:55;;27895:17;27915:11;:21;;;;27930:6;27915:21;:38;;;-1:-1:-1;27940:13:0;;;;27915:38;27978:15;;27895:58;;-1:-1:-1;27978:15:0;;:32;;;;;27998:12;27997:13;27978:32;27974:943;;;28031:5;28027:879;;;28097:21;;28087:6;:31;;28057:158;;;;-1:-1:-1;;;28057:158:0;;11254:2:1;28057:158:0;;;11236:21:1;11293:2;11273:18;;;11266:30;11332:34;11312:18;;;11305:62;-1:-1:-1;;;11383:18:1;;;11376:51;11444:19;;28057:158:0;11052:417:1;28057:158:0;28290:10;;-1:-1:-1;;;;;15697:18:0;;15665:7;15697:18;;;;;;;;;;;28264:22;;:6;:22;:::i;:::-;:36;;28234:129;;;;-1:-1:-1;;;28234:129:0;;11676:2:1;28234:129:0;;;11658:21:1;11715:2;11695:18;;;11688:30;-1:-1:-1;;;11734:18:1;;;11727:49;11793:18;;28234:129:0;11474:343:1;28234:129:0;28027:879;;;28389:6;28385:521;;-1:-1:-1;;;;;28632:35:0;;;;;;:31;:35;;;;;;;;28631:36;:95;;;;-1:-1:-1;;;;;;28689:37:0;;;;;;:31;:37;;;;;;;;28688:38;28631:95;28609:297;;;28817:10;;-1:-1:-1;;;;;15697:18:0;;15665:7;15697:18;;;;;;;;;;;28791:22;;:6;:22;:::i;:::-;:36;;28761:129;;;;-1:-1:-1;;;28761:129:0;;11676:2:1;28761:129:0;;;11658:21:1;11715:2;11695:18;;;11688:30;-1:-1:-1;;;11734:18:1;;;11727:49;11793:18;;28761:129:0;11474:343:1;28761:129:0;28934:13;;;;28933:14;:63;;;;-1:-1:-1;;;;;;28965:31:0;;;;;;:25;:31;;;;;;;;28964:32;28933:63;:106;;;;-1:-1:-1;;;;;;29014:25:0;;;;;;:19;:25;;;;;;;;29013:26;28933:106;:147;;;;-1:-1:-1;;;;;;29057:23:0;;;;;;:19;:23;;;;;;;;29056:24;28933:147;28929:521;;;29101:10;;:14;29097:27;;29117:7;;;;;;26998:2519;;;:::o;29097:27::-;29187:4;29138:28;15697:18;;;;;;;;;;;29247:19;;29223:43;;;;;;;29285:28;;;29297:16;29296:17;29285:28;29281:158;;;29334:13;:20;;-1:-1:-1;;29334:20:0;29350:4;29334:20;;;29373:10;:8;:10::i;:::-;29402:13;:21;;-1:-1:-1;;29402:21:0;;;29281:158;29082:368;;28929:521;29460:49;29477:4;29483:2;29487:6;29495;29503:5;29460:16;:49::i;:::-;27077:2440;;;;;;26998:2519;;;:::o;25007:241::-;-1:-1:-1;;;;;25093:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25093:39:0;;;;;;;25143:38;25093:31;:39;25143:25;:38::i;14280:191::-;14373:6;;;-1:-1:-1;;;;;14390:17:0;;;-1:-1:-1;;;;;;14390:17:0;;;;;;;14423:40;;14373:6;;;14390:17;14373:6;;14423:40;;14354:16;;14423:40;14343:128;14280:191;:::o;17530:708::-;-1:-1:-1;;;;;17661:18:0;;17653:68;;;;-1:-1:-1;;;17653:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17740:16:0;;17732:64;;;;-1:-1:-1;;;17732:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17882:15:0;;17860:19;17882:15;;;;;;;;;;;17930:21;;;;17908:109;;;;-1:-1:-1;;;17908:109:0;;12024:2:1;17908:109:0;;;12006:21:1;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;-1:-1:-1;;;12153:18:1;;;12146:36;12199:19;;17908:109:0;11822:402:1;17908:109:0;-1:-1:-1;;;;;18053:15:0;;;:9;:15;;;;;;;;;;;18071:20;;;18053:38;;18113:13;;;;;;;;:23;;18085:6;;18053:9;18113:23;;18085:6;;18113:23;:::i;:::-;;;;;;;;18169:2;-1:-1:-1;;;;;18154:26:0;18163:4;-1:-1:-1;;;;;18154:26:0;;18173:6;18154:26;;;;160:25:1;;148:2;133:18;;14:177;18154:26:0;;;;;;;;18193:37;25408:360;30780:1656;30863:4;30819:23;15697:18;;;;;;;;;;;30819:50;;30880:25;30960:14;;30927:16;;30908;;:35;;;;:::i;:::-;:66;;;;:::i;:::-;30880:94;-1:-1:-1;30989:20:0;;;:46;;-1:-1:-1;31013:22:0;;30989:46;30985:59;;;31037:7;;30780:1656::o;30985:59::-;31076:19;;31058:15;:37;31054:107;;;31130:19;;31112:37;;31054:107;31171:23;31282:1;31249:17;31216:16;;31198:15;:34;;;;:::i;:::-;31197:69;;;;:::i;:::-;:86;;;;:::i;:::-;31171:112;-1:-1:-1;31294:26:0;31323:36;:15;31171:112;31323:19;:36::i;:::-;31294:65;-1:-1:-1;31398:21:0;31430:37;31294:65;31430:17;:37::i;:::-;31478:18;31499:44;:21;31525:17;31499:25;:44::i;:::-;31478:65;;31554:23;31580:79;31631:17;31580:32;31595:16;;31580:10;:14;;:32;;;;:::i;:::-;:36;;:79::i;:::-;31554:105;;31670:21;31694:77;31743:17;31694:30;31709:14;;31694:10;:14;;:30;;;;:::i;:77::-;31670:101;-1:-1:-1;31782:23:0;31670:101;31808:28;31821:15;31808:10;:28;:::i;:::-;:44;;;;:::i;:::-;31782:70;;31887:1;31869:15;:19;:42;;;;;31910:1;31892:15;:19;31869:42;31865:277;;;31928:47;31942:15;31959;31928:13;:47::i;:::-;32099:16;;31995:135;;;12564:25:1;;;12620:2;12605:18;;12598:34;;;12648:18;;;12641:34;;;;31995:135:0;;;;;;12552:2:1;31995:135:0;;;31865:277;32173:1;32154:16;:20;;;32185:16;:20;;;32216:14;:18;;;32287:14;;32279:56;;32287:14;;;;-1:-1:-1;;;;;32287:14:0;;32315:15;;32279:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32384:12:0;;32376:52;;32247:88;;-1:-1:-1;32347:23:0;;-1:-1:-1;;;;;32384:12:0;;;;32410:13;;32347:23;32376:52;32347:23;32376:52;32410:13;32384:12;32376:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;30780:1656:0:o;29525:1247::-;29689:12;29704:21;29716:4;29722:2;29704:11;:21::i;:::-;29689:36;;29740:7;29736:985;;;29780:10;;29825:13;;29853:148;;;;29904:17;;29891:10;;:30;;;;:::i;:::-;29883:38;;29968:17;;29952:13;;:33;;;;:::i;:::-;29940:45;;29853:148;30019:6;30015:151;;;30067:18;;30054:10;;:31;;;;:::i;:::-;30046:39;;30132:18;;30116:13;;:34;;;;:::i;:::-;30104:46;;30015:151;30194:12;30209:26;30231:3;30209:17;:6;30220:5;30209:10;:17::i;:26::-;30194:41;-1:-1:-1;30291:5:0;30271:16;30278:9;30194:41;30271:16;:::i;:::-;30270:26;;;;:::i;:::-;30250:16;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;30337:11:0;;30352:5;;30330:18;;:4;:18;:::i;:::-;30329:28;;;;:::i;:::-;30311:14;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;30400:13:0;;30417:5;;30393:20;;:4;:20;:::i;:::-;30392:30;;;;:::i;:::-;30372:16;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;30443:8:0;;30439:91;;30472:42;30488:4;30502;30509;30472:15;:42::i;:::-;30544:14;30554:4;30544:14;;:::i;:::-;;;29749:821;;;29736:985;;;30598:6;30580:15;30590:4;-1:-1:-1;;;;;15697:18:0;15665:7;15697:18;;;;;;;;;;;;15546:177;30580:15;:24;30576:145;;;-1:-1:-1;;;;;30625:25:0;;;;;;:19;:25;;;;;;;;30621:67;;;30652:36;30662:2;30674:4;30681:6;30652:9;:36::i;:::-;30703:7;;;30576:145;30731:33;30747:4;30753:2;30757:6;30731:15;:33::i;:::-;29678:1094;29525:1247;;;;;;:::o;12270:98::-;12328:7;12355:5;12359:1;12355;:5;:::i;:::-;12348:12;12270:98;-1:-1:-1;;;12270:98:0:o;32444:479::-;32535:16;;;32549:1;32535:16;;;;;;;;32511:21;;32535:16;;;;;;;;;;-1:-1:-1;32535:16:0;32511:40;;32580:4;32562;32567:1;32562:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32562:23:0;;;-1:-1:-1;;;;;32562:23:0;;;;;32606:16;;;;;;;;;-1:-1:-1;;;;;32606:16:0;-1:-1:-1;;;;;32606:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32596:4;32601:1;32596:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32596:33:0;;;:7;;;;;;;;;:33;32674:16;;32642:63;;32659:4;;32674:16;;;;32693:11;32642:8;:63::i;:::-;32718:16;;:197;;-1:-1:-1;;;32718:197:0;;:16;;;;-1:-1:-1;;;;;32718:16:0;;:67;;:197;;32800:11;;32826:1;;32842:4;;32869;;32889:15;;32718:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12376:98;12434:7;12461:5;12465:1;12461;:5;:::i;12482:98::-;12540:7;12567:5;12571:1;12567;:5;:::i;32931:363::-;33045:16;;33013:63;;33030:4;;33045:16;;;-1:-1:-1;;;;;33045:16:0;33064:11;33013:8;:63::i;:::-;33087:16;;-1:-1:-1;;;;;33087:16:0;;;;;:32;33127:9;33160:4;33180:11;33206:1;;33238:7;13773:6;;-1:-1:-1;;;;;13773:6:0;;13700:87;33238:7;33087:199;;;;;;-1:-1:-1;;;;;;33087:199:0;;;-1:-1:-1;;;;;14760:15:1;;;33087:199:0;;;14742:34:1;14792:18;;;14785:34;;;;14835:18;;;14828:34;;;;14878:18;;;14871:34;14942:15;;;14921:19;;;14914:44;33260:15:0;14974:19:1;;;14967:35;14676:19;;33087:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26421:569::-;26523:14;;26485:4;;;;-1:-1:-1;;;;;26515:22:0;;;26523:14;;26515:22;:57;;;;-1:-1:-1;26555:16:0;;-1:-1:-1;;;;;26541:31:0;;;26555:16;;;;;26541:31;;26515:57;26502:70;;26587:5;:32;;;;-1:-1:-1;;;;;;26596:23:0;;;;;;:19;:23;;;;;;;;26587:32;26583:53;;;26635:1;26621:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;26583:53:0;-1:-1:-1;;;;;26672:25:0;;26647:22;26672:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26701:23:0;;;;;;:19;:23;;;;;;;;26672:52;26755:14;;26647:77;;-1:-1:-1;;;;;;26749:20:0;;;26755:14;;26749:20;26735:11;26795:5;;:15;;;26804:6;26795:15;26838:10;;26781:29;;-1:-1:-1;26838:14:0;;;;;;26885:39;;-1:-1:-1;26911:13:0;;;;26910:14;26885:39;:74;;;;;26942:17;26941:18;26885:74;:97;;;;;26976:6;26885:97;26864:118;26421:569;-1:-1:-1;;;;;;;;26421:569:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:316::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;-1:-1:-1;;1767:23:1;;;1837:2;1822:18;;1809:32;;-1:-1:-1;1888:2:1;1873:18;;;1860:32;;1582:316;-1:-1:-1;1582:316:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2553:416::-;2618:6;2626;2679:2;2667:9;2658:7;2654:23;2650:32;2647:52;;;2695:1;2692;2685:12;2647:52;2734:9;2721:23;2753:31;2778:5;2753:31;:::i;:::-;2803:5;-1:-1:-1;2860:2:1;2845:18;;2832:32;2902:15;;2895:23;2883:36;;2873:64;;2933:1;2930;2923:12;2873:64;2956:7;2946:17;;;2553:416;;;;;:::o;2974:247::-;3033:6;3086:2;3074:9;3065:7;3061:23;3057:32;3054:52;;;3102:1;3099;3092:12;3054:52;3141:9;3128:23;3160:31;3185:5;3160:31;:::i;3668:388::-;3736:6;3744;3797:2;3785:9;3776:7;3772:23;3768:32;3765:52;;;3813:1;3810;3803:12;3765:52;3852:9;3839:23;3871:31;3896:5;3871:31;:::i;:::-;3921:5;-1:-1:-1;3978:2:1;3963:18;;3950:32;3991:33;3950:32;3991:33;:::i;4061:380::-;4140:1;4136:12;;;;4183;;;4204:61;;4258:4;4250:6;4246:17;4236:27;;4204:61;4311:2;4303:6;4300:14;4280:18;4277:38;4274:161;;4357:10;4352:3;4348:20;4345:1;4338:31;4392:4;4389:1;4382:15;4420:4;4417:1;4410:15;4274:161;;4061:380;;;:::o;4446:356::-;4648:2;4630:21;;;4667:18;;;4660:30;4726:34;4721:2;4706:18;;4699:62;4793:2;4778:18;;4446:356::o;4807:127::-;4868:10;4863:3;4859:20;4856:1;4849:31;4899:4;4896:1;4889:15;4923:4;4920:1;4913:15;4939:168;5012:9;;;5043;;5060:15;;;5054:22;;5040:37;5030:71;;5081:18;;:::i;5112:217::-;5152:1;5178;5168:132;;5222:10;5217:3;5213:20;5210:1;5203:31;5257:4;5254:1;5247:15;5285:4;5282:1;5275:15;5168:132;-1:-1:-1;5314:9:1;;5112:217::o;5750:125::-;5815:9;;;5836:10;;;5833:36;;;5849:18;;:::i;9891:401::-;10093:2;10075:21;;;10132:2;10112:18;;;10105:30;10171:34;10166:2;10151:18;;10144:62;-1:-1:-1;;;10237:2:1;10222:18;;10215:35;10282:3;10267:19;;9891:401::o;10297:399::-;10499:2;10481:21;;;10538:2;10518:18;;;10511:30;10577:34;10572:2;10557:18;;10550:62;-1:-1:-1;;;10643:2:1;10628:18;;10621:33;10686:3;10671:19;;10297:399::o;12229:128::-;12296:9;;;12317:11;;;12314:37;;;12331:18;;:::i;13028:127::-;13089:10;13084:3;13080:20;13077:1;13070:31;13120:4;13117:1;13110:15;13144:4;13141:1;13134:15;13160:251;13230:6;13283:2;13271:9;13262:7;13258:23;13254:32;13251:52;;;13299:1;13296;13289:12;13251:52;13331:9;13325:16;13350:31;13375:5;13350:31;:::i;13416:980::-;13678:4;13726:3;13715:9;13711:19;13757:6;13746:9;13739:25;13783:2;13821:6;13816:2;13805:9;13801:18;13794:34;13864:3;13859:2;13848:9;13844:18;13837:31;13888:6;13923;13917:13;13954:6;13946;13939:22;13992:3;13981:9;13977:19;13970:26;;14031:2;14023:6;14019:15;14005:29;;14052:1;14062:195;14076:6;14073:1;14070:13;14062:195;;;14141:13;;-1:-1:-1;;;;;14137:39:1;14125:52;;14232:15;;;;14197:12;;;;14173:1;14091:9;14062:195;;;-1:-1:-1;;;;;;;14313:32:1;;;;14308:2;14293:18;;14286:60;-1:-1:-1;;;14377:3:1;14362:19;14355:35;14274:3;13416:980;-1:-1:-1;;;13416:980:1:o;15013:306::-;15101:6;15109;15117;15170:2;15158:9;15149:7;15145:23;15141:32;15138:52;;;15186:1;15183;15176:12;15138:52;15215:9;15209:16;15199:26;;15265:2;15254:9;15250:18;15244:25;15234:35;;15309:2;15298:9;15294:18;15288:25;15278:35;;15013:306;;;;;:::o

Swarm Source

ipfs://3ac23cbd2aaad743509c01be21e00f5d27454163abd7fbc2d89f8bd01b4a1dc9
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.