ETH Price: $2,436.83 (+4.57%)

Token

TradeWix (WIX)
 

Overview

Max Total Supply

1,000,000,000 WIX

Holders

197 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
65,980 WIX

Value
$0.00
0xbbfa4d40602f10af07dbf9b2d7959750ffc21dba
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

TradeWix is ​​an app that aims to facilitate access to verified crypto projects and build a stable ecosystem in the background!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TradeWixToken

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-15
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

/**

        ████████╗██████╗░░█████╗░██████╗░███████╗░██╗░░░░░░░██╗██╗██╗░░██╗    ████████╗░█████╗░██╗░░██╗███████╗███╗░░██╗
        ╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██╔════╝░██║░░██╗░░██║██║╚██╗██╔╝    ╚══██╔══╝██╔══██╗██║░██╔╝██╔════╝████╗░██║
        ░░░██║░░░██████╔╝███████║██║░░██║█████╗░░░╚██╗████╗██╔╝██║░╚███╔╝░    ░░░██║░░░██║░░██║█████═╝░█████╗░░██╔██╗██║
        ░░░██║░░░██╔══██╗██╔══██║██║░░██║██╔══╝░░░░████╔═████║░██║░██╔██╗░    ░░░██║░░░██║░░██║██╔═██╗░██╔══╝░░██║╚████║
        ░░░██║░░░██║░░██║██║░░██║██████╔╝███████╗░░╚██╔╝░╚██╔╝░██║██╔╝╚██╗    ░░░██║░░░╚█████╔╝██║░╚██╗███████╗██║░╚███║
        ░░░╚═╝░░░╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░╚══════╝░░░╚═╝░░░╚═╝░░╚═╝╚═╝░░╚═╝    ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚══╝

*/
interface IBEP20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = address(msg.sender);
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface 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 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 burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

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

contract TradeWixToken is Ownable, IBEP20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromWalletHoldingLimit;
    mapping(address => bool) private _isExcludedFromTxLimit;
    mapping(address => bool) private _isAutomaticMarketMaker;
    uint256 public _decimals = 18;
    uint256 public _totalSupply = 1 * 10**9 * 10**_decimals;
    string private _name = "TradeWix";
    string private _symbol = "WIX";

    address public immutable DeadWalletAddress =
        0x000000000000000000000000000000000000dEaD;
    address payable public MarketingWalletAddress =
        payable(0x2EB15D3C5c5C6C30C2D53d552d49236673889cf4);
    address payable public StakingWalletAddress =
        payable(0xf57fd7Fa55E5e58EF67F00877C31351e1cFe26A3);

    uint256 public _BuyingLiquidityFee = 1;
    uint256 public _BuyingMarketingFee = 2;
    uint256 public _BuyingStakingFee = 1;

    uint256 public _SellingLiquidityFee = 1;
    uint256 public _SellingMarketingFee = 2;
    uint256 public _SellingStakingFee = 1;

    uint256 internal feeDenominator = 100;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool internal inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public numTokensSellToAddToLiquidity = 1 * 10**6 * 10**_decimals;
    uint256 public _maxWalletHoldingLimit = 11 * 10**6 * 10**_decimals;
    uint256 public _maxTxLimit = 10 * 10**6 * 10**_decimals;

    event MaxWalletHoldingAmountUpdated(uint256 updatedMaxWalletHoldingAmount);
    event MaxTxHoldingAmountUpdated(uint256 updatedMaxTxAmount);
    event AutomaticMarketMakerPairUpdated(address account, bool status);
    event TaxBuyingFeeUpdated(uint256 TaxFees);
    event TaxSellingFeeUpdated(uint256 TaxFees);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _balances[owner()] = _totalSupply;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee and Wallet holding Limits
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[StakingWalletAddress] = true;
        _isExcludedFromFee[MarketingWalletAddress] = true;

        _isExcludedFromTxLimit[address(this)] = true;
        _isExcludedFromTxLimit[owner()] = true;
        _isExcludedFromTxLimit[MarketingWalletAddress] = true;
        _isExcludedFromTxLimit[StakingWalletAddress] = true;

        _isExcludedFromWalletHoldingLimit[address(this)] = true;
        _isExcludedFromWalletHoldingLimit[StakingWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[uniswapV2Pair] = true;
        _isExcludedFromWalletHoldingLimit[MarketingWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[owner()] = true;

        _isAutomaticMarketMaker[uniswapV2Pair] = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external view returns (uint256) {
        return _decimals;
    }

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "IBEP20: approve from the zero address");
        require(spender != address(0), "IBEP20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromTax(address add) external view returns (bool) {
        return _isExcludedFromFee[add];
    }

    function isExcludedFromWalletLimit(address WalletAddress)
        external
        view
        returns (bool)
    {
        return _isExcludedFromWalletHoldingLimit[WalletAddress];
    }

    function excludeFromMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        _isExcludedFromWalletHoldingLimit[account] = true;
    }

    function includeInMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        require(
            account != uniswapV2Pair,
            "You can't play with Liquidity pair address"
        );
        _isExcludedFromWalletHoldingLimit[account] = false;
    }

    function UpdateMaxWalletHoldingLimit(uint256 maxWalletHoldingAmount)
        external
        onlyOwner
    {
        require(
            maxWalletHoldingAmount * 10**_decimals >= 1_000_000 * 10**_decimals,
            "Amount should be greater or equal to 1 Millin Tokens"
        );
        _maxWalletHoldingLimit = maxWalletHoldingAmount * 10**_decimals;
        emit MaxWalletHoldingAmountUpdated(_maxWalletHoldingLimit);
    }

    function excludeFromMaxTxLimit(address account) external onlyOwner {
        _isExcludedFromTxLimit[account] = true;
    }

    function includeInMaxTxLimit(address account) external onlyOwner {
        _isExcludedFromTxLimit[account] = false;
    }

    function UpdateMaxTxLimit(uint256 maxTxAmount) external onlyOwner {
        require(
            maxTxAmount * 10**_decimals >= 1_000_000 * 10**_decimals,
            "Amount should be greater or equal to 1 Millin Tokens"
        );
        _maxTxLimit = maxTxAmount * 10**_decimals;
        emit MaxTxHoldingAmountUpdated(_maxTxLimit);
    }

    function isAutomaticMarketMaker(address account)
        external
        view
        returns (bool)
    {
        return _isAutomaticMarketMaker[account];
    }

    function setNewLiquidityPair(address addNewAMM, bool status)
        external
        onlyOwner
    {
        _isAutomaticMarketMaker[addNewAMM] = status;
        emit AutomaticMarketMakerPairUpdated(addNewAMM, status);
    }

    function UpdateWallets(address payable newMarketingWallet)
        external
        onlyOwner
    {
        require(newMarketingWallet != address(0), "You can't set zero address");
        MarketingWalletAddress = newMarketingWallet;
    }

    function UpdateBuyingTaxFees(
        uint256 newLiquidityFee,
        uint256 newMarketingFee,
        uint256 newStakingFee
    ) external onlyOwner {
        require(
            newLiquidityFee + newMarketingFee + newStakingFee <= 15,
            "you can't set more than 15%"
        );
        _BuyingLiquidityFee = newLiquidityFee;
        _BuyingMarketingFee = newMarketingFee;
        _BuyingStakingFee = newStakingFee;

        emit TaxBuyingFeeUpdated(
            _BuyingLiquidityFee + _BuyingMarketingFee + _BuyingStakingFee
        );
    }

    function UpdateSellingTaxFees(
        uint256 newLiquidityFee,
        uint256 newMarketingFee,
        uint256 newStakingFee
    ) external onlyOwner {
        require(
            newLiquidityFee + newMarketingFee + newStakingFee <= 15,
            "you can't set more than 15%"
        );
        _SellingLiquidityFee = newLiquidityFee;
        _SellingMarketingFee = newMarketingFee;
        _SellingStakingFee = newStakingFee;

        emit TaxSellingFeeUpdated(
            _SellingLiquidityFee + _SellingMarketingFee + _SellingStakingFee
        );
    }

    function UpdateNoOfTokensSellToGetReward(uint256 thresholdValue)
        external
        onlyOwner
    {
        numTokensSellToAddToLiquidity = thresholdValue * 10**_decimals;
        emit MinTokensBeforeSwapUpdated(numTokensSellToAddToLiquidity);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "IBEP20: transfer amount exceeds allowance"
        );
        return true;
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "IBEP20: transfer from the zero address");
        require(
            recipient != address(0),
            "IBEP20: transfer to the zero address"
        );
        require(_balances[sender] >= amount, "You don't have enough balance");

        if (
            !_isExcludedFromWalletHoldingLimit[recipient] && sender != owner()
        ) {
            require(
                balanceOf(recipient) + amount <= _maxWalletHoldingLimit,
                "Wallet Holding limit exceeded"
            );
        }

        if (sender != owner()) {
            require(
                amount <= _maxTxLimit ||
                    _isExcludedFromTxLimit[sender] ||
                    _isExcludedFromTxLimit[recipient],
                "TX Limit Exceeded"
            );
        }

        uint256 totalTax = 0;

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            totalTax = 0;
        } else {
            if (_isAutomaticMarketMaker[recipient]) {
                totalTax =
                    (amount *
                        (_SellingLiquidityFee +
                            _SellingMarketingFee +
                            _SellingStakingFee)) /
                    (feeDenominator);
            } else {
                totalTax =
                    (amount *
                        (_BuyingLiquidityFee +
                            _BuyingMarketingFee +
                            _BuyingStakingFee)) /
                    (feeDenominator);
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            recipient == uniswapV2Pair &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > numTokensSellToAddToLiquidity
        ) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;

                uint256 remainingLiquidityToken;
                if (
                    _SellingLiquidityFee +
                        _SellingMarketingFee +
                        _SellingStakingFee >
                    0
                ) {
                    remainingLiquidityToken =
                        (contractTokenBalance *
                            (_SellingMarketingFee + _SellingStakingFee)) /
                        (_SellingMarketingFee +
                            _SellingLiquidityFee +
                            _SellingStakingFee);
                }

                uint256 liquidityToken;
                if (_SellingLiquidityFee > 0) {
                    liquidityToken =
                        contractTokenBalance -
                        (remainingLiquidityToken);
                } else {
                    if (_SellingMarketingFee + _SellingStakingFee > 0) {
                        remainingLiquidityToken = contractTokenBalance;
                    }
                }

                // Swap Tokens and Send to Marketing Wallet
                if (_SellingMarketingFee + _SellingStakingFee > 0) {
                    swapTokens(remainingLiquidityToken);
                }
                if (liquidityToken > 0) {
                    // Remove Hate Swap and Liquidity by breaking Token in proportion
                    swapAndLiquify(liquidityToken);
                }
            }
        }

        uint256 amountReceived = amount - (totalTax);
        _balances[address(this)] += totalTax;
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] += amountReceived;

        if (totalTax > 0) {
            emit Transfer(sender, address(this), totalTax);
        }
        emit Transfer(sender, recipient, amountReceived);
    }

    function swapTokens(uint256 _contractTokenBalance) private lockTheSwap {
        uint256 combineFee = _SellingMarketingFee + _SellingStakingFee;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(_contractTokenBalance);
        uint256 transferredBalance = address(this).balance - (initialBalance);
        uint256 marketingBalance = (transferredBalance *
            (_SellingMarketingFee)) / (combineFee);
        uint256 stakingBalance = (transferredBalance * (_SellingStakingFee)) /
            combineFee;

        if (marketingBalance > 0) {
            transferToAddressETH(MarketingWalletAddress, marketingBalance);
        }
        if (stakingBalance > 0) {
            transferToAddressETH(StakingWalletAddress, stakingBalance);
        }
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance - (initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        if (address(this).balance > 0) {
            MarketingWalletAddress.transfer(address(this).balance);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> wETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    /* Airdrop Begins */
    function AirDropMultiTransfer(
        address[] calldata addresses,
        uint256[] calldata tokens
    ) external {
        address from = msg.sender;
        require(
            addresses.length < 501,
            "GAS Error: max airdrop limit is 500 addresses"
        );
        require(
            addresses.length == tokens.length,
            "Mismatch between Address and token count"
        );

        uint256 SCCC = 0;

        for (uint256 i = 0; i < addresses.length; i++) {
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(from, addresses[i], tokens[i]);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AutomaticMarketMakerPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxTxAmount","type":"uint256"}],"name":"MaxTxHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxWalletHoldingAmount","type":"uint256"}],"name":"MaxWalletHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxBuyingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxSellingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"AirDropMultiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DeadWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newStakingFee","type":"uint256"}],"name":"UpdateBuyingTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"UpdateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletHoldingAmount","type":"uint256"}],"name":"UpdateMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdValue","type":"uint256"}],"name":"UpdateNoOfTokensSellToGetReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newStakingFee","type":"uint256"}],"name":"UpdateSellingTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"}],"name":"UpdateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_BuyingLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BuyingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BuyingStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingStakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletHoldingLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWalletHoldingLimit","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":"isAutomaticMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"WalletAddress","type":"address"}],"name":"isExcludedFromWalletLimit","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addNewAMM","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setNewLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052601260078190556200001890600a620006bb565b6200002890633b9aca00620006d0565b600855604051806040016040528060088152602001670a8e4c2c8caaed2f60c31b815250600990816200005c91906200078f565b506040805180820190915260038152620ae92b60eb1b6020820152600a906200008690826200078f565b5061dead608052600b80546001600160a01b0319908116732eb15d3c5c5c6c30c2d53d552d49236673889cf417909155600c805490911673f57fd7fa55e5e58ef67f00877c31351e1cfe26a31790556001600d8190556002600e819055600f829055601082905560115560125560646013556015805460ff60a81b1916600160a81b1790556007546200011b90600a620006bb565b6200012a90620f4240620006d0565b6016556007546200013d90600a620006bb565b6200014c9062a7d8c0620006d0565b6017556007546200015f90600a620006bb565b6200016e9062989680620006d0565b6018553480156200017e57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360085460016000620001d86000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027a91906200085b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee91906200085b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036291906200085b565b601580546001600160a01b03199081166001600160a01b039384161790915560148054909116918316919091179055600160036000620003aa6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553080825260038552838220805487166001908117909155600c54841683528483208054881682179055600b54909316825283822080548716841790558152600593849052918220805490941681179093556200043c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600b80548316825260058552838220805487166001908117909155600c80548516845285842080548916831790553084526004968790528584208054891683179055548416835284832080548816821790556015548416835284832080548816821790559054909216815291822080549094168117909355620004f56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601554909116815260069092529020805490911660011790556200054f6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200059791815260200190565b60405180910390a35062000886565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fd578160001904821115620005e157620005e1620005a6565b80851615620005ef57918102915b93841c9390800290620005c1565b509250929050565b6000826200061657506001620006b5565b816200062557506000620006b5565b81600181146200063e5760028114620006495762000669565b6001915050620006b5565b60ff8411156200065d576200065d620005a6565b50506001821b620006b5565b5060208310610133831016604e8410600b84101617156200068e575081810a620006b5565b6200069a8383620005bc565b8060001904821115620006b157620006b1620005a6565b0290505b92915050565b6000620006c9838362000605565b9392505050565b8082028115828204841417620006b557620006b5620005a6565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071557607f821691505b6020821081036200073657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200078a57600081815260208120601f850160051c81016020861015620007655750805b601f850160051c820191505b81811015620007865782815560010162000771565b5050505b505050565b81516001600160401b03811115620007ab57620007ab620006ea565b620007c381620007bc845462000700565b846200073c565b602080601f831160018114620007fb5760008415620007e25750858301515b600019600386901b1c1916600185901b17855562000786565b600085815260208120601f198616915b828110156200082c578886015182559484019460019091019084016200080b565b50858210156200084b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200086e57600080fd5b81516001600160a01b0381168114620006c957600080fd5b608051612760620008a2600039600061032b01526127606000f3fe6080604052600436106102b25760003560e01c8063715018a611610175578063b40f9469116100dc578063d12a768811610095578063ea4b6a051161006f578063ea4b6a05146108b5578063f2fde38b146108cb578063f853e25e146108eb578063f8f3c5a91461090b57600080fd5b8063d12a768814610839578063dd62ed3e1461084f578063ea2f0b371461089557600080fd5b8063b40f946914610747578063b7a9a0af14610780578063b7cd7794146107a0578063be9e18a4146107c0578063c49b9a80146107e0578063cb4ca6311461080057600080fd5b806395d89b411161012e57806395d89b41146106a6578063a27f656d146106bb578063a2cefe6d146106db578063a457c2d7146106f1578063a9059cbb14610711578063abdadf621461073157600080fd5b8063715018a6146105fd57806371547984146106125780637d3ddc9214610632578063857493bf146106525780638da5cb5b146106685780639429b9fe1461068657600080fd5b80633979e9ca1161021957806349bd5a5e116101d257806349bd5a5e146105265780634a74bb02146105465780635367230b14610567578063547a7b851461058757806370035ba5146105a757806370a08231146105c757600080fd5b80633979e9ca1461046157806339e6cd661461049a5780633ab8b896146104ba5780633eaaf86b146104da578063437823ec146104f057806349b6e95c1461051057600080fd5b806318160ddd1161026b57806318160ddd146103cb57806323b872dd146103e0578063313ce5671461040057806332424aa314610415578063356f53791461042b578063395093511461044157600080fd5b806306fdde03146102be578063095ea7b3146102e95780630a6a754814610319578063124035a81461036557806313e3c9a1146103895780631694505e146103ab57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610921565b6040516102e09190612185565b60405180910390f35b3480156102f557600080fd5b506103096103043660046121eb565b6109b3565b60405190151581526020016102e0565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e0565b34801561037157600080fd5b5061037b60175481565b6040519081526020016102e0565b34801561039557600080fd5b506103a96103a4366004612217565b6109ca565b005b3480156103b757600080fd5b5060145461034d906001600160a01b031681565b3480156103d757600080fd5b5060085461037b565b3480156103ec57600080fd5b506103096103fb366004612243565b610abd565b34801561040c57600080fd5b5060075461037b565b34801561042157600080fd5b5061037b60075481565b34801561043757600080fd5b5061037b600d5481565b34801561044d57600080fd5b5061030961045c3660046121eb565b610b5b565b34801561046d57600080fd5b5061030961047c366004612284565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104a657600080fd5b50600b5461034d906001600160a01b031681565b3480156104c657600080fd5b50600c5461034d906001600160a01b031681565b3480156104e657600080fd5b5061037b60085481565b3480156104fc57600080fd5b506103a961050b366004612284565b610b97565b34801561051c57600080fd5b5061037b600f5481565b34801561053257600080fd5b5060155461034d906001600160a01b031681565b34801561055257600080fd5b5060155461030990600160a81b900460ff1681565b34801561057357600080fd5b506103a9610582366004612217565b610be5565b34801561059357600080fd5b506103a96105a23660046122f4565b610caf565b3480156105b357600080fd5b506103a96105c2366004612284565b610e99565b3480156105d357600080fd5b5061037b6105e2366004612284565b6001600160a01b031660009081526001602052604090205490565b34801561060957600080fd5b506103a9610ee7565b34801561061e57600080fd5b506103a961062d366004612284565b610f5b565b34801561063e57600080fd5b506103a961064d366004612375565b610fa6565b34801561065e57600080fd5b5061037b60125481565b34801561067457600080fd5b506000546001600160a01b031661034d565b34801561069257600080fd5b506103a96106a13660046123aa565b611033565b3480156106b257600080fd5b506102d36110b1565b3480156106c757600080fd5b506103a96106d6366004612284565b6110c0565b3480156106e757600080fd5b5061037b600e5481565b3480156106fd57600080fd5b5061030961070c3660046121eb565b611162565b34801561071d57600080fd5b5061030961072c3660046121eb565b6111fe565b34801561073d57600080fd5b5061037b60115481565b34801561075357600080fd5b50610309610762366004612284565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561078c57600080fd5b506103a961079b366004612284565b61120b565b3480156107ac57600080fd5b506103a96107bb366004612284565b6112c7565b3480156107cc57600080fd5b506103a96107db3660046123aa565b611315565b3480156107ec57600080fd5b506103a96107fb3660046123c3565b6113dd565b34801561080c57600080fd5b5061030961081b366004612284565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561084557600080fd5b5061037b60165481565b34801561085b57600080fd5b5061037b61086a3660046123de565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108a157600080fd5b506103a96108b0366004612284565b611454565b3480156108c157600080fd5b5061037b60105481565b3480156108d757600080fd5b506103a96108e6366004612284565b61149f565b3480156108f757600080fd5b506103a96109063660046123aa565b611589565b34801561091757600080fd5b5061037b60185481565b60606009805461093090612417565b80601f016020809104026020016040519081016040528092919081815260200182805461095c90612417565b80156109a95780601f1061097e576101008083540402835291602001916109a9565b820191906000526020600020905b81548152906001019060200180831161098c57829003601f168201915b5050505050905090565b60006109c0338484611651565b5060015b92915050565b6000546001600160a01b031633146109fd5760405162461bcd60e51b81526004016109f490612451565b60405180910390fd5b600f81610a0a848661249c565b610a14919061249c565b1115610a625760405162461bcd60e51b815260206004820152601b60248201527f796f752063616e277420736574206d6f7265207468616e20313525000000000060448201526064016109f4565b6010839055601182905560128190557f6b7559a32953872c1ea69c07b9c25b70cc8ac27d03a34d0104f1922feeb21d6e81610a9d848661249c565b610aa7919061249c565b60405190815260200160405180910390a1505050565b6000610aca848484611778565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610b505760405162461bcd60e51b815260206004820152602960248201527f4942455032303a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016109f4565b506001949350505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916109c0918590610b9290869061249c565b611651565b6000546001600160a01b03163314610bc15760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610c0f5760405162461bcd60e51b81526004016109f490612451565b600f81610c1c848661249c565b610c26919061249c565b1115610c745760405162461bcd60e51b815260206004820152601b60248201527f796f752063616e277420736574206d6f7265207468616e20313525000000000060448201526064016109f4565b600d839055600e829055600f8190557f0360ea714a628fae03fc01846e588b4b053707ea9418c53df5cb0c44cfa23f0681610a9d848661249c565b336101f58410610d175760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084016109f4565b838214610d775760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016109f4565b6000805b85811015610dbb57848482818110610d9557610d956124af565b9050602002013582610da7919061249c565b915080610db3816124c5565b915050610d7b565b5080610ddc836001600160a01b031660009081526001602052604090205490565b1015610e2a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c6574000000000060448201526064016109f4565b60005b85811015610e9057610e7e83888884818110610e4b57610e4b6124af565b9050602002016020810190610e609190612284565b878785818110610e7257610e726124af565b90506020020135611778565b80610e88816124c5565b915050610e2d565b50505050505050565b6000546001600160a01b03163314610ec35760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610f115760405162461bcd60e51b81526004016109f490612451565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f855760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314610fd05760405162461bcd60e51b81526004016109f490612451565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b769910160405180910390a15050565b6000546001600160a01b0316331461105d5760405162461bcd60e51b81526004016109f490612451565b60075461106b90600a6125c2565b61107590826125ce565b60168190556040519081527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00906020015b60405180910390a150565b6060600a805461093090612417565b6000546001600160a01b031633146110ea5760405162461bcd60e51b81526004016109f490612451565b6001600160a01b0381166111405760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e277420736574207a65726f206164647265737300000000000060448201526064016109f4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156111e55760405162461bcd60e51b815260206004820152602660248201527f4942455032303a2064656372656173656420616c6c6f77616e63652062656c6f60448201526577207a65726f60d01b60648201526084016109f4565b6111f43385610b9286856125e5565b5060019392505050565b60006109c0338484611778565b6000546001600160a01b031633146112355760405162461bcd60e51b81526004016109f490612451565b6015546001600160a01b03908116908216036112a65760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e277420706c61792077697468204c69717569646974792070616044820152696972206164647265737360b01b60648201526084016109f4565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146112f15760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b0316331461133f5760405162461bcd60e51b81526004016109f490612451565b60075461134d90600a6125c2565b61135a90620f42406125ce565b60075461136890600a6125c2565b61137290836125ce565b10156113905760405162461bcd60e51b81526004016109f4906125f8565b60075461139e90600a6125c2565b6113a890826125ce565b60178190556040519081527f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa906020016110a6565b6000546001600160a01b031633146114075760405162461bcd60e51b81526004016109f490612451565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110a690831515815260200190565b6000546001600160a01b0316331461147e5760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b031633146114c95760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03811661152e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115b35760405162461bcd60e51b81526004016109f490612451565b6007546115c190600a6125c2565b6115ce90620f42406125ce565b6007546115dc90600a6125c2565b6115e690836125ce565b10156116045760405162461bcd60e51b81526004016109f4906125f8565b60075461161290600a6125c2565b61161c90826125ce565b60188190556040519081527f2f0230c168217a20bed23aafa989b365ae4f826eaaa01b933669653715fc9067906020016110a6565b6001600160a01b0383166116b55760405162461bcd60e51b815260206004820152602560248201527f4942455032303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109f4565b6001600160a01b0382166117175760405162461bcd60e51b815260206004820152602360248201527f4942455032303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109f4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117dd5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109f4565b6001600160a01b03821661183f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109f4565b6001600160a01b0383166000908152600160205260409020548111156118a75760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206861766520656e6f7567682062616c616e636500000060448201526064016109f4565b6001600160a01b03821660009081526004602052604090205460ff161580156118de57506000546001600160a01b03848116911614155b1561195e5760175481611906846001600160a01b031660009081526001602052604090205490565b611910919061249c565b111561195e5760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420486f6c64696e67206c696d697420657863656564656400000060448201526064016109f4565b6000546001600160a01b038481169116146119ff576018548111158061199c57506001600160a01b03831660009081526005602052604090205460ff165b806119bf57506001600160a01b03821660009081526005602052604090205460ff165b6119ff5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109f4565b6001600160a01b03831660009081526003602052604081205460ff1680611a3e57506001600160a01b03831660009081526003602052604090205460ff165b15611a4b57506000611ade565b6001600160a01b03831660009081526006602052604090205460ff1615611aa757601354601254601154601054611a82919061249c565b611a8c919061249c565b611a9690846125ce565b611aa0919061264c565b9050611ade565b601354600f54600e54600d54611abd919061249c565b611ac7919061249c565b611ad190846125ce565b611adb919061264c565b90505b306000908152600160205260409020546016546015549082101590600160a01b900460ff16158015611b1d57506015546001600160a01b038681169116145b8015611b325750601554600160a81b900460ff165b8015611b5957506016546015546001600160a01b0316600090815260016020526040902054115b15611c3e578015611c3e576016549150600080601254601154601054611b7f919061249c565b611b89919061249c565b1115611bd357601254601054601154611ba2919061249c565b611bac919061249c565b601254601154611bbc919061249c565b611bc690856125ce565b611bd0919061264c565b90505b60105460009015611bef57611be882856125e5565b9050611c0b565b6000601254601154611c01919061249c565b1115611c0b578391505b6000601254601154611c1d919061249c565b1115611c2c57611c2c82611d6f565b8015611c3b57611c3b81611e35565b50505b6000611c4a84866125e5565b30600090815260016020526040812080549293508692909190611c6e90849061249c565b90915550506001600160a01b038716600090815260016020526040902054611c979086906125e5565b6001600160a01b038089166000908152600160205260408082209390935590881681529081208054839290611ccd90849061249c565b90915550508315611d195760405184815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d5e91815260200190565b60405180910390a350505050505050565b6015805460ff60a01b1916600160a01b179055601254601154600091611d949161249c565b905047611da083611f1b565b6000611dac82476125e5565b905060008360115483611dbf91906125ce565b611dc9919061264c565b905060008460125484611ddc91906125ce565b611de6919061264c565b90508115611e0457600b54611e04906001600160a01b031683612075565b8015611e2057600c54611e20906001600160a01b031682612075565b50506015805460ff60a01b1916905550505050565b6015805460ff60a01b1916600160a01b1790556000611e5560028361264c565b90506000611e6382846125e5565b905047611e6f83611f1b565b6000611e7b82476125e5565b9050611e8783826120b0565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611f0757600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611e20573d6000803e3d6000fd5b50506015805460ff60a01b19169055505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f5057611f506124af565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd919061266e565b81600181518110611fe057611fe06124af565b6001600160a01b0392831660209182029290920101526014546120069130911684611651565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac9479061203f90859060009086903090429060040161268b565b600060405180830381600087803b15801561205957600080fd5b505af115801561206d573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156120ab573d6000803e3d6000fd5b505050565b6014546120c89030906001600160a01b031684611651565b6014546001600160a01b031663f305d7198230856000806120f16000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612159573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217e91906126fc565b5050505050565b600060208083528351808285015260005b818110156121b257858101830151858201604001528201612196565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146121e857600080fd5b50565b600080604083850312156121fe57600080fd5b8235612209816121d3565b946020939093013593505050565b60008060006060848603121561222c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561225857600080fd5b8335612263816121d3565b92506020840135612273816121d3565b929592945050506040919091013590565b60006020828403121561229657600080fd5b81356122a1816121d3565b9392505050565b60008083601f8401126122ba57600080fd5b50813567ffffffffffffffff8111156122d257600080fd5b6020830191508360208260051b85010111156122ed57600080fd5b9250929050565b6000806000806040858703121561230a57600080fd5b843567ffffffffffffffff8082111561232257600080fd5b61232e888389016122a8565b9096509450602087013591508082111561234757600080fd5b50612354878288016122a8565b95989497509550505050565b8035801515811461237057600080fd5b919050565b6000806040838503121561238857600080fd5b8235612393816121d3565b91506123a160208401612360565b90509250929050565b6000602082840312156123bc57600080fd5b5035919050565b6000602082840312156123d557600080fd5b6122a182612360565b600080604083850312156123f157600080fd5b82356123fc816121d3565b9150602083013561240c816121d3565b809150509250929050565b600181811c9082168061242b57607f821691505b60208210810361244b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c4576109c4612486565b634e487b7160e01b600052603260045260246000fd5b6000600182016124d7576124d7612486565b5060010190565b600181815b808511156125195781600019048211156124ff576124ff612486565b8085161561250c57918102915b93841c93908002906124e3565b509250929050565b600082612530575060016109c4565b8161253d575060006109c4565b8160018114612553576002811461255d57612579565b60019150506109c4565b60ff84111561256e5761256e612486565b50506001821b6109c4565b5060208310610133831016604e8410600b841016171561259c575081810a6109c4565b6125a683836124de565b80600019048211156125ba576125ba612486565b029392505050565b60006122a18383612521565b80820281158282048414176109c4576109c4612486565b818103818111156109c4576109c4612486565b60208082526034908201527f416d6f756e742073686f756c642062652067726561746572206f7220657175616040820152736c20746f2031204d696c6c696e20546f6b656e7360601b606082015260800190565b60008261266957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561268057600080fd5b81516122a1816121d3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126db5784516001600160a01b0316835293830193918301916001016126b6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561271157600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220361ab39e99dfa6b3c6d9ebacab3b9b3480df0877c1f80d8d5f5a825bbe4ac4d364736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063715018a611610175578063b40f9469116100dc578063d12a768811610095578063ea4b6a051161006f578063ea4b6a05146108b5578063f2fde38b146108cb578063f853e25e146108eb578063f8f3c5a91461090b57600080fd5b8063d12a768814610839578063dd62ed3e1461084f578063ea2f0b371461089557600080fd5b8063b40f946914610747578063b7a9a0af14610780578063b7cd7794146107a0578063be9e18a4146107c0578063c49b9a80146107e0578063cb4ca6311461080057600080fd5b806395d89b411161012e57806395d89b41146106a6578063a27f656d146106bb578063a2cefe6d146106db578063a457c2d7146106f1578063a9059cbb14610711578063abdadf621461073157600080fd5b8063715018a6146105fd57806371547984146106125780637d3ddc9214610632578063857493bf146106525780638da5cb5b146106685780639429b9fe1461068657600080fd5b80633979e9ca1161021957806349bd5a5e116101d257806349bd5a5e146105265780634a74bb02146105465780635367230b14610567578063547a7b851461058757806370035ba5146105a757806370a08231146105c757600080fd5b80633979e9ca1461046157806339e6cd661461049a5780633ab8b896146104ba5780633eaaf86b146104da578063437823ec146104f057806349b6e95c1461051057600080fd5b806318160ddd1161026b57806318160ddd146103cb57806323b872dd146103e0578063313ce5671461040057806332424aa314610415578063356f53791461042b578063395093511461044157600080fd5b806306fdde03146102be578063095ea7b3146102e95780630a6a754814610319578063124035a81461036557806313e3c9a1146103895780631694505e146103ab57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610921565b6040516102e09190612185565b60405180910390f35b3480156102f557600080fd5b506103096103043660046121eb565b6109b3565b60405190151581526020016102e0565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000dead81565b6040516001600160a01b0390911681526020016102e0565b34801561037157600080fd5b5061037b60175481565b6040519081526020016102e0565b34801561039557600080fd5b506103a96103a4366004612217565b6109ca565b005b3480156103b757600080fd5b5060145461034d906001600160a01b031681565b3480156103d757600080fd5b5060085461037b565b3480156103ec57600080fd5b506103096103fb366004612243565b610abd565b34801561040c57600080fd5b5060075461037b565b34801561042157600080fd5b5061037b60075481565b34801561043757600080fd5b5061037b600d5481565b34801561044d57600080fd5b5061030961045c3660046121eb565b610b5b565b34801561046d57600080fd5b5061030961047c366004612284565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104a657600080fd5b50600b5461034d906001600160a01b031681565b3480156104c657600080fd5b50600c5461034d906001600160a01b031681565b3480156104e657600080fd5b5061037b60085481565b3480156104fc57600080fd5b506103a961050b366004612284565b610b97565b34801561051c57600080fd5b5061037b600f5481565b34801561053257600080fd5b5060155461034d906001600160a01b031681565b34801561055257600080fd5b5060155461030990600160a81b900460ff1681565b34801561057357600080fd5b506103a9610582366004612217565b610be5565b34801561059357600080fd5b506103a96105a23660046122f4565b610caf565b3480156105b357600080fd5b506103a96105c2366004612284565b610e99565b3480156105d357600080fd5b5061037b6105e2366004612284565b6001600160a01b031660009081526001602052604090205490565b34801561060957600080fd5b506103a9610ee7565b34801561061e57600080fd5b506103a961062d366004612284565b610f5b565b34801561063e57600080fd5b506103a961064d366004612375565b610fa6565b34801561065e57600080fd5b5061037b60125481565b34801561067457600080fd5b506000546001600160a01b031661034d565b34801561069257600080fd5b506103a96106a13660046123aa565b611033565b3480156106b257600080fd5b506102d36110b1565b3480156106c757600080fd5b506103a96106d6366004612284565b6110c0565b3480156106e757600080fd5b5061037b600e5481565b3480156106fd57600080fd5b5061030961070c3660046121eb565b611162565b34801561071d57600080fd5b5061030961072c3660046121eb565b6111fe565b34801561073d57600080fd5b5061037b60115481565b34801561075357600080fd5b50610309610762366004612284565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561078c57600080fd5b506103a961079b366004612284565b61120b565b3480156107ac57600080fd5b506103a96107bb366004612284565b6112c7565b3480156107cc57600080fd5b506103a96107db3660046123aa565b611315565b3480156107ec57600080fd5b506103a96107fb3660046123c3565b6113dd565b34801561080c57600080fd5b5061030961081b366004612284565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561084557600080fd5b5061037b60165481565b34801561085b57600080fd5b5061037b61086a3660046123de565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108a157600080fd5b506103a96108b0366004612284565b611454565b3480156108c157600080fd5b5061037b60105481565b3480156108d757600080fd5b506103a96108e6366004612284565b61149f565b3480156108f757600080fd5b506103a96109063660046123aa565b611589565b34801561091757600080fd5b5061037b60185481565b60606009805461093090612417565b80601f016020809104026020016040519081016040528092919081815260200182805461095c90612417565b80156109a95780601f1061097e576101008083540402835291602001916109a9565b820191906000526020600020905b81548152906001019060200180831161098c57829003601f168201915b5050505050905090565b60006109c0338484611651565b5060015b92915050565b6000546001600160a01b031633146109fd5760405162461bcd60e51b81526004016109f490612451565b60405180910390fd5b600f81610a0a848661249c565b610a14919061249c565b1115610a625760405162461bcd60e51b815260206004820152601b60248201527f796f752063616e277420736574206d6f7265207468616e20313525000000000060448201526064016109f4565b6010839055601182905560128190557f6b7559a32953872c1ea69c07b9c25b70cc8ac27d03a34d0104f1922feeb21d6e81610a9d848661249c565b610aa7919061249c565b60405190815260200160405180910390a1505050565b6000610aca848484611778565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610b505760405162461bcd60e51b815260206004820152602960248201527f4942455032303a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016109f4565b506001949350505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916109c0918590610b9290869061249c565b611651565b6000546001600160a01b03163314610bc15760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610c0f5760405162461bcd60e51b81526004016109f490612451565b600f81610c1c848661249c565b610c26919061249c565b1115610c745760405162461bcd60e51b815260206004820152601b60248201527f796f752063616e277420736574206d6f7265207468616e20313525000000000060448201526064016109f4565b600d839055600e829055600f8190557f0360ea714a628fae03fc01846e588b4b053707ea9418c53df5cb0c44cfa23f0681610a9d848661249c565b336101f58410610d175760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084016109f4565b838214610d775760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b60648201526084016109f4565b6000805b85811015610dbb57848482818110610d9557610d956124af565b9050602002013582610da7919061249c565b915080610db3816124c5565b915050610d7b565b5080610ddc836001600160a01b031660009081526001602052604090205490565b1015610e2a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c6574000000000060448201526064016109f4565b60005b85811015610e9057610e7e83888884818110610e4b57610e4b6124af565b9050602002016020810190610e609190612284565b878785818110610e7257610e726124af565b90506020020135611778565b80610e88816124c5565b915050610e2d565b50505050505050565b6000546001600160a01b03163314610ec35760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610f115760405162461bcd60e51b81526004016109f490612451565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f855760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314610fd05760405162461bcd60e51b81526004016109f490612451565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b769910160405180910390a15050565b6000546001600160a01b0316331461105d5760405162461bcd60e51b81526004016109f490612451565b60075461106b90600a6125c2565b61107590826125ce565b60168190556040519081527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00906020015b60405180910390a150565b6060600a805461093090612417565b6000546001600160a01b031633146110ea5760405162461bcd60e51b81526004016109f490612451565b6001600160a01b0381166111405760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e277420736574207a65726f206164647265737300000000000060448201526064016109f4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156111e55760405162461bcd60e51b815260206004820152602660248201527f4942455032303a2064656372656173656420616c6c6f77616e63652062656c6f60448201526577207a65726f60d01b60648201526084016109f4565b6111f43385610b9286856125e5565b5060019392505050565b60006109c0338484611778565b6000546001600160a01b031633146112355760405162461bcd60e51b81526004016109f490612451565b6015546001600160a01b03908116908216036112a65760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e277420706c61792077697468204c69717569646974792070616044820152696972206164647265737360b01b60648201526084016109f4565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146112f15760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b0316331461133f5760405162461bcd60e51b81526004016109f490612451565b60075461134d90600a6125c2565b61135a90620f42406125ce565b60075461136890600a6125c2565b61137290836125ce565b10156113905760405162461bcd60e51b81526004016109f4906125f8565b60075461139e90600a6125c2565b6113a890826125ce565b60178190556040519081527f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa906020016110a6565b6000546001600160a01b031633146114075760405162461bcd60e51b81526004016109f490612451565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110a690831515815260200190565b6000546001600160a01b0316331461147e5760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b031633146114c95760405162461bcd60e51b81526004016109f490612451565b6001600160a01b03811661152e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115b35760405162461bcd60e51b81526004016109f490612451565b6007546115c190600a6125c2565b6115ce90620f42406125ce565b6007546115dc90600a6125c2565b6115e690836125ce565b10156116045760405162461bcd60e51b81526004016109f4906125f8565b60075461161290600a6125c2565b61161c90826125ce565b60188190556040519081527f2f0230c168217a20bed23aafa989b365ae4f826eaaa01b933669653715fc9067906020016110a6565b6001600160a01b0383166116b55760405162461bcd60e51b815260206004820152602560248201527f4942455032303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109f4565b6001600160a01b0382166117175760405162461bcd60e51b815260206004820152602360248201527f4942455032303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109f4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117dd5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109f4565b6001600160a01b03821661183f5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109f4565b6001600160a01b0383166000908152600160205260409020548111156118a75760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206861766520656e6f7567682062616c616e636500000060448201526064016109f4565b6001600160a01b03821660009081526004602052604090205460ff161580156118de57506000546001600160a01b03848116911614155b1561195e5760175481611906846001600160a01b031660009081526001602052604090205490565b611910919061249c565b111561195e5760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420486f6c64696e67206c696d697420657863656564656400000060448201526064016109f4565b6000546001600160a01b038481169116146119ff576018548111158061199c57506001600160a01b03831660009081526005602052604090205460ff165b806119bf57506001600160a01b03821660009081526005602052604090205460ff165b6119ff5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109f4565b6001600160a01b03831660009081526003602052604081205460ff1680611a3e57506001600160a01b03831660009081526003602052604090205460ff165b15611a4b57506000611ade565b6001600160a01b03831660009081526006602052604090205460ff1615611aa757601354601254601154601054611a82919061249c565b611a8c919061249c565b611a9690846125ce565b611aa0919061264c565b9050611ade565b601354600f54600e54600d54611abd919061249c565b611ac7919061249c565b611ad190846125ce565b611adb919061264c565b90505b306000908152600160205260409020546016546015549082101590600160a01b900460ff16158015611b1d57506015546001600160a01b038681169116145b8015611b325750601554600160a81b900460ff165b8015611b5957506016546015546001600160a01b0316600090815260016020526040902054115b15611c3e578015611c3e576016549150600080601254601154601054611b7f919061249c565b611b89919061249c565b1115611bd357601254601054601154611ba2919061249c565b611bac919061249c565b601254601154611bbc919061249c565b611bc690856125ce565b611bd0919061264c565b90505b60105460009015611bef57611be882856125e5565b9050611c0b565b6000601254601154611c01919061249c565b1115611c0b578391505b6000601254601154611c1d919061249c565b1115611c2c57611c2c82611d6f565b8015611c3b57611c3b81611e35565b50505b6000611c4a84866125e5565b30600090815260016020526040812080549293508692909190611c6e90849061249c565b90915550506001600160a01b038716600090815260016020526040902054611c979086906125e5565b6001600160a01b038089166000908152600160205260408082209390935590881681529081208054839290611ccd90849061249c565b90915550508315611d195760405184815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d5e91815260200190565b60405180910390a350505050505050565b6015805460ff60a01b1916600160a01b179055601254601154600091611d949161249c565b905047611da083611f1b565b6000611dac82476125e5565b905060008360115483611dbf91906125ce565b611dc9919061264c565b905060008460125484611ddc91906125ce565b611de6919061264c565b90508115611e0457600b54611e04906001600160a01b031683612075565b8015611e2057600c54611e20906001600160a01b031682612075565b50506015805460ff60a01b1916905550505050565b6015805460ff60a01b1916600160a01b1790556000611e5560028361264c565b90506000611e6382846125e5565b905047611e6f83611f1b565b6000611e7b82476125e5565b9050611e8783826120b0565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611f0757600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611e20573d6000803e3d6000fd5b50506015805460ff60a01b19169055505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f5057611f506124af565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd919061266e565b81600181518110611fe057611fe06124af565b6001600160a01b0392831660209182029290920101526014546120069130911684611651565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac9479061203f90859060009086903090429060040161268b565b600060405180830381600087803b15801561205957600080fd5b505af115801561206d573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156120ab573d6000803e3d6000fd5b505050565b6014546120c89030906001600160a01b031684611651565b6014546001600160a01b031663f305d7198230856000806120f16000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612159573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217e91906126fc565b5050505050565b600060208083528351808285015260005b818110156121b257858101830151858201604001528201612196565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146121e857600080fd5b50565b600080604083850312156121fe57600080fd5b8235612209816121d3565b946020939093013593505050565b60008060006060848603121561222c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561225857600080fd5b8335612263816121d3565b92506020840135612273816121d3565b929592945050506040919091013590565b60006020828403121561229657600080fd5b81356122a1816121d3565b9392505050565b60008083601f8401126122ba57600080fd5b50813567ffffffffffffffff8111156122d257600080fd5b6020830191508360208260051b85010111156122ed57600080fd5b9250929050565b6000806000806040858703121561230a57600080fd5b843567ffffffffffffffff8082111561232257600080fd5b61232e888389016122a8565b9096509450602087013591508082111561234757600080fd5b50612354878288016122a8565b95989497509550505050565b8035801515811461237057600080fd5b919050565b6000806040838503121561238857600080fd5b8235612393816121d3565b91506123a160208401612360565b90509250929050565b6000602082840312156123bc57600080fd5b5035919050565b6000602082840312156123d557600080fd5b6122a182612360565b600080604083850312156123f157600080fd5b82356123fc816121d3565b9150602083013561240c816121d3565b809150509250929050565b600181811c9082168061242b57607f821691505b60208210810361244b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c4576109c4612486565b634e487b7160e01b600052603260045260246000fd5b6000600182016124d7576124d7612486565b5060010190565b600181815b808511156125195781600019048211156124ff576124ff612486565b8085161561250c57918102915b93841c93908002906124e3565b509250929050565b600082612530575060016109c4565b8161253d575060006109c4565b8160018114612553576002811461255d57612579565b60019150506109c4565b60ff84111561256e5761256e612486565b50506001821b6109c4565b5060208310610133831016604e8410600b841016171561259c575081810a6109c4565b6125a683836124de565b80600019048211156125ba576125ba612486565b029392505050565b60006122a18383612521565b80820281158282048414176109c4576109c4612486565b818103818111156109c4576109c4612486565b60208082526034908201527f416d6f756e742073686f756c642062652067726561746572206f7220657175616040820152736c20746f2031204d696c6c696e20546f6b656e7360601b606082015260800190565b60008261266957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561268057600080fd5b81516122a1816121d3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126db5784516001600160a01b0316835293830193918301916001016126b6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561271157600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220361ab39e99dfa6b3c6d9ebacab3b9b3480df0877c1f80d8d5f5a825bbe4ac4d364736f6c63430008120033

Deployed Bytecode Sourcemap

13344:19129:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17173:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17695:210;;;;;;;;;;-1:-1:-1;17695:210:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;17695:210:0;1023:187:1;13952:96:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1379:32:1;;;1361:51;;1349:2;1334:18;13952:96:0;1215:203:1;14854:66:0;;;;;;;;;;;;;;;;;;;1569:25:1;;;1557:2;1542:18;14854:66:0;1423:177:1;22632:578:0;;;;;;;;;;-1:-1:-1;22632:578:0;;;;;:::i;:::-;;:::i;:::-;;14604:41;;;;;;;;;;-1:-1:-1;14604:41:0;;;;-1:-1:-1;;;;;14604:41:0;;;17458:102;;;;;;;;;;-1:-1:-1;17540:12:0;;17458:102;;23892:422;;;;;;;;;;-1:-1:-1;23892:422:0;;;;;:::i;:::-;;:::i;17363:87::-;;;;;;;;;;-1:-1:-1;17433:9:0;;17363:87;;13775:29;;;;;;;;;;;;;;;;14285:38;;;;;;;;;;;;;;;;18510:297;;;;;;;;;;-1:-1:-1;18510:297:0;;;;;:::i;:::-;;:::i;21386:168::-;;;;;;;;;;-1:-1:-1;21386:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;21514:32:0;21485:4;21514:32;;;:23;:32;;;;;;;;;21386:168;14055:108;;;;;;;;;;-1:-1:-1;14055:108:0;;;;-1:-1:-1;;;;;14055:108:0;;;14170:106;;;;;;;;;;-1:-1:-1;14170:106:0;;;;-1:-1:-1;;;;;14170:106:0;;;13811:55;;;;;;;;;;;;;;;;19268:113;;;;;;;;;;-1:-1:-1;19268:113:0;;;;;:::i;:::-;;:::i;14375:36::-;;;;;;;;;;;;;;;;14652:28;;;;;;;;;;-1:-1:-1;14652:28:0;;;;-1:-1:-1;;;;;14652:28:0;;;14726:40;;;;;;;;;;-1:-1:-1;14726:40:0;;;;-1:-1:-1;;;14726:40:0;;;;;;22054:570;;;;;;;;;;-1:-1:-1;22054:570:0;;;;;:::i;:::-;;:::i;31703:767::-;;;;;;;;;;-1:-1:-1;31703:767:0;;;;;:::i;:::-;;:::i;19836:169::-;;;;;;;;;;-1:-1:-1;19836:169:0;;;;;:::i;:::-;;:::i;17568:119::-;;;;;;;;;;-1:-1:-1;17568:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17661:18:0;17634:7;17661:18;;;:9;:18;;;;;;;17568:119;3703:148;;;;;;;;;;;;;:::i;20898:123::-;;;;;;;;;;-1:-1:-1;20898:123:0;;;;;:::i;:::-;;:::i;21562:231::-;;;;;;;;;;-1:-1:-1;21562:231:0;;;;;:::i;:::-;;:::i;14512:37::-;;;;;;;;;;;;;;;;3480:87;;;;;;;;;;-1:-1:-1;3526:7:0;3553:6;-1:-1:-1;;;;;3553:6:0;3480:87;;23218:261;;;;;;;;;;-1:-1:-1;23218:261:0;;;;;:::i;:::-;;:::i;17266:89::-;;;;;;;;;;;;;:::i;21801:245::-;;;;;;;;;;-1:-1:-1;21801:245:0;;;;;:::i;:::-;;:::i;14330:38::-;;;;;;;;;;;;;;;;18815:445;;;;;;;;;;-1:-1:-1;18815:445:0;;;;;:::i;:::-;;:::i;23668:216::-;;;;;;;;;;-1:-1:-1;23668:216:0;;;;;:::i;:::-;;:::i;14466:39::-;;;;;;;;;;;;;;;;19635:193;;;;;;;;;;-1:-1:-1;19635:193:0;;;;;:::i;:::-;-1:-1:-1;;;;;19772:48:0;19743:4;19772:48;;;:33;:48;;;;;;;;;19635:193;20013:295;;;;;;;;;;-1:-1:-1;20013:295:0;;;;;:::i;:::-;;:::i;20766:124::-;;;;;;;;;;-1:-1:-1;20766:124:0;;;;;:::i;:::-;;:::i;20316:442::-;;;;;;;;;;-1:-1:-1;20316:442:0;;;;;:::i;:::-;;:::i;23487:173::-;;;;;;;;;;-1:-1:-1;23487:173:0;;;;;:::i;:::-;;:::i;19509:118::-;;;;;;;;;;-1:-1:-1;19509:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;19596:23:0;19572:4;19596:23;;;:18;:23;;;;;;;;;19509:118;14775:72;;;;;;;;;;;;;;;;18301:201;;;;;;;;;;-1:-1:-1;18301:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;18467:18:0;;;18435:7;18467:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18301:201;19389:112;;;;;;;;;;-1:-1:-1;19389:112:0;;;;;:::i;:::-;;:::i;14420:39::-;;;;;;;;;;;;;;;;3859:281;;;;;;;;;;-1:-1:-1;3859:281:0;;;;;:::i;:::-;;:::i;21029:349::-;;;;;;;;;;-1:-1:-1;21029:349:0;;;;;:::i;:::-;;:::i;14927:55::-;;;;;;;;;;;;;;;;17173:85;17212:13;17245:5;17238:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17173:85;:::o;17695:210::-;17814:4;17836:39;3016:10;17859:7;17868:6;17836:8;:39::i;:::-;-1:-1:-1;17893:4:0;17695:210;;;;;:::o;22632:578::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;;;;;;;;;22874:2:::1;22857:13:::0;22821:33:::1;22839:15:::0;22821;:33:::1;:::i;:::-;:49;;;;:::i;:::-;:55;;22799:132;;;::::0;-1:-1:-1;;;22799:132:0;;6965:2:1;22799:132:0::1;::::0;::::1;6947:21:1::0;7004:2;6984:18;;;6977:30;7043:29;7023:18;;;7016:57;7090:18;;22799:132:0::1;6763:351:1::0;22799:132:0::1;22942:20;:38:::0;;;22991:20:::1;:38:::0;;;23040:18:::1;:34:::0;;;23092:110:::1;23061:13:::0;23127:43:::1;23014:15:::0;22965;23127:43:::1;:::i;:::-;:64;;;;:::i;:::-;23092:110;::::0;1569:25:1;;;1557:2;1542:18;23092:110:0::1;;;;;;;22632:578:::0;;;:::o;23892:422::-;24032:4;24049:36;24059:6;24067:9;24078:6;24049:9;:36::i;:::-;-1:-1:-1;;;;;24123:19:0;;24096:24;24123:19;;;:11;:19;;;;;;;;3016:10;24123:33;;;;;;;;24189:26;;;;24167:117;;;;-1:-1:-1;;;24167:117:0;;7321:2:1;24167:117:0;;;7303:21:1;7360:2;7340:18;;;7333:30;7399:34;7379:18;;;7372:62;-1:-1:-1;;;7450:18:1;;;7443:39;7499:19;;24167:117:0;7119:405:1;24167:117:0;-1:-1:-1;24302:4:0;;23892:422;-1:-1:-1;;;;23892:422:0:o;18510:297::-;3016:10;18625:4;18719:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18719:34:0;;;;;;;;;;18625:4;;18647:130;;18697:7;;18719:47;;18756:10;;18719:47;:::i;:::-;18647:8;:130::i;19268:113::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19339:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;19339:34:0::1;19369:4;19339:34;::::0;;19268:113::o;22054:570::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;22295:2:::1;22278:13:::0;22242:33:::1;22260:15:::0;22242;:33:::1;:::i;:::-;:49;;;;:::i;:::-;:55;;22220:132;;;::::0;-1:-1:-1;;;22220:132:0;;6965:2:1;22220:132:0::1;::::0;::::1;6947:21:1::0;7004:2;6984:18;;;6977:30;7043:29;7023:18;;;7016:57;7090:18;;22220:132:0::1;6763:351:1::0;22220:132:0::1;22363:19;:37:::0;;;22411:19:::1;:37:::0;;;22459:17:::1;:33:::0;;;22510:106:::1;22479:13:::0;22544:41:::1;22433:15:::0;22385;22544:41:::1;:::i;31703:767::-:0;31850:10;31912:3;31893:22;;31871:117;;;;-1:-1:-1;;;31871:117:0;;7731:2:1;31871:117:0;;;7713:21:1;7770:2;7750:18;;;7743:30;7809:34;7789:18;;;7782:62;-1:-1:-1;;;7860:18:1;;;7853:43;7913:19;;31871:117:0;7529:409:1;31871:117:0;32021:33;;;31999:123;;;;-1:-1:-1;;;31999:123:0;;8145:2:1;31999:123:0;;;8127:21:1;8184:2;8164:18;;;8157:30;8223:34;8203:18;;;8196:62;-1:-1:-1;;;8274:18:1;;;8267:38;8322:19;;31999:123:0;7943:404:1;31999:123:0;32135:12;32169:9;32164:97;32184:20;;;32164:97;;;32240:6;;32247:1;32240:9;;;;;;;:::i;:::-;;;;;;;32233:4;:16;;;;:::i;:::-;32226:23;-1:-1:-1;32206:3:0;;;;:::i;:::-;;;;32164:97;;;;32300:4;32281:15;32291:4;-1:-1:-1;;;;;17661:18:0;17634:7;17661:18;;;:9;:18;;;;;;;17568:119;32281:15;:23;;32273:63;;;;-1:-1:-1;;;32273:63:0;;8826:2:1;32273:63:0;;;8808:21:1;8865:2;8845:18;;;8838:30;8904:29;8884:18;;;8877:57;8951:18;;32273:63:0;8624:351:1;32273:63:0;32354:9;32349:114;32369:20;;;32349:114;;;32411:40;32421:4;32427:9;;32437:1;32427:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32441:6;;32448:1;32441:9;;;;;;;:::i;:::-;;;;;;;32411;:40::i;:::-;32391:3;;;;:::i;:::-;;;;32349:114;;;;31824:646;;31703:767;;;;:::o;19836:169::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19948:42:0::1;;::::0;;;:33:::1;:42;::::0;;;;:49;;-1:-1:-1;;19948:49:0::1;19993:4;19948:49;::::0;;19836:169::o;3703:148::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;3810:1:::1;3794:6:::0;;3773:40:::1;::::0;-1:-1:-1;;;;;3794:6:0;;::::1;::::0;3773:40:::1;::::0;3810:1;;3773:40:::1;3841:1;3824:19:::0;;-1:-1:-1;;;;;;3824:19:0::1;::::0;;3703:148::o;20898:123::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20974:31:0::1;21008:5;20974:31:::0;;;:22:::1;:31;::::0;;;;:39;;-1:-1:-1;;20974:39:0::1;::::0;;20898:123::o;21562:231::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21676:34:0;::::1;;::::0;;;:23:::1;:34;::::0;;;;;;;;:43;;-1:-1:-1;;21676:43:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21735:50;;9148:51:1;;;9215:18;;;9208:50;21735::0::1;::::0;9121:18:1;21735:50:0::1;;;;;;;21562:231:::0;;:::o;23218:261::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;23389:9:::1;::::0;23385:13:::1;::::0;:2:::1;:13;:::i;:::-;23368:30;::::0;:14;:30:::1;:::i;:::-;23336:29;:62:::0;;;23414:57:::1;::::0;1569:25:1;;;23414:57:0::1;::::0;1557:2:1;1542:18;23414:57:0::1;;;;;;;;23218:261:::0;:::o;17266:89::-;17307:13;17340:7;17333:14;;;;;:::i;21801:245::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21921:32:0;::::1;21913:71;;;::::0;-1:-1:-1;;;21913:71:0;;11018:2:1;21913:71:0::1;::::0;::::1;11000:21:1::0;11057:2;11037:18;;;11030:30;11096:28;11076:18;;;11069:56;11142:18;;21913:71:0::1;10816:350:1::0;21913:71:0::1;21995:22;:43:::0;;-1:-1:-1;;;;;;21995:43:0::1;-1:-1:-1::0;;;;;21995:43:0;;;::::1;::::0;;;::::1;::::0;;21801:245::o;18815:445::-;3016:10;18935:4;18984:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18984:34:0;;;;;;;;;;19051:35;;;;19029:123;;;;-1:-1:-1;;;19029:123:0;;11373:2:1;19029:123:0;;;11355:21:1;11412:2;11392:18;;;11385:30;11451:34;11431:18;;;11424:62;-1:-1:-1;;;11502:18:1;;;11495:36;11548:19;;19029:123:0;11171:402:1;19029:123:0;19163:67;3016:10;19186:7;19195:34;19214:15;19195:16;:34;:::i;19163:67::-;-1:-1:-1;19248:4:0;;18815:445;-1:-1:-1;;;18815:445:0:o;23668:216::-;23790:4;23812:42;3016:10;23836:9;23847:6;23812:9;:42::i;20013:295::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;20156:13:::1;::::0;-1:-1:-1;;;;;20156:13:0;;::::1;20145:24:::0;;::::1;::::0;20123:116:::1;;;::::0;-1:-1:-1;;;20123:116:0;;11913:2:1;20123:116:0::1;::::0;::::1;11895:21:1::0;11952:2;11932:18;;;11925:30;11991:34;11971:18;;;11964:62;-1:-1:-1;;;12042:18:1;;;12035:40;12092:19;;20123:116:0::1;11711:406:1::0;20123:116:0::1;-1:-1:-1::0;;;;;20250:42:0::1;20295:5;20250:42:::0;;;:33:::1;:42;::::0;;;;:50;;-1:-1:-1;;20250:50:0::1;::::0;;20013:295::o;20766:124::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20844:31:0::1;;::::0;;;:22:::1;:31;::::0;;;;:38;;-1:-1:-1;;20844:38:0::1;20878:4;20844:38;::::0;;20766:124::o;20316:442::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;20518:9:::1;::::0;20514:13:::1;::::0;:2:::1;:13;:::i;:::-;20502:25;::::0;:9:::1;:25;:::i;:::-;20489:9;::::0;20485:13:::1;::::0;:2:::1;:13;:::i;:::-;20460:38;::::0;:22;:38:::1;:::i;:::-;:67;;20438:169;;;;-1:-1:-1::0;;;20438:169:0::1;;;;;;;:::i;:::-;20672:9;::::0;20668:13:::1;::::0;:2:::1;:13;:::i;:::-;20643:38;::::0;:22;:38:::1;:::i;:::-;20618:22;:63:::0;;;20697:53:::1;::::0;1569:25:1;;;20697:53:0::1;::::0;1557:2:1;1542:18;20697:53:0::1;1423:177:1::0;23487:173:0;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;23566:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23566:32:0::1;-1:-1:-1::0;;;;23566:32:0;;::::1;;::::0;;23614:38:::1;::::0;::::1;::::0;::::1;::::0;23590:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;19389:112:0;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19458:27:0::1;19488:5;19458:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;19458:35:0::1;::::0;;19389:112::o;3859:281::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3962:22:0;::::1;3940:110;;;::::0;-1:-1:-1;;;3940:110:0;;12745:2:1;3940:110:0::1;::::0;::::1;12727:21:1::0;12784:2;12764:18;;;12757:30;12823:34;12803:18;;;12796:62;-1:-1:-1;;;12874:18:1;;;12867:36;12920:19;;3940:110:0::1;12543:402:1::0;3940:110:0::1;4087:6;::::0;;4066:38:::1;::::0;-1:-1:-1;;;;;4066:38:0;;::::1;::::0;4087:6;::::1;::::0;4066:38:::1;::::0;::::1;4115:6;:17:::0;;-1:-1:-1;;;;;;4115:17:0::1;-1:-1:-1::0;;;;;4115:17:0;;;::::1;::::0;;;::::1;::::0;;3859:281::o;21029:349::-;3526:7;3553:6;-1:-1:-1;;;;;3553:6:0;3016:10;3615:23;3607:68;;;;-1:-1:-1;;;3607:68:0;;;;;;;:::i;:::-;21175:9:::1;::::0;21171:13:::1;::::0;:2:::1;:13;:::i;:::-;21159:25;::::0;:9:::1;:25;:::i;:::-;21146:9;::::0;21142:13:::1;::::0;:2:::1;:13;:::i;:::-;21128:27;::::0;:11;:27:::1;:::i;:::-;:56;;21106:158;;;;-1:-1:-1::0;;;21106:158:0::1;;;;;;;:::i;:::-;21307:9;::::0;21303:13:::1;::::0;:2:::1;:13;:::i;:::-;21289:27;::::0;:11;:27:::1;:::i;:::-;21275:11;:41:::0;;;21332:38:::1;::::0;1569:25:1;;;21332:38:0::1;::::0;1557:2:1;1542:18;21332:38:0::1;1423:177:1::0;17913:380:0;-1:-1:-1;;;;;18049:19:0;;18041:69;;;;-1:-1:-1;;;18041:69:0;;13152:2:1;18041:69:0;;;13134:21:1;13191:2;13171:18;;;13164:30;13230:34;13210:18;;;13203:62;-1:-1:-1;;;13281:18:1;;;13274:35;13326:19;;18041:69:0;12950:401:1;18041:69:0;-1:-1:-1;;;;;18129:21:0;;18121:69;;;;-1:-1:-1;;;18121:69:0;;13558:2:1;18121:69:0;;;13540:21:1;13597:2;13577:18;;;13570:30;13636:34;13616:18;;;13609:62;-1:-1:-1;;;13687:18:1;;;13680:33;13730:19;;18121:69:0;13356:399:1;18121:69:0;-1:-1:-1;;;;;18201:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18253:32;;1569:25:1;;;18253:32:0;;1542:18:1;18253:32:0;;;;;;;17913:380;;;:::o;24417:4075::-;-1:-1:-1;;;;;24557:20:0;;24549:71;;;;-1:-1:-1;;;24549:71:0;;13962:2:1;24549:71:0;;;13944:21:1;14001:2;13981:18;;;13974:30;14040:34;14020:18;;;14013:62;-1:-1:-1;;;14091:18:1;;;14084:36;14137:19;;24549:71:0;13760:402:1;24549:71:0;-1:-1:-1;;;;;24653:23:0;;24631:109;;;;-1:-1:-1;;;24631:109:0;;14369:2:1;24631:109:0;;;14351:21:1;14408:2;14388:18;;;14381:30;14447:34;14427:18;;;14420:62;-1:-1:-1;;;14498:18:1;;;14491:34;14542:19;;24631:109:0;14167:400:1;24631:109:0;-1:-1:-1;;;;;24759:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;24759:27:0;24751:69;;;;-1:-1:-1;;;24751:69:0;;14774:2:1;24751:69:0;;;14756:21:1;14813:2;14793:18;;;14786:30;14852:31;14832:18;;;14825:59;14901:18;;24751:69:0;14572:353:1;24751:69:0;-1:-1:-1;;;;;24852:44:0;;;;;;:33;:44;;;;;;;;24851:45;:66;;;;-1:-1:-1;3526:7:0;3553:6;-1:-1:-1;;;;;24900:17:0;;;3553:6;;24900:17;;24851:66;24833:269;;;25003:22;;24993:6;24970:20;24980:9;-1:-1:-1;;;;;17661:18:0;17634:7;17661:18;;;:9;:18;;;;;;;17568:119;24970:20;:29;;;;:::i;:::-;:55;;24944:146;;;;-1:-1:-1;;;24944:146:0;;15132:2:1;24944:146:0;;;15114:21:1;15171:2;15151:18;;;15144:30;15210:31;15190:18;;;15183:59;15259:18;;24944:146:0;14930:353:1;24944:146:0;3526:7;3553:6;-1:-1:-1;;;;;25118:17:0;;;3553:6;;25118:17;25114:263;;25188:11;;25178:6;:21;;:76;;;-1:-1:-1;;;;;;25224:30:0;;;;;;:22;:30;;;;;;;;25178:76;:134;;;-1:-1:-1;;;;;;25279:33:0;;;;;;:22;:33;;;;;;;;25178:134;25152:213;;;;-1:-1:-1;;;25152:213:0;;15490:2:1;25152:213:0;;;15472:21:1;15529:2;15509:18;;;15502:30;-1:-1:-1;;;15548:18:1;;;15541:47;15605:18;;25152:213:0;15288:341:1;25152:213:0;-1:-1:-1;;;;;25426:26:0;;25389:16;25426:26;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;25456:29:0;;;;;;:18;:29;;;;;;;;25426:59;25422:713;;;-1:-1:-1;25513:1:0;25422:713;;;-1:-1:-1;;;;;25551:34:0;;;;;;:23;:34;;;;;;;;25547:577;;;25823:14;;25778:18;;25726:20;;25674;;:72;;;;:::i;:::-;:122;;;;:::i;:::-;25639:158;;:6;:158;:::i;:::-;25638:200;;;;:::i;:::-;25606:232;;25547:577;;;26093:14;;26049:17;;25998:19;;25947;;:70;;;;:::i;:::-;:119;;;;:::i;:::-;25912:155;;:6;:155;:::i;:::-;25911:197;;;;:::i;:::-;25879:229;;25547:577;26196:4;26147:28;17661:18;;;:9;:18;;;;;;26279:29;;26338:16;;26242:66;;;;;-1:-1:-1;;;26338:16:0;;;;26337:17;:60;;;;-1:-1:-1;26384:13:0;;-1:-1:-1;;;;;26371:26:0;;;26384:13;;26371:26;26337:60;:98;;;;-1:-1:-1;26414:21:0;;-1:-1:-1;;;26414:21:0;;;;26337:98;:171;;;;-1:-1:-1;26479:29:0;;26462:13;;-1:-1:-1;;;;;26462:13:0;17634:7;17661:18;;;:9;:18;;;;;;26452:56;26337:171;26319:1794;;;26539:19;26535:1567;;;26602:29;;26579:52;;26652:31;26866:1;26824:18;;26776:20;;26728;;:68;;;;:::i;:::-;:114;;;;:::i;:::-;:139;26702:528;;;27191:18;;27139:20;;27087;;:72;;;;:::i;:::-;:122;;;;:::i;:::-;27038:18;;27015:20;;:41;;;;:::i;:::-;26962:95;;:20;:95;:::i;:::-;26961:249;;;;:::i;:::-;26910:300;;26702:528;27295:20;;27250:22;;27295:24;27291:384;;27386:73;27435:23;27386:20;:73;:::i;:::-;27344:115;;27291:384;;;27556:1;27535:18;;27512:20;;:41;;;;:::i;:::-;:45;27508:148;;;27612:20;27586:46;;27508:148;27804:1;27783:18;;27760:20;;:41;;;;:::i;:::-;:45;27756:129;;;27830:35;27841:23;27830:10;:35::i;:::-;27907:18;;27903:184;;28037:30;28052:14;28037;:30::i;:::-;26560:1542;;26535:1567;28125:22;28150:19;28160:8;28150:6;:19;:::i;:::-;28198:4;28180:24;;;;:9;:24;;;;;:36;;28125:44;;-1:-1:-1;28208:8:0;;28180:24;;;:36;;28208:8;;28180:36;:::i;:::-;;;;-1:-1:-1;;;;;;;28247:17:0;;;;;;:9;:17;;;;;;:26;;28267:6;;28247:26;:::i;:::-;-1:-1:-1;;;;;28227:17:0;;;;;;;:9;:17;;;;;;:46;;;;28284:20;;;;;;;;:38;;28308:14;;28227:17;28284:38;;28308:14;;28284:38;:::i;:::-;;;;-1:-1:-1;;28339:12:0;;28335:91;;28373:41;;1569:25:1;;;28398:4:0;;-1:-1:-1;;;;;28373:41:0;;;;;1557:2:1;1542:18;28373:41:0;;;;;;;28335:91;28458:9;-1:-1:-1;;;;;28441:43:0;28450:6;-1:-1:-1;;;;;28441:43:0;;28469:14;28441:43;;;;1569:25:1;;1557:2;1542:18;;1423:177;28441:43:0;;;;;;;;24538:3954;;;;24417:4075;;;:::o;28500:801::-;15603:16;:23;;-1:-1:-1;;;;15603:23:0;-1:-1:-1;;;15603:23:0;;;28626:18:::1;::::0;28603:20:::1;::::0;15603:23;;28603:41:::1;::::0;::::1;:::i;:::-;28582:62:::0;-1:-1:-1;28680:21:0::1;28712:39;28729:21:::0;28712:16:::1;:39::i;:::-;28762:26;28791:40;28816:14:::0;28791:21:::1;:40;:::i;:::-;28762:69;;28842:24;28931:10;28905:20;;28870:18;:56;;;;:::i;:::-;28869:73;;;;:::i;:::-;28842:100;;28953:22;29037:10;29001:18;;28979;:41;;;;:::i;:::-;28978:69;;;;:::i;:::-;28953:94:::0;-1:-1:-1;29064:20:0;;29060:115:::1;;29122:22;::::0;29101:62:::1;::::0;-1:-1:-1;;;;;29122:22:0::1;29146:16:::0;29101:20:::1;:62::i;:::-;29189:18:::0;;29185:109:::1;;29245:20;::::0;29224:58:::1;::::0;-1:-1:-1;;;;;29245:20:0::1;29267:14:::0;29224:20:::1;:58::i;:::-;-1:-1:-1::0;;15649:16:0;:24;;-1:-1:-1;;;;15649:24:0;;;-1:-1:-1;;;;28500:801:0:o;29457:1094::-;15603:16;:23;;-1:-1:-1;;;;15603:23:0;-1:-1:-1;;;15603:23:0;;;;29608:24:::1;29631:1;29608:20:::0;:24:::1;:::i;:::-;29593:39:::0;-1:-1:-1;29643:17:0::1;29663:27;29593:39:::0;29663:20;:27:::1;:::i;:::-;29643:47:::0;-1:-1:-1;29993:21:0::1;30059:22;30076:4:::0;30059:16:::1;:22::i;:::-;30212:18;30233:40;30258:14:::0;30233:21:::1;:40;:::i;:::-;30212:61;;30323:35;30336:9;30347:10;30323:12;:35::i;:::-;30376:43;::::0;;16058:25:1;;;16114:2;16099:18;;16092:34;;;16142:18;;;16135:34;;;30376:43:0::1;::::0;16046:2:1;16031:18;30376:43:0::1;;;;;;;30436:21;:25:::0;30432:112:::1;;30478:22;::::0;:54:::1;::::0;-1:-1:-1;;;;;30478:22:0;;::::1;::::0;30510:21:::1;30478:54:::0;::::1;;;::::0;:22:::1;:54:::0;:22;:54;30510:21;30478:22;:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;30432:112;-1:-1:-1::0;;15649:16:0;:24;;-1:-1:-1;;;;15649:24:0;;;-1:-1:-1;;;29457:1094:0:o;30559:589::-;30709:16;;;30723:1;30709:16;;;;;;;;30685:21;;30709:16;;;;;;;;;;-1:-1:-1;30709:16:0;30685:40;;30754:4;30736;30741:1;30736:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30736:23:0;;;:7;;;;;;;;;;:23;;;;30780:15;;:22;;;-1:-1:-1;;;30780:22:0;;;;:15;;;;;:20;;:22;;;;;30736:7;;30780:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30770:4;30775:1;30770:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30770:32:0;;;:7;;;;;;;;;:32;30847:15;;30815:62;;30832:4;;30847:15;30865:11;30815:8;:62::i;:::-;30916:15;;:224;;-1:-1:-1;;;30916:224:0;;-1:-1:-1;;;;;30916:15:0;;;;:66;;:224;;30997:11;;30916:15;;31067:4;;31094;;31114:15;;30916:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30614:534;30559:589;:::o;29309:140::-;29415:26;;-1:-1:-1;;;;;29415:18:0;;;:26;;;;;29434:6;;29415:26;;;;29434:6;29415:18;:26;;;;;;;;;;;;;;;;;;;;;29309:140;;:::o;31156:513::-;31336:15;;31304:62;;31321:4;;-1:-1:-1;;;;;31336:15:0;31354:11;31304:8;:62::i;:::-;31409:15;;-1:-1:-1;;;;;31409:15:0;:31;31448:9;31481:4;31501:11;31409:15;;31613:7;3526;3553:6;-1:-1:-1;;;;;3553:6:0;;3480:87;31613:7;31409:252;;;;;;-1:-1:-1;;;;;;31409:252:0;;;-1:-1:-1;;;;;17912:15:1;;;31409:252:0;;;17894:34:1;17944:18;;;17937:34;;;;17987:18;;;17980:34;;;;18030:18;;;18023:34;18094:15;;;18073:19;;;18066:44;31635:15:0;18126:19:1;;;18119:35;17828:19;;31409:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31156:513;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1605:316::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;-1:-1:-1;;1790:23:1;;;1860:2;1845:18;;1832:32;;-1:-1:-1;1911:2:1;1896:18;;;1883:32;;1605:316;-1:-1:-1;1605:316:1:o;2160:456::-;2237:6;2245;2253;2306:2;2294:9;2285:7;2281:23;2277:32;2274:52;;;2322:1;2319;2312:12;2274:52;2361:9;2348:23;2380:31;2405:5;2380:31;:::i;:::-;2430:5;-1:-1:-1;2487:2:1;2472:18;;2459:32;2500:33;2459:32;2500:33;:::i;:::-;2160:456;;2552:7;;-1:-1:-1;;;2606:2:1;2591:18;;;;2578:32;;2160:456::o;2621:247::-;2680:6;2733:2;2721:9;2712:7;2708:23;2704:32;2701:52;;;2749:1;2746;2739:12;2701:52;2788:9;2775:23;2807:31;2832:5;2807:31;:::i;:::-;2857:5;2621:247;-1:-1:-1;;;2621:247:1:o;3097:367::-;3160:8;3170:6;3224:3;3217:4;3209:6;3205:17;3201:27;3191:55;;3242:1;3239;3232:12;3191:55;-1:-1:-1;3265:20:1;;3308:18;3297:30;;3294:50;;;3340:1;3337;3330:12;3294:50;3377:4;3369:6;3365:17;3353:29;;3437:3;3430:4;3420:6;3417:1;3413:14;3405:6;3401:27;3397:38;3394:47;3391:67;;;3454:1;3451;3444:12;3391:67;3097:367;;;;;:::o;3469:773::-;3591:6;3599;3607;3615;3668:2;3656:9;3647:7;3643:23;3639:32;3636:52;;;3684:1;3681;3674:12;3636:52;3724:9;3711:23;3753:18;3794:2;3786:6;3783:14;3780:34;;;3810:1;3807;3800:12;3780:34;3849:70;3911:7;3902:6;3891:9;3887:22;3849:70;:::i;:::-;3938:8;;-1:-1:-1;3823:96:1;-1:-1:-1;4026:2:1;4011:18;;3998:32;;-1:-1:-1;4042:16:1;;;4039:36;;;4071:1;4068;4061:12;4039:36;;4110:72;4174:7;4163:8;4152:9;4148:24;4110:72;:::i;:::-;3469:773;;;;-1:-1:-1;4201:8:1;-1:-1:-1;;;;3469:773:1:o;4247:160::-;4312:20;;4368:13;;4361:21;4351:32;;4341:60;;4397:1;4394;4387:12;4341:60;4247:160;;;:::o;4412:315::-;4477:6;4485;4538:2;4526:9;4517:7;4513:23;4509:32;4506:52;;;4554:1;4551;4544:12;4506:52;4593:9;4580:23;4612:31;4637:5;4612:31;:::i;:::-;4662:5;-1:-1:-1;4686:35:1;4717:2;4702:18;;4686:35;:::i;:::-;4676:45;;4412:315;;;;;:::o;4732:180::-;4791:6;4844:2;4832:9;4823:7;4819:23;4815:32;4812:52;;;4860:1;4857;4850:12;4812:52;-1:-1:-1;4883:23:1;;4732:180;-1:-1:-1;4732:180:1:o;5177:::-;5233:6;5286:2;5274:9;5265:7;5261:23;5257:32;5254:52;;;5302:1;5299;5292:12;5254:52;5325:26;5341:9;5325:26;:::i;5362:388::-;5430:6;5438;5491:2;5479:9;5470:7;5466:23;5462:32;5459:52;;;5507:1;5504;5497:12;5459:52;5546:9;5533:23;5565:31;5590:5;5565:31;:::i;:::-;5615:5;-1:-1:-1;5672:2:1;5657:18;;5644:32;5685:33;5644:32;5685:33;:::i;:::-;5737:7;5727:17;;;5362:388;;;;;:::o;5755:380::-;5834:1;5830:12;;;;5877;;;5898:61;;5952:4;5944:6;5940:17;5930:27;;5898:61;6005:2;5997:6;5994:14;5974:18;5971:38;5968:161;;6051:10;6046:3;6042:20;6039:1;6032:31;6086:4;6083:1;6076:15;6114:4;6111:1;6104:15;5968:161;;5755:380;;;:::o;6140:356::-;6342:2;6324:21;;;6361:18;;;6354:30;6420:34;6415:2;6400:18;;6393:62;6487:2;6472:18;;6140:356::o;6501:127::-;6562:10;6557:3;6553:20;6550:1;6543:31;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6633:125;6698:9;;;6719:10;;;6716:36;;;6732:18;;:::i;8352:127::-;8413:10;8408:3;8404:20;8401:1;8394:31;8444:4;8441:1;8434:15;8468:4;8465:1;8458:15;8484:135;8523:3;8544:17;;;8541:43;;8564:18;;:::i;:::-;-1:-1:-1;8611:1:1;8600:13;;8484:135::o;9269:422::-;9358:1;9401:5;9358:1;9415:270;9436:7;9426:8;9423:21;9415:270;;;9495:4;9491:1;9487:6;9483:17;9477:4;9474:27;9471:53;;;9504:18;;:::i;:::-;9554:7;9544:8;9540:22;9537:55;;;9574:16;;;;9537:55;9653:22;;;;9613:15;;;;9415:270;;;9419:3;9269:422;;;;;:::o;9696:806::-;9745:5;9775:8;9765:80;;-1:-1:-1;9816:1:1;9830:5;;9765:80;9864:4;9854:76;;-1:-1:-1;9901:1:1;9915:5;;9854:76;9946:4;9964:1;9959:59;;;;10032:1;10027:130;;;;9939:218;;9959:59;9989:1;9980:10;;10003:5;;;10027:130;10064:3;10054:8;10051:17;10048:43;;;10071:18;;:::i;:::-;-1:-1:-1;;10127:1:1;10113:16;;10142:5;;9939:218;;10241:2;10231:8;10228:16;10222:3;10216:4;10213:13;10209:36;10203:2;10193:8;10190:16;10185:2;10179:4;10176:12;10172:35;10169:77;10166:159;;;-1:-1:-1;10278:19:1;;;10310:5;;10166:159;10357:34;10382:8;10376:4;10357:34;:::i;:::-;10427:6;10423:1;10419:6;10415:19;10406:7;10403:32;10400:58;;;10438:18;;:::i;:::-;10476:20;;9696:806;-1:-1:-1;;;9696:806:1:o;10507:131::-;10567:5;10596:36;10623:8;10617:4;10596:36;:::i;10643:168::-;10716:9;;;10747;;10764:15;;;10758:22;;10744:37;10734:71;;10785:18;;:::i;11578:128::-;11645:9;;;11666:11;;;11663:37;;;11680:18;;:::i;12122:416::-;12324:2;12306:21;;;12363:2;12343:18;;;12336:30;12402:34;12397:2;12382:18;;12375:62;-1:-1:-1;;;12468:2:1;12453:18;;12446:50;12528:3;12513:19;;12122:416::o;15634:217::-;15674:1;15700;15690:132;;15744:10;15739:3;15735:20;15732:1;15725:31;15779:4;15776:1;15769:15;15807:4;15804:1;15797:15;15690:132;-1:-1:-1;15836:9:1;;15634:217::o;16312:251::-;16382:6;16435:2;16423:9;16414:7;16410:23;16406:32;16403:52;;;16451:1;16448;16441:12;16403:52;16483:9;16477:16;16502:31;16527:5;16502:31;:::i;16568:980::-;16830:4;16878:3;16867:9;16863:19;16909:6;16898:9;16891:25;16935:2;16973:6;16968:2;16957:9;16953:18;16946:34;17016:3;17011:2;17000:9;16996:18;16989:31;17040:6;17075;17069:13;17106:6;17098;17091:22;17144:3;17133:9;17129:19;17122:26;;17183:2;17175:6;17171:15;17157:29;;17204:1;17214:195;17228:6;17225:1;17222:13;17214:195;;;17293:13;;-1:-1:-1;;;;;17289:39:1;17277:52;;17384:15;;;;17349:12;;;;17325:1;17243:9;17214:195;;;-1:-1:-1;;;;;;;17465:32:1;;;;17460:2;17445:18;;17438:60;-1:-1:-1;;;17529:3:1;17514:19;17507:35;17426:3;16568:980;-1:-1:-1;;;16568:980:1:o;18165:306::-;18253:6;18261;18269;18322:2;18310:9;18301:7;18297:23;18293:32;18290:52;;;18338:1;18335;18328:12;18290:52;18367:9;18361:16;18351:26;;18417:2;18406:9;18402:18;18396:25;18386:35;;18461:2;18450:9;18446:18;18440:25;18430:35;;18165:306;;;;;:::o

Swarm Source

ipfs://361ab39e99dfa6b3c6d9ebacab3b9b3480df0877c1f80d8d5f5a825bbe4ac4d3
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.