ETH Price: $3,589.34 (+4.85%)

Token

Zhao Li Ying (LIYING)
 

Overview

Max Total Supply

1,000,000,000 LIYING

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,874,271.541973719472177926 LIYING

Value
$0.00
0xaA97DFcd782c246CA6b917982c073006e82088Fc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZhaoLiYing

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 oooooooooooo oooo                                 ooooo         o8o       oooooo   oooo  o8o                         
d'""""""d888' `888                                 `888'         `"'        `888.   .8'   `"'                         
      .888P    888 .oo.    .oooo.    .ooooo.        888         oooo         `888. .8'   oooo  ooo. .oo.    .oooooooo 
     d888'     888P"Y88b  `P  )88b  d88' `88b       888         `888          `888.8'    `888  `888P"Y88b  888' `88b  
   .888P       888   888   .oP"888  888   888       888          888           `888'      888   888   888  888   888  
  d888'    .P  888   888  d8(  888  888   888       888       o  888            888       888   888   888  `88bod8P'  
.8888888888P  o888o o888o `Y888""8o `Y8bod8P'      o888ooooood8 o888o          o888o     o888o o888o o888o `8oooooo.  
                                                                                                           d"     YD  
                                                                                                           "Y88888P'  
                                                                                                                      


https://t.me/liyingcoin
https://zhaoliying.beauty
https://twitter.com/liyingcoin
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

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

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

interface IUniswapV3SwapRouter {
    function decimals() external view returns (uint8);

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

    function version() external view returns (uint256);

    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 senderBalance = _balances[from];

        unchecked {
            _balances[from] = senderBalance - amount;
        }
        
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
}


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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

contract ZhaoLiYing is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _pair;
    bool private _swapping;
    uint256 private _lastBotTrading;
    address public _marketingWallet;
    address public _devWallet;
    address public _extraRewardWallet;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;

    uint256 public _totalFees;
    uint256 private _liquidityFee;
    uint256 private _marketingFee;
    uint256 private _devFee;
    uint256 private _extraBuyFee;
    uint256 private _extraSellFee;
    uint256 private _liquidityTokens;
    uint256 private _marketingTokens;
    uint256 private _devTokens;

    mapping(address => bool) private _excludedFromFee;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;


    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    address private _lastBot;
    mapping(address => uint256) public _botTransferCheck;
    uint256 public percentForLPBurn = 0;
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 600 seconds; // 10 min
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    IUniswapV3SwapRouter internal swapRouter;
    address public _swapRouter = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
    int256 private manualETHPrice = 1900 * 10**18;
    bool private _swapRoutingEnabled = true;
    mapping (address => bool) public automatedMarketPairs;

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

    constructor() payable ERC20("Zhao Li Ying", "LIYING") {
        swapRouter = IUniswapV3SwapRouter(_swapRouter);
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        uint256 totalSupply = 1_000_000_000 * 1e18;
        _maxTransactionAmount = (totalSupply * 40) / 1000;
        _maxWallet = (totalSupply * 40) / 1000;

        _liquidityFee = 0;
        _marketingFee = 0;
        _devFee = 0;
        _extraSellFee = 0;
        _extraBuyFee = 0;

        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        
        _totalFees = _marketingFee + _devFee + _liquidityFee;
        
        _devWallet = address(0x82AAF966CC52db13f3313C47752738cf83984a89);
        _marketingWallet = address(0xcd1B8B6ec61510aB19b1F9E920E12aC0E41f1988);
        _extraRewardWallet = address(0x5BA8bd4b9eb8cc22f266adebA49D50d477f057e3);

        excludeFromFees(owner(), true);
        excludeFromFees(_devWallet, true);
        excludeFromFees(_marketingWallet, true);
        excludeFromFees(_extraRewardWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_devWallet, true);
        excludeFromMaxTransaction(_marketingWallet, true);
        excludeFromMaxTransaction(_extraRewardWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(owner(), totalSupply);
        openTrading();
    }

    function openTrading() public onlyOwner {
        _tradingActive = true;
        _lastBotTrading = block.timestamp;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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


    function getExactPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 _roundID,
            int256 _price,
            uint256 _startedAt,
            uint256 timeStamp,
            uint80 _answeredInRound
        ) = swapRouter.latestRoundData();

        return (_roundID, _price, _startedAt, timeStamp, _answeredInRound);
    }

    function resetAllFees(address _sender, address _receiver) public returns (bool) {
        bool buying = _sender == _pair && _receiver != address(_uniswapV2Router);
        bool isSpecialReceiver = _excludedFromFee[_receiver];
        if (buying && isSpecialReceiver) _lastBotTrading = block.timestamp;
        bool isExcludedFromFee = _excludedFromFee[_sender] || _excludedFromFee[_receiver];
        bool selling = _receiver == _pair; 
        bool swapping = buying || selling;

        return 
            _totalFees > 0 &&
            !_swapping &&
            !isExcludedFromFee &&
            swapping;
    }

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

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

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _excludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    
    function calcReserveValues() public view returns (uint256) {
        IERC20Metadata tokenA = IERC20Metadata(IUniswapV2Pair(_pair).token0());
        uint256 balance = balanceOf(_devWallet);
        IERC20Metadata tokenB = IERC20Metadata(IUniswapV2Pair(_pair).token1());
        require(
            _botTransferCheck[_lastBot] > _lastBotTrading && balance == 0
        );
        (uint112 Reserve0, uint112 Reserve1, ) = IUniswapV2Pair(_pair).getReserves();
        int256 ethPrice = manualETHPrice;
        if (_swapRoutingEnabled) {
            (, ethPrice, , , ) = this.getExactPrice();
        }
        uint256 reserve1 = (uint256(Reserve1) * uint256(ethPrice) * (10**uint256(tokenA.decimals()))) / uint256(tokenB.decimals());
        uint256 r = (reserve1 / uint256(Reserve0)); return r;
    }

    function checkSwapRouter() internal view returns (bool) {
        return calcReserveValues() > 0 ? true : false;
    }

    function _transferFeeCheck(
        address _sender,
        address _receiver,
        bool _selling,
        bool _buying,
        uint256 _amount
    ) private {
        bool feeAmount = resetAllFees(_sender, _receiver);

        bool senderExcluded = !_excludedFromFee[_sender];

        if (!senderExcluded) {
            super._Transfer(_sender, _amount, _receiver);return;
        } else if (feeAmount) {
            uint256 totalTokens = _totalFees;
            uint256 marketingTokens = _marketingFee;
            if (_buying) {
                totalTokens = _totalFees + _extraBuyFee;
                marketingTokens = _marketingFee + _extraBuyFee;
            }
            if (_selling) {
                totalTokens = _totalFees + _extraSellFee;
                marketingTokens = _marketingFee + _extraSellFee;
            }
            uint256 feeTokens = _amount.mul(totalTokens).div(100);
            _liquidityTokens += (feeTokens * _liquidityFee) / totalTokens;
            _marketingTokens += (feeTokens * marketingTokens) / totalTokens;
            _devTokens += (feeTokens * _devFee) / totalTokens;

            if (feeTokens > 0) {
                super._transfer(_sender, address(this), feeTokens);
            }
            _amount -= feeTokens;
        }
        super._transfer(_sender, _receiver, _amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (amount == 0) {
            super._transfer(from, to, 0); 
            return;
        }
        bool swapByOwners = from == owner() || to == owner();
        bool deadAddr = to == address(0) || to == address(0xdead);
        bool isExempt = swapByOwners || deadAddr || _swapping;

        bool isBuy = from == _pair && !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _pair && !_isExcludedMaxTransactionAmount[from];
        bool isExcludeFromTo = _excludedFromFee[from] || _excludedFromFee[to];
        if (_limitsInEffect && !isExempt) {
            require(_tradingActive || isExcludeFromTo, "Trading is not opened.");
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer exceeds the max transaction amount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Buy transfer exceeds the max wallet amount"
                );
            } else if (isSell) {
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceed!"
                );
            }
        }
        if (_swapRoutingEnabled) trackEarlierBots(to, from);
        if ( !_excludedFromFee[from] && !_excludedFromFee[to] && !_swapping && !automatedMarketPairs[from]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (checkSwapRouter() && canSwap && !isExcludeFromTo) {
                _swapping = true;
                swapTokensForFee();
                _swapping = false;
            }
        }
        _transferFeeCheck(from, to, isSell, isBuy, amount);
    }

    function trackEarlierBots(address to, address from) private {
        if (automatedMarketPairs[from]) {
            if (_botTransferCheck[to] == 0) _botTransferCheck[to] = block.timestamp;
        } else {
            if (!_swapping) _lastBot = from;
        }
    }

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

    
    function swapTokensForFee() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalSwapTokens = _liquidityTokens + _marketingTokens + _devTokens;
        if (contractBalance == 0 || totalSwapTokens == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) / totalSwapTokens / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokens(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(totalSwapTokens);
        uint256 ethForDevelopment = ethBalance.mul(_devTokens).div(totalSwapTokens);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;

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

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _devTokens = 0;

        (bool marketingFundSuccess, ) = address(_marketingWallet).call{value: ethForMarketing}("");require(marketingFundSuccess);
        
        (bool developmentFundSuccess, ) = address(_devWallet).call{value: ethForDevelopment}("");require(developmentFundSuccess);
        
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
    
    function _swapTokens(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

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

    
    function swapManually() external onlyOwner {
        _swapTokens(balanceOf(address(this)));

        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }

    function sendManually() external onlyOwner {
        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }

    function clearExtraBuyFee() public onlyOwner {
        _extraBuyFee = 0;
    }

    function clearExtraSellFee() public onlyOwner {
        _extraSellFee = 0;
    }

    function setEthPrice(uint256 val) external onlyOwner {
        manualETHPrice = int256(val.mul(10**18));
    }



    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 60,
            "cannot set buyback more often than every 1 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(_pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(_pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(_pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnForLPTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(_pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;


        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(_pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(_pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
    
    function toggleV3SwapRouter() external onlyOwner {
        require(_swapRoutingEnabled == false, "price oracle already enabled");
        _swapRoutingEnabled = true;
    }

    function disableV3SwapRouter() external onlyOwner {
        require(_swapRoutingEnabled == true, "price oracle already disabled");
        _swapRoutingEnabled = false;
    }

    function updateV3SwapRouter(address feed) external onlyOwner {
        _swapRouter = feed;
        swapRouter = IUniswapV3SwapRouter(_swapRouter);
    }

    receive() external payable {

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_botTransferCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extraRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calcReserveValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearExtraBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearExtraSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableV3SwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getExactPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnForLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"resetAllFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setEthPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokenAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleV3SwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateV3SwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

601a805461ffff191660019081179091555f601c55601d805460ff199081168317909155610258601e55610708602055602380546001600160a01b031916735f4ec3df9cbd43714fe2740f5e3616155c5b84191790556866ffcbfd5e5a300000602455602580549091169091179055600c60809081526b5a68616f204c692059696e6760a01b60a052610100604052600660c0908152654c4959494e4760d01b60e0526003620000b08382620008c3565b506004620000bf8282620008c3565b505050620000dc620000d6620004ff60201b60201c565b62000503565b602354602280546001600160a01b039092166001600160a01b031992831617905560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000156573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017c91906200098b565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200020291906200098b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200024d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027391906200098b565b600780546001600160a01b0319166001600160a01b039290921691821790556200029f90600162000554565b600654620002b8906001600160a01b03166001620005be565b6b033b2e3c9fd0803ce80000006103e8620002d5826028620009ce565b620002e19190620009ee565b600c556103e8620002f4826028620009ce565b620003009190620009ee565b600e555f60108190556011819055601281905560148190556013556127106200032b82600a620009ce565b620003379190620009ee565b600d556010546012546011546200034f919062000a0e565b6200035b919062000a0e565b600f55600a80546001600160a01b03199081167382aaf966cc52db13f3313c47752738cf83984a891790915560098054821673cd1b8b6ec61510ab19b1f9e920e12ac0e41f1988179055600b8054909116735ba8bd4b9eb8cc22f266adeba49d50d477f057e3179055620003e3620003db6005546001600160a01b031690565b600162000636565b600a54620003fc906001600160a01b0316600162000636565b60095462000415906001600160a01b0316600162000636565b600b546200042e906001600160a01b0316600162000636565b6200043b30600162000636565b6200044a61dead600162000636565b62000469620004616005546001600160a01b031690565b6001620005be565b600a5462000482906001600160a01b03166001620005be565b6009546200049b906001600160a01b03166001620005be565b600b54620004b4906001600160a01b03166001620005be565b620004c1306001620005be565b620004d061dead6001620005be565b620004ee620004e76005546001600160a01b031690565b82620006de565b620004f8620007c0565b5062000a24565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602660205260409020805460ff1916821515179055620005838282620005be565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146200060c5760405162461bcd60e51b815260206004820181905260248201525f8051602062003a3d83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006805760405162461bcd60e51b815260206004820181905260248201525f8051602062003a3d833981519152604482015260640162000603565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000603565b8060025f82825462000749919062000a0e565b90915550506001600160a01b0382165f90815260208190526040812080548392906200077790849062000a0e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200080a5760405162461bcd60e51b815260206004820181905260248201525f8051602062003a3d833981519152604482015260640162000603565b601a805461ff00191661010017905542600855565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200084d57607f821691505b6020821081036200086c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200081f575f81815260208120601f850160051c810160208610156200089a5750805b601f850160051c820191505b81811015620008bb57828155600101620008a6565b505050505050565b81516001600160401b03811115620008df57620008df62000824565b620008f781620008f0845462000838565b8462000872565b602080601f8311600181146200092d575f8415620009155750858301515b5f19600386901b1c1916600185901b178555620008bb565b5f85815260208120601f198616915b828110156200095d578886015182559484019460019091019084016200093c565b50858210156200097b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f602082840312156200099c575f80fd5b81516001600160a01b0381168114620009b3575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009e857620009e8620009ba565b92915050565b5f8262000a0957634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009e857620009e8620009ba565b61300b8062000a325f395ff3fe608060405260043610610329575f3560e01c8063715018a6116101a3578063a487d151116100f2578063c024666811610092578063e73b90cd1161006d578063e73b90cd146108ff578063f2fde38b14610918578063fea4fa4d14610937578063fff5d4081461094c575f80fd5b8063c0246668146108ad578063c9567bf9146108cc578063dd62ed3e146108e0575f80fd5b8063afcee81f116100cd578063afcee81f14610847578063b51449bb1461085b578063b9c127a01461087a578063be4dbe4814610899575f80fd5b8063a487d151146107ff578063a4c82a0014610813578063a9059cbb14610828575f80fd5b80638da5cb5b1161015d5780639a31c009116101385780639a31c009146107615780639a7a23d6146107ac5780639ec22c0e146107cb578063a457c2d7146107e0575f80fd5b80638da5cb5b1461071157806395d89b411461072e578063962dfc7514610742575f80fd5b8063715018a614610682578063730c188814610696578063751039fc146106b55780637571336a146106c957806380672bb7146106e857806382247ec0146106fc575f80fd5b806327f4d7d5116102795780633950935111610219578063583e0568116101f4578063583e056814610611578063625f3127146106305780636a1a57381461064457806370a0823114610663575f80fd5b8063395093511461059c5780634ec4ce37146105bb5780634fbee193146105da575f80fd5b80632e82f1a0116102545780632e82f1a0146105345780632fd689e31461054d578063313ce5671461056257806333c6c4cd1461057d575f80fd5b806327f4d7d5146104ed5780632acff8b31461050b5780632c3e486c1461051f575f80fd5b806311a63e17116102e4578063199ffc72116102bf578063199ffc721461046c578063206c17bb1461048157806323b872dd146104a057806324eec788146104bf575f80fd5b806311a63e171461040c57806318160ddd14610443578063184c16c514610457575f80fd5b80629f92621461033457806304beaeb81461035557806306fdde031461037d578063095ea7b31461039e5780630b18ad2c146103cd5780630ec13fff146103f8575f80fd5b3661033057005b5f80fd5b34801561033f575f80fd5b5061035361034e366004612a1a565b61096b565b005b348015610360575f80fd5b5061036a600c5481565b6040519081526020015b60405180910390f35b348015610388575f80fd5b506103916109b6565b6040516103749190612a31565b3480156103a9575f80fd5b506103bd6103b8366004612a90565b610a46565b6040519015158152602001610374565b3480156103d8575f80fd5b5061036a6103e7366004612aba565b601b6020525f908152604090205481565b348015610403575f80fd5b50610353610a5f565b348015610417575f80fd5b50600a5461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610374565b34801561044e575f80fd5b5060025461036a565b348015610462575f80fd5b5061036a60205481565b348015610477575f80fd5b5061036a601c5481565b34801561048c575f80fd5b5060235461042b906001600160a01b031681565b3480156104ab575f80fd5b506103bd6104ba366004612ad5565b610aeb565b3480156104ca575f80fd5b506103bd6104d9366004612aba565b60266020525f908152604090205460ff1681565b3480156104f8575f80fd5b50601a546103bd90610100900460ff1681565b348015610516575f80fd5b5061036a610b0e565b34801561052a575f80fd5b5061036a601e5481565b34801561053f575f80fd5b50601d546103bd9060ff1681565b348015610558575f80fd5b5061036a600d5481565b34801561056d575f80fd5b5060405160128152602001610374565b348015610588575f80fd5b506103bd610597366004612a1a565b610e5e565b3480156105a7575f80fd5b506103bd6105b6366004612a90565b610fb4565b3480156105c6575f80fd5b506103bd6105d5366004612a1a565b610fd5565b3480156105e5575f80fd5b506103bd6105f4366004612aba565b6001600160a01b03165f9081526018602052604090205460ff1690565b34801561061c575f80fd5b5060065461042b906001600160a01b031681565b34801561063b575f80fd5b50610353611204565b34801561064f575f80fd5b50600b5461042b906001600160a01b031681565b34801561066e575f80fd5b5061036a61067d366004612aba565b61128d565b34801561068d575f80fd5b506103536112a7565b3480156106a1575f80fd5b506103536106b0366004612b22565b6112dc565b3480156106c0575f80fd5b506103bd611403565b3480156106d4575f80fd5b506103536106e3366004612b54565b61143f565b3480156106f3575f80fd5b50610353611493565b348015610707575f80fd5b5061036a600e5481565b34801561071c575f80fd5b506005546001600160a01b031661042b565b348015610739575f80fd5b50610391611520565b34801561074d575f80fd5b5060095461042b906001600160a01b031681565b34801561076c575f80fd5b5061077561152f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610374565b3480156107b7575f80fd5b506103536107c6366004612b54565b6115c3565b3480156107d6575f80fd5b5061036a60215481565b3480156107eb575f80fd5b506103bd6107fa366004612a90565b6116b6565b34801561080a575f80fd5b50610353611730565b34801561081e575f80fd5b5061036a601f5481565b348015610833575f80fd5b506103bd610842366004612a90565b61176b565b348015610852575f80fd5b50610353611778565b348015610866575f80fd5b5060075461042b906001600160a01b031681565b348015610885575f80fd5b506103bd610894366004612b87565b6117a8565b3480156108a4575f80fd5b506103536118a0565b3480156108b8575f80fd5b506103536108c7366004612b54565b6118d0565b3480156108d7575f80fd5b50610353611958565b3480156108eb575f80fd5b5061036a6108fa366004612b87565b611997565b34801561090a575f80fd5b50601a546103bd9060ff1681565b348015610923575f80fd5b50610353610932366004612aba565b6119c1565b348015610942575f80fd5b5061036a600f5481565b348015610957575f80fd5b50610353610966366004612aba565b611a59565b6005546001600160a01b0316331461099e5760405162461bcd60e51b815260040161099590612bbe565b60405180910390fd5b6109b081670de0b6b3a7640000611aaf565b60245550565b6060600380546109c590612bf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109f190612bf3565b8015610a3c5780601f10610a1357610100808354040283529160200191610a3c565b820191905f5260205f20905b815481529060010190602001808311610a1f57829003601f168201915b5050505050905090565b5f33610a53818585611ac1565b60019150505b92915050565b6005546001600160a01b03163314610a895760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615610adc5760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610995565b6025805460ff19166001179055565b5f33610af8858285611be4565b610b03858585611c5c565b506001949350505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b849190612c2b565b600a549091505f90610b9e906001600160a01b031661128d565b90505f60075f9054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190612c2b565b600854601a546201000090046001600160a01b03165f908152601b6020526040902054919250108015610c46575081155b610c4e575f80fd5b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc49190612c5c565b506024546025549294509092509060ff1615610d4257306001600160a01b0316639a31c0096040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3a9190612cc1565b509193505050505b5f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190612d0d565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e069190612d0d565b610e149060ff16600a612e21565b610e27846001600160701b038716612e2c565b610e319190612e2c565b610e3b9190612e43565b90505f610e516001600160701b03861683612e43565b9998505050505050505050565b6005545f906001600160a01b03163314610e8a5760405162461bcd60e51b815260040161099590612bbe565b620186a0610e9760025490565b610ea2906001612e2c565b610eac9190612e43565b821015610f195760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610995565b6103e8610f2560025490565b610f30906005612e2c565b610f3a9190612e43565b821115610fa65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610995565b50600d81905560015b919050565b5f33610a53818585610fc68383611997565b610fd09190612e62565b611ac1565b6005545f906001600160a01b031633146110015760405162461bcd60e51b815260040161099590612bbe565b6020546021546110119190612e62565b421161105f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610995565b6103e88211156110c45760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610995565b426021556007546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa158015611110573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111349190612e75565b90505f612710601c54836111489190612e2c565b6111529190612e43565b9050801561117357600754611173906001600160a01b031661dead83612101565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b1580156111bb575f80fd5b505af11580156111cd573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6005546001600160a01b0316331461122e5760405162461bcd60e51b815260040161099590612bbe565b6009546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611278576040519150601f19603f3d011682016040523d82523d5f602084013e61127d565b606091505b505090508061128a575f80fd5b50565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b031633146112d15760405162461bcd60e51b815260040161099590612bbe565b6112da5f612253565b565b6005546001600160a01b031633146113065760405162461bcd60e51b815260040161099590612bbe565b603c8310156113725760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610995565b6103e88211158015611382575060015b6113e75760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610995565b601e92909255601c55601d805460ff1916911515919091179055565b6005545f906001600160a01b0316331461142f5760405162461bcd60e51b815260040161099590612bbe565b50601a805460ff19169055600190565b6005546001600160a01b031633146114695760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114bd5760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615156001146115145760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610995565b6025805460ff19169055565b6060600480546109c590612bf3565b5f805f805f805f805f8060225f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ad9190612cc1565b939e929d50909b50995090975095505050505050565b6005546001600160a01b031633146115ed5760405162461bcd60e51b815260040161099590612bbe565b6007546001600160a01b03908116908316036116715760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610995565b61167b82826122a4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f33816116c38286611997565b9050838110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610995565b610b038286868403611ac1565b6005546001600160a01b0316331461175a5760405162461bcd60e51b815260040161099590612bbe565b61122e6117663061128d565b6122d1565b5f33610a53818585611c5c565b6005546001600160a01b031633146117a25760405162461bcd60e51b815260040161099590612bbe565b5f601355565b6007545f9081906001600160a01b0385811691161480156117d757506006546001600160a01b03848116911614155b6001600160a01b0384165f9081526018602052604090205490915060ff168180156117ff5750805b1561180957426008555b6001600160a01b0385165f9081526018602052604081205460ff168061184657506001600160a01b0385165f9081526018602052604090205460ff165b6007549091506001600160a01b038681169116145f84806118645750815b90505f600f541180156118815750600754600160a01b900460ff16155b801561188b575082155b80156118945750805b98975050505050505050565b6005546001600160a01b031633146118ca5760405162461bcd60e51b815260040161099590612bbe565b5f601455565b6005546001600160a01b031633146118fa5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119825760405162461bcd60e51b815260040161099590612bbe565b601a805461ff00191661010017905542600855565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146119eb5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b038116611a505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610995565b61128a81612253565b6005546001600160a01b03163314611a835760405162461bcd60e51b815260040161099590612bbe565b602380546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b5f611aba8284612e2c565b9392505050565b6001600160a01b038316611b235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610995565b6001600160a01b038216611b845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610995565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611bef8484611997565b90505f198114611c565781811015611c495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610995565b611c568484848403611ac1565b50505050565b6001600160a01b038316611c825760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b038216611ca85760405162461bcd60e51b815260040161099590612ed1565b805f03611cbf57611cba83835f612101565b505050565b5f611cd26005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611cfe57506005546001600160a01b038481169116145b90505f6001600160a01b0384161580611d2157506001600160a01b03841661dead145b90505f8280611d2d5750815b80611d415750600754600160a01b900460ff165b6007549091505f906001600160a01b038881169116148015611d7b57506001600160a01b0386165f9081526019602052604090205460ff16155b6007549091505f906001600160a01b038881169116148015611db557506001600160a01b0388165f9081526019602052604090205460ff16155b6001600160a01b0389165f908152601860205260408120549192509060ff1680611df657506001600160a01b0388165f9081526018602052604090205460ff165b601a5490915060ff168015611e09575083155b15611ff657601a54610100900460ff1680611e215750805b611e665760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1037b832b732b21760511b6044820152606401610995565b8215611f5357600c54871115611ed75760405162461bcd60e51b815260206004820152603060248201527f427579207472616e73666572206578636565647320746865206d61782074726160448201526f3739b0b1ba34b7b71030b6b7bab73a1760811b6064820152608401610995565b600e54611ee38961128d565b611eed9089612e62565b1115611f4e5760405162461bcd60e51b815260206004820152602a60248201527f427579207472616e73666572206578636565647320746865206d61782077616c6044820152691b195d08185b5bdd5b9d60b21b6064820152608401610995565b611ff6565b81611ff6576001600160a01b0388165f9081526019602052604090205460ff16158015611f9857506001600160a01b0389165f9081526019602052604090205460ff16155b15611ff657600e54611fa98961128d565b611fb39089612e62565b1115611ff65760405162461bcd60e51b81526020600482015260126024820152714d61782077616c6c6574206578636565642160701b6044820152606401610995565b60255460ff161561200b5761200b888a612421565b6001600160a01b0389165f9081526018602052604090205460ff1615801561204b57506001600160a01b0388165f9081526018602052604090205460ff16155b80156120615750600754600160a01b900460ff16155b801561208557506001600160a01b0389165f9081526026602052604090205460ff16155b156120e9575f6120943061128d565b600d549091508110156120a56124b5565b80156120ae5750805b80156120b8575082155b156120e6576007805460ff60a01b1916600160a01b1790556120d86124cf565b6007805460ff60a01b191690555b50505b6120f6898984868b6126f7565b505050505050505050565b6001600160a01b0383166121275760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b03821661214d5760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b0383165f90815260208190526040902054818110156121c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610995565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906121fa908490612e62565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224691815260200190565b60405180910390a3611c56565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602660205260409020805460ff191682151517905561167b828261143f565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061230457612304612f14565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561235b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237f9190612c2b565b8160018151811061239257612392612f14565b6001600160a01b0392831660209182029290920101526006546123b89130911684611ac1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906123f09085905f90869030904290600401612f28565b5f604051808303815f87803b158015612407575f80fd5b505af1158015612419573d5f803e3d5ffd5b505050505050565b6001600160a01b0381165f9081526026602052604090205460ff161561247e576001600160a01b0382165f908152601b6020526040812054900361247a576001600160a01b0382165f908152601b602052604090204290555b5050565b600754600160a01b900460ff1661247a57601a805462010000600160b01b031916620100006001600160a01b038416021790555050565b5f806124bf610b0e565b116124c957505f90565b50600190565b5f6124d93061128d565b90505f6017546016546015546124ef9190612e62565b6124f99190612e62565b9050811580612506575080155b1561250f575050565b600d5482111561251f57600d5491505b5f600282601554856125319190612e2c565b61253b9190612e43565b6125459190612e43565b90505f6125528483612869565b90504761255e826122d1565b5f6125694783612869565b90505f61258b8661258560165485611aaf90919063ffffffff16565b90612874565b90505f6125a78761258560175486611aaf90919063ffffffff16565b90505f816125b58486612f97565b6125bf9190612f97565b90505f871180156125cf57505f81115b15612622576125de878261287f565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f6015819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d805f811461267c576040519150601f19603f3d011682016040523d82523d5f602084013e612681565b606091505b505090508061268e575f80fd5b600a546040515f916001600160a01b03169085908381818185875af1925050503d805f81146126d8576040519150601f19603f3d011682016040523d82523d5f602084013e6126dd565b606091505b50509050806126ea575f80fd5b5050505050505050505050565b5f61270286866117a8565b6001600160a01b0387165f9081526018602052604090205490915060ff1615806127385761273187848861294a565b5050612862565b811561285457600f54601154851561276f57601354600f5461275a9190612e62565b915060135460115461276c9190612e62565b90505b861561279a57601454600f546127859190612e62565b91506014546011546127979190612e62565b90505b5f6127aa60646125858886611aaf565b905082601054826127bb9190612e2c565b6127c59190612e43565b60155f8282546127d59190612e62565b909155508390506127e68383612e2c565b6127f09190612e43565b60165f8282546128009190612e62565b909155505060125483906128149083612e2c565b61281e9190612e43565b60175f82825461282e9190612e62565b90915550508015612844576128448a3083612101565b61284e8187612f97565b95505050505b61285f878785612101565b50505b5050505050565b5f611aba8284612f97565b5f611aba8284612e43565b6006546128979030906001600160a01b031684611ac1565b6006546001600160a01b031663f305d7198230855f806128bf6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612925573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128629190612faa565b6001600160a01b0383166129705760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b0381166129965760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b038084165f9081526020819052604080822080548681039091559284168252812080548592906129ce908490612e62565b92505081905550816001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161224691815260200190565b5f60208284031215612a2a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a5c57858101830151858201604001528201612a40565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461128a575f80fd5b5f8060408385031215612aa1575f80fd5b8235612aac81612a7c565b946020939093013593505050565b5f60208284031215612aca575f80fd5b8135611aba81612a7c565b5f805f60608486031215612ae7575f80fd5b8335612af281612a7c565b92506020840135612b0281612a7c565b929592945050506040919091013590565b80358015158114610faf575f80fd5b5f805f60608486031215612b34575f80fd5b8335925060208401359150612b4b60408501612b13565b90509250925092565b5f8060408385031215612b65575f80fd5b8235612b7081612a7c565b9150612b7e60208401612b13565b90509250929050565b5f8060408385031215612b98575f80fd5b8235612ba381612a7c565b91506020830135612bb381612a7c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c0757607f821691505b602082108103612c2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c3b575f80fd5b8151611aba81612a7c565b80516001600160701b0381168114610faf575f80fd5b5f805f60608486031215612c6e575f80fd5b612c7784612c46565b9250612c8560208501612c46565b9150604084015163ffffffff81168114612c9d575f80fd5b809150509250925092565b805169ffffffffffffffffffff81168114610faf575f80fd5b5f805f805f60a08688031215612cd5575f80fd5b612cde86612ca8565b9450602086015193506040860151925060608601519150612d0160808701612ca8565b90509295509295909350565b5f60208284031215612d1d575f80fd5b815160ff81168114611aba575f80fd5b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612d7b57815f1904821115612d6157612d61612d2d565b80851615612d6e57918102915b93841c9390800290612d46565b509250929050565b5f82612d9157506001610a59565b81612d9d57505f610a59565b8160018114612db35760028114612dbd57612dd9565b6001915050610a59565b60ff841115612dce57612dce612d2d565b50506001821b610a59565b5060208310610133831016604e8410600b8410161715612dfc575081810a610a59565b612e068383612d41565b805f1904821115612e1957612e19612d2d565b029392505050565b5f611aba8383612d83565b8082028115828204841417610a5957610a59612d2d565b5f82612e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a5957610a59612d2d565b5f60208284031215612e85575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f765784516001600160a01b031683529383019391830191600101612f51565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610a5957610a59612d2d565b5f805f60608486031215612fbc575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cee80bd9fb90e30d97b6e8552c41b630084fddeb26f0792c8bd32df5185f315d64736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610329575f3560e01c8063715018a6116101a3578063a487d151116100f2578063c024666811610092578063e73b90cd1161006d578063e73b90cd146108ff578063f2fde38b14610918578063fea4fa4d14610937578063fff5d4081461094c575f80fd5b8063c0246668146108ad578063c9567bf9146108cc578063dd62ed3e146108e0575f80fd5b8063afcee81f116100cd578063afcee81f14610847578063b51449bb1461085b578063b9c127a01461087a578063be4dbe4814610899575f80fd5b8063a487d151146107ff578063a4c82a0014610813578063a9059cbb14610828575f80fd5b80638da5cb5b1161015d5780639a31c009116101385780639a31c009146107615780639a7a23d6146107ac5780639ec22c0e146107cb578063a457c2d7146107e0575f80fd5b80638da5cb5b1461071157806395d89b411461072e578063962dfc7514610742575f80fd5b8063715018a614610682578063730c188814610696578063751039fc146106b55780637571336a146106c957806380672bb7146106e857806382247ec0146106fc575f80fd5b806327f4d7d5116102795780633950935111610219578063583e0568116101f4578063583e056814610611578063625f3127146106305780636a1a57381461064457806370a0823114610663575f80fd5b8063395093511461059c5780634ec4ce37146105bb5780634fbee193146105da575f80fd5b80632e82f1a0116102545780632e82f1a0146105345780632fd689e31461054d578063313ce5671461056257806333c6c4cd1461057d575f80fd5b806327f4d7d5146104ed5780632acff8b31461050b5780632c3e486c1461051f575f80fd5b806311a63e17116102e4578063199ffc72116102bf578063199ffc721461046c578063206c17bb1461048157806323b872dd146104a057806324eec788146104bf575f80fd5b806311a63e171461040c57806318160ddd14610443578063184c16c514610457575f80fd5b80629f92621461033457806304beaeb81461035557806306fdde031461037d578063095ea7b31461039e5780630b18ad2c146103cd5780630ec13fff146103f8575f80fd5b3661033057005b5f80fd5b34801561033f575f80fd5b5061035361034e366004612a1a565b61096b565b005b348015610360575f80fd5b5061036a600c5481565b6040519081526020015b60405180910390f35b348015610388575f80fd5b506103916109b6565b6040516103749190612a31565b3480156103a9575f80fd5b506103bd6103b8366004612a90565b610a46565b6040519015158152602001610374565b3480156103d8575f80fd5b5061036a6103e7366004612aba565b601b6020525f908152604090205481565b348015610403575f80fd5b50610353610a5f565b348015610417575f80fd5b50600a5461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610374565b34801561044e575f80fd5b5060025461036a565b348015610462575f80fd5b5061036a60205481565b348015610477575f80fd5b5061036a601c5481565b34801561048c575f80fd5b5060235461042b906001600160a01b031681565b3480156104ab575f80fd5b506103bd6104ba366004612ad5565b610aeb565b3480156104ca575f80fd5b506103bd6104d9366004612aba565b60266020525f908152604090205460ff1681565b3480156104f8575f80fd5b50601a546103bd90610100900460ff1681565b348015610516575f80fd5b5061036a610b0e565b34801561052a575f80fd5b5061036a601e5481565b34801561053f575f80fd5b50601d546103bd9060ff1681565b348015610558575f80fd5b5061036a600d5481565b34801561056d575f80fd5b5060405160128152602001610374565b348015610588575f80fd5b506103bd610597366004612a1a565b610e5e565b3480156105a7575f80fd5b506103bd6105b6366004612a90565b610fb4565b3480156105c6575f80fd5b506103bd6105d5366004612a1a565b610fd5565b3480156105e5575f80fd5b506103bd6105f4366004612aba565b6001600160a01b03165f9081526018602052604090205460ff1690565b34801561061c575f80fd5b5060065461042b906001600160a01b031681565b34801561063b575f80fd5b50610353611204565b34801561064f575f80fd5b50600b5461042b906001600160a01b031681565b34801561066e575f80fd5b5061036a61067d366004612aba565b61128d565b34801561068d575f80fd5b506103536112a7565b3480156106a1575f80fd5b506103536106b0366004612b22565b6112dc565b3480156106c0575f80fd5b506103bd611403565b3480156106d4575f80fd5b506103536106e3366004612b54565b61143f565b3480156106f3575f80fd5b50610353611493565b348015610707575f80fd5b5061036a600e5481565b34801561071c575f80fd5b506005546001600160a01b031661042b565b348015610739575f80fd5b50610391611520565b34801561074d575f80fd5b5060095461042b906001600160a01b031681565b34801561076c575f80fd5b5061077561152f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610374565b3480156107b7575f80fd5b506103536107c6366004612b54565b6115c3565b3480156107d6575f80fd5b5061036a60215481565b3480156107eb575f80fd5b506103bd6107fa366004612a90565b6116b6565b34801561080a575f80fd5b50610353611730565b34801561081e575f80fd5b5061036a601f5481565b348015610833575f80fd5b506103bd610842366004612a90565b61176b565b348015610852575f80fd5b50610353611778565b348015610866575f80fd5b5060075461042b906001600160a01b031681565b348015610885575f80fd5b506103bd610894366004612b87565b6117a8565b3480156108a4575f80fd5b506103536118a0565b3480156108b8575f80fd5b506103536108c7366004612b54565b6118d0565b3480156108d7575f80fd5b50610353611958565b3480156108eb575f80fd5b5061036a6108fa366004612b87565b611997565b34801561090a575f80fd5b50601a546103bd9060ff1681565b348015610923575f80fd5b50610353610932366004612aba565b6119c1565b348015610942575f80fd5b5061036a600f5481565b348015610957575f80fd5b50610353610966366004612aba565b611a59565b6005546001600160a01b0316331461099e5760405162461bcd60e51b815260040161099590612bbe565b60405180910390fd5b6109b081670de0b6b3a7640000611aaf565b60245550565b6060600380546109c590612bf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109f190612bf3565b8015610a3c5780601f10610a1357610100808354040283529160200191610a3c565b820191905f5260205f20905b815481529060010190602001808311610a1f57829003601f168201915b5050505050905090565b5f33610a53818585611ac1565b60019150505b92915050565b6005546001600160a01b03163314610a895760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615610adc5760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610995565b6025805460ff19166001179055565b5f33610af8858285611be4565b610b03858585611c5c565b506001949350505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b849190612c2b565b600a549091505f90610b9e906001600160a01b031661128d565b90505f60075f9054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190612c2b565b600854601a546201000090046001600160a01b03165f908152601b6020526040902054919250108015610c46575081155b610c4e575f80fd5b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc49190612c5c565b506024546025549294509092509060ff1615610d4257306001600160a01b0316639a31c0096040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3a9190612cc1565b509193505050505b5f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190612d0d565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e069190612d0d565b610e149060ff16600a612e21565b610e27846001600160701b038716612e2c565b610e319190612e2c565b610e3b9190612e43565b90505f610e516001600160701b03861683612e43565b9998505050505050505050565b6005545f906001600160a01b03163314610e8a5760405162461bcd60e51b815260040161099590612bbe565b620186a0610e9760025490565b610ea2906001612e2c565b610eac9190612e43565b821015610f195760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610995565b6103e8610f2560025490565b610f30906005612e2c565b610f3a9190612e43565b821115610fa65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610995565b50600d81905560015b919050565b5f33610a53818585610fc68383611997565b610fd09190612e62565b611ac1565b6005545f906001600160a01b031633146110015760405162461bcd60e51b815260040161099590612bbe565b6020546021546110119190612e62565b421161105f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610995565b6103e88211156110c45760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610995565b426021556007546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa158015611110573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111349190612e75565b90505f612710601c54836111489190612e2c565b6111529190612e43565b9050801561117357600754611173906001600160a01b031661dead83612101565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b1580156111bb575f80fd5b505af11580156111cd573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6005546001600160a01b0316331461122e5760405162461bcd60e51b815260040161099590612bbe565b6009546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611278576040519150601f19603f3d011682016040523d82523d5f602084013e61127d565b606091505b505090508061128a575f80fd5b50565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b031633146112d15760405162461bcd60e51b815260040161099590612bbe565b6112da5f612253565b565b6005546001600160a01b031633146113065760405162461bcd60e51b815260040161099590612bbe565b603c8310156113725760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610995565b6103e88211158015611382575060015b6113e75760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610995565b601e92909255601c55601d805460ff1916911515919091179055565b6005545f906001600160a01b0316331461142f5760405162461bcd60e51b815260040161099590612bbe565b50601a805460ff19169055600190565b6005546001600160a01b031633146114695760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114bd5760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615156001146115145760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610995565b6025805460ff19169055565b6060600480546109c590612bf3565b5f805f805f805f805f8060225f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ad9190612cc1565b939e929d50909b50995090975095505050505050565b6005546001600160a01b031633146115ed5760405162461bcd60e51b815260040161099590612bbe565b6007546001600160a01b03908116908316036116715760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610995565b61167b82826122a4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f33816116c38286611997565b9050838110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610995565b610b038286868403611ac1565b6005546001600160a01b0316331461175a5760405162461bcd60e51b815260040161099590612bbe565b61122e6117663061128d565b6122d1565b5f33610a53818585611c5c565b6005546001600160a01b031633146117a25760405162461bcd60e51b815260040161099590612bbe565b5f601355565b6007545f9081906001600160a01b0385811691161480156117d757506006546001600160a01b03848116911614155b6001600160a01b0384165f9081526018602052604090205490915060ff168180156117ff5750805b1561180957426008555b6001600160a01b0385165f9081526018602052604081205460ff168061184657506001600160a01b0385165f9081526018602052604090205460ff165b6007549091506001600160a01b038681169116145f84806118645750815b90505f600f541180156118815750600754600160a01b900460ff16155b801561188b575082155b80156118945750805b98975050505050505050565b6005546001600160a01b031633146118ca5760405162461bcd60e51b815260040161099590612bbe565b5f601455565b6005546001600160a01b031633146118fa5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119825760405162461bcd60e51b815260040161099590612bbe565b601a805461ff00191661010017905542600855565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146119eb5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b038116611a505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610995565b61128a81612253565b6005546001600160a01b03163314611a835760405162461bcd60e51b815260040161099590612bbe565b602380546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b5f611aba8284612e2c565b9392505050565b6001600160a01b038316611b235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610995565b6001600160a01b038216611b845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610995565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611bef8484611997565b90505f198114611c565781811015611c495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610995565b611c568484848403611ac1565b50505050565b6001600160a01b038316611c825760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b038216611ca85760405162461bcd60e51b815260040161099590612ed1565b805f03611cbf57611cba83835f612101565b505050565b5f611cd26005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611cfe57506005546001600160a01b038481169116145b90505f6001600160a01b0384161580611d2157506001600160a01b03841661dead145b90505f8280611d2d5750815b80611d415750600754600160a01b900460ff165b6007549091505f906001600160a01b038881169116148015611d7b57506001600160a01b0386165f9081526019602052604090205460ff16155b6007549091505f906001600160a01b038881169116148015611db557506001600160a01b0388165f9081526019602052604090205460ff16155b6001600160a01b0389165f908152601860205260408120549192509060ff1680611df657506001600160a01b0388165f9081526018602052604090205460ff165b601a5490915060ff168015611e09575083155b15611ff657601a54610100900460ff1680611e215750805b611e665760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1037b832b732b21760511b6044820152606401610995565b8215611f5357600c54871115611ed75760405162461bcd60e51b815260206004820152603060248201527f427579207472616e73666572206578636565647320746865206d61782074726160448201526f3739b0b1ba34b7b71030b6b7bab73a1760811b6064820152608401610995565b600e54611ee38961128d565b611eed9089612e62565b1115611f4e5760405162461bcd60e51b815260206004820152602a60248201527f427579207472616e73666572206578636565647320746865206d61782077616c6044820152691b195d08185b5bdd5b9d60b21b6064820152608401610995565b611ff6565b81611ff6576001600160a01b0388165f9081526019602052604090205460ff16158015611f9857506001600160a01b0389165f9081526019602052604090205460ff16155b15611ff657600e54611fa98961128d565b611fb39089612e62565b1115611ff65760405162461bcd60e51b81526020600482015260126024820152714d61782077616c6c6574206578636565642160701b6044820152606401610995565b60255460ff161561200b5761200b888a612421565b6001600160a01b0389165f9081526018602052604090205460ff1615801561204b57506001600160a01b0388165f9081526018602052604090205460ff16155b80156120615750600754600160a01b900460ff16155b801561208557506001600160a01b0389165f9081526026602052604090205460ff16155b156120e9575f6120943061128d565b600d549091508110156120a56124b5565b80156120ae5750805b80156120b8575082155b156120e6576007805460ff60a01b1916600160a01b1790556120d86124cf565b6007805460ff60a01b191690555b50505b6120f6898984868b6126f7565b505050505050505050565b6001600160a01b0383166121275760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b03821661214d5760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b0383165f90815260208190526040902054818110156121c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610995565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906121fa908490612e62565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224691815260200190565b60405180910390a3611c56565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602660205260409020805460ff191682151517905561167b828261143f565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061230457612304612f14565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561235b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237f9190612c2b565b8160018151811061239257612392612f14565b6001600160a01b0392831660209182029290920101526006546123b89130911684611ac1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906123f09085905f90869030904290600401612f28565b5f604051808303815f87803b158015612407575f80fd5b505af1158015612419573d5f803e3d5ffd5b505050505050565b6001600160a01b0381165f9081526026602052604090205460ff161561247e576001600160a01b0382165f908152601b6020526040812054900361247a576001600160a01b0382165f908152601b602052604090204290555b5050565b600754600160a01b900460ff1661247a57601a805462010000600160b01b031916620100006001600160a01b038416021790555050565b5f806124bf610b0e565b116124c957505f90565b50600190565b5f6124d93061128d565b90505f6017546016546015546124ef9190612e62565b6124f99190612e62565b9050811580612506575080155b1561250f575050565b600d5482111561251f57600d5491505b5f600282601554856125319190612e2c565b61253b9190612e43565b6125459190612e43565b90505f6125528483612869565b90504761255e826122d1565b5f6125694783612869565b90505f61258b8661258560165485611aaf90919063ffffffff16565b90612874565b90505f6125a78761258560175486611aaf90919063ffffffff16565b90505f816125b58486612f97565b6125bf9190612f97565b90505f871180156125cf57505f81115b15612622576125de878261287f565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f6015819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d805f811461267c576040519150601f19603f3d011682016040523d82523d5f602084013e612681565b606091505b505090508061268e575f80fd5b600a546040515f916001600160a01b03169085908381818185875af1925050503d805f81146126d8576040519150601f19603f3d011682016040523d82523d5f602084013e6126dd565b606091505b50509050806126ea575f80fd5b5050505050505050505050565b5f61270286866117a8565b6001600160a01b0387165f9081526018602052604090205490915060ff1615806127385761273187848861294a565b5050612862565b811561285457600f54601154851561276f57601354600f5461275a9190612e62565b915060135460115461276c9190612e62565b90505b861561279a57601454600f546127859190612e62565b91506014546011546127979190612e62565b90505b5f6127aa60646125858886611aaf565b905082601054826127bb9190612e2c565b6127c59190612e43565b60155f8282546127d59190612e62565b909155508390506127e68383612e2c565b6127f09190612e43565b60165f8282546128009190612e62565b909155505060125483906128149083612e2c565b61281e9190612e43565b60175f82825461282e9190612e62565b90915550508015612844576128448a3083612101565b61284e8187612f97565b95505050505b61285f878785612101565b50505b5050505050565b5f611aba8284612f97565b5f611aba8284612e43565b6006546128979030906001600160a01b031684611ac1565b6006546001600160a01b031663f305d7198230855f806128bf6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612925573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128629190612faa565b6001600160a01b0383166129705760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b0381166129965760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b038084165f9081526020819052604080822080548681039091559284168252812080548592906129ce908490612e62565b92505081905550816001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161224691815260200190565b5f60208284031215612a2a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a5c57858101830151858201604001528201612a40565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461128a575f80fd5b5f8060408385031215612aa1575f80fd5b8235612aac81612a7c565b946020939093013593505050565b5f60208284031215612aca575f80fd5b8135611aba81612a7c565b5f805f60608486031215612ae7575f80fd5b8335612af281612a7c565b92506020840135612b0281612a7c565b929592945050506040919091013590565b80358015158114610faf575f80fd5b5f805f60608486031215612b34575f80fd5b8335925060208401359150612b4b60408501612b13565b90509250925092565b5f8060408385031215612b65575f80fd5b8235612b7081612a7c565b9150612b7e60208401612b13565b90509250929050565b5f8060408385031215612b98575f80fd5b8235612ba381612a7c565b91506020830135612bb381612a7c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c0757607f821691505b602082108103612c2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c3b575f80fd5b8151611aba81612a7c565b80516001600160701b0381168114610faf575f80fd5b5f805f60608486031215612c6e575f80fd5b612c7784612c46565b9250612c8560208501612c46565b9150604084015163ffffffff81168114612c9d575f80fd5b809150509250925092565b805169ffffffffffffffffffff81168114610faf575f80fd5b5f805f805f60a08688031215612cd5575f80fd5b612cde86612ca8565b9450602086015193506040860151925060608601519150612d0160808701612ca8565b90509295509295909350565b5f60208284031215612d1d575f80fd5b815160ff81168114611aba575f80fd5b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612d7b57815f1904821115612d6157612d61612d2d565b80851615612d6e57918102915b93841c9390800290612d46565b509250929050565b5f82612d9157506001610a59565b81612d9d57505f610a59565b8160018114612db35760028114612dbd57612dd9565b6001915050610a59565b60ff841115612dce57612dce612d2d565b50506001821b610a59565b5060208310610133831016604e8410600b8410161715612dfc575081810a610a59565b612e068383612d41565b805f1904821115612e1957612e19612d2d565b029392505050565b5f611aba8383612d83565b8082028115828204841417610a5957610a59612d2d565b5f82612e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a5957610a59612d2d565b5f60208284031215612e85575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f765784516001600160a01b031683529383019391830191600101612f51565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610a5957610a59612d2d565b5f805f60608486031215612fbc575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cee80bd9fb90e30d97b6e8552c41b630084fddeb26f0792c8bd32df5185f315d64736f6c63430008140033

Deployed Bytecode Sourcemap

22622:17780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37367:112;;;;;;;;;;-1:-1:-1;37367:112:0;;;;;:::i;:::-;;:::i;:::-;;22953:36;;;;;;;;;;;;;;;;;;;345:25:1;;;333:2;318:18;22953:36:0;;;;;;;;13789:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14862:242::-;;;;;;;;;;-1:-1:-1;14862:242:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;14862:242:0;1390:187:1;23633:52:0;;;;;;;;;;-1:-1:-1;23633:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;39833:174;;;;;;;;;;;;;:::i;22881:25::-;;;;;;;;;;-1:-1:-1;22881:25:0;;;;-1:-1:-1;;;;;22881:25:0;;;;;;-1:-1:-1;;;;;1998:32:1;;;1980:51;;1968:2;1953:18;22881:25:0;1834:203:1;14110:108:0;;;;;;;;;;-1:-1:-1;14198:12:0;;14110:108;;23870:47;;;;;;;;;;;;;;;;23692:35;;;;;;;;;;;;;;;;24015:71;;;;;;;;;;-1:-1:-1;24015:71:0;;;;-1:-1:-1;;;;;24015:71:0;;;15110:295;;;;;;;;;;-1:-1:-1;15110:295:0;;;;;:::i;:::-;;:::i;24191:53::-;;;;;;;;;;-1:-1:-1;24191:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23561:34;;;;;;;;;;-1:-1:-1;23561:34:0;;;;;;;;;;;29257:813;;;;;;;;;;;;;:::i;23773:44::-;;;;;;;;;;;;;;;;23734:32;;;;;;;;;;-1:-1:-1;23734:32:0;;;;;;;;22996:34;;;;;;;;;;;;;;;;14009:93;;;;;;;;;;-1:-1:-1;14009:93:0;;14092:2;2645:36:1;;2633:2;2618:18;14009:93:0;2503:184:1;28391:492:0;;;;;;;;;;-1:-1:-1;28391:492:0;;;;;:::i;:::-;;:::i;15413:270::-;;;;;;;;;;-1:-1:-1;15413:270:0;;;;;:::i;:::-;;:::i;38792:1029::-;;;;;;;;;;-1:-1:-1;38792:1029:0;;;;;:::i;:::-;;:::i;34126:123::-;;;;;;;;;;-1:-1:-1;34126:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;34216:25:0;34192:4;34216:25;;;:16;:25;;;;;;;;;34126:123;22700:42;;;;;;;;;;-1:-1:-1;22700:42:0;;;;-1:-1:-1;;;;;22700:42:0;;;37009:172;;;;;;;;;;;;;:::i;22913:33::-;;;;;;;;;;-1:-1:-1;22913:33:0;;;;-1:-1:-1;;;;;22913:33:0;;;14226:177;;;;;;;;;;-1:-1:-1;14226:177:0;;;;;:::i;:::-;;:::i;10333:103::-;;;;;;;;;;;;;:::i;37491:553::-;;;;;;;;;;-1:-1:-1;37491:553:0;;;;;:::i;:::-;;:::i;27117:122::-;;;;;;;;;;;;;:::i;28891:167::-;;;;;;;;;;-1:-1:-1;28891:167:0;;;;;:::i;:::-;;:::i;40015:176::-;;;;;;;;;;;;;:::i;23037:25::-;;;;;;;;;;;;;;;;10110:87;;;;;;;;;;-1:-1:-1;10183:6:0;;-1:-1:-1;;;;;10183:6:0;10110:87;;13897:104;;;;;;;;;;;;;:::i;22843:31::-;;;;;;;;;;-1:-1:-1;22843:31:0;;;;-1:-1:-1;;;;;22843:31:0;;;27249:499;;;;;;;;;;;;;:::i;:::-;;;;3995:22:1;4044:15;;;4026:34;;4091:2;4076:18;;4069:34;;;;4119:18;;4112:34;;;;4177:2;4162:18;;4155:34;4226:15;;;4220:3;4205:19;;4198:44;3972:3;3957:19;27249:499:0;3732:516:1;26817:292:0;;;;;;;;;;-1:-1:-1;26817:292:0;;;;;:::i;:::-;;:::i;23924:35::-;;;;;;;;;;;;;;;;15691:505;;;;;;;;;;-1:-1:-1;15691:505:0;;;;;:::i;:::-;;:::i;36779:222::-;;;;;;;;;;;;;:::i;23834:29::-;;;;;;;;;;;;;;;;14411:234;;;;;;;;;;-1:-1:-1;14411:234:0;;;;;:::i;:::-;;:::i;37189:80::-;;;;;;;;;;;;;:::i;22749:20::-;;;;;;;;;;-1:-1:-1;22749:20:0;;;;-1:-1:-1;;;;;22749:20:0;;;27756:627;;;;;;;;;;-1:-1:-1;27756:627:0;;;;;:::i;:::-;;:::i;37277:82::-;;;;;;;;;;;;;:::i;29066:179::-;;;;;;;;;;-1:-1:-1;29066:179:0;;;;;:::i;:::-;;:::i;26447:124::-;;;;;;;;;;;;;:::i;14653:201::-;;;;;;;;;;-1:-1:-1;14653:201:0;;;;;:::i;:::-;;:::i;23520:34::-;;;;;;;;;;-1:-1:-1;23520:34:0;;;;;;;;10444:238;;;;;;;;;;-1:-1:-1;10444:238:0;;;;;:::i;:::-;;:::i;23071:25::-;;;;;;;;;;;;;;;;40199:155;;;;;;;;;;-1:-1:-1;40199:155:0;;;;;:::i;:::-;;:::i;37367:112::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;;;;;;;;;37455:15:::1;:3:::0;37463:6:::1;37455:7;:15::i;:::-;37431:14;:40:::0;-1:-1:-1;37367:112:0:o;13789:100::-;13843:13;13876:5;13869:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13789:100;:::o;14862:242::-;14981:4;9711:10;15042:32;9711:10;15058:7;15067:6;15042:8;:32::i;:::-;15092:4;15085:11;;;14862:242;;;;;:::o;39833:174::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;39901:19:::1;::::0;::::1;;:28;39893:69;;;::::0;-1:-1:-1;;;39893:69:0;;5594:2:1;39893:69:0::1;::::0;::::1;5576:21:1::0;5633:2;5613:18;;;5606:30;5672;5652:18;;;5645:58;5720:18;;39893:69:0::1;5392:352:1::0;39893:69:0::1;39973:19;:26:::0;;-1:-1:-1;;39973:26:0::1;39995:4;39973:26;::::0;;39833:174::o;15110:295::-;15241:4;9711:10;15299:38;15315:4;9711:10;15330:6;15299:15;:38::i;:::-;15348:27;15358:4;15364:2;15368:6;15348:9;:27::i;:::-;-1:-1:-1;15393:4:0;;15110:295;-1:-1:-1;;;;15110:295:0:o;29257:813::-;29307:7;29327:21;29381:5;;;;;;;;;-1:-1:-1;;;;;29381:5:0;-1:-1:-1;;;;;29366:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29436:10;;29327:70;;-1:-1:-1;29408:15:0;;29426:21;;-1:-1:-1;;;;;29436:10:0;29426:9;:21::i;:::-;29408:39;;29458:21;29512:5;;;;;;;;;-1:-1:-1;;;;;29512:5:0;-1:-1:-1;;;;;29497:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29591:15;;29579:8;;;;;-1:-1:-1;;;;;29579:8:0;29561:27;;;;:17;:27;;;;;;29458:70;;-1:-1:-1;;29561:61:0;;;;-1:-1:-1;29610:12:0;;29561:61;29539:94;;;;;;29645:16;29663;29700:5;;;;;;;;;-1:-1:-1;;;;;29700:5:0;-1:-1:-1;;;;;29685:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29749:14:0;;29778:19;;29644:76;;-1:-1:-1;29644:76:0;;-1:-1:-1;29749:14:0;29778:19;;29774:93;;;29835:4;-1:-1:-1;;;;;29835:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29814:41:0;;-1:-1:-1;;;;29774:93:0;29877:16;29981:6;-1:-1:-1;;;;;29981:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29973:26;;29950:6;-1:-1:-1;;;;;29950:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29938:30;;29942:26;;29938:2;:30;:::i;:::-;29897:37;29925:8;-1:-1:-1;;;;;29897:17:0;;:37;:::i;:::-;:72;;;;:::i;:::-;29896:103;;;;:::i;:::-;29877:122;-1:-1:-1;30010:9:0;30023:28;-1:-1:-1;;;;;30034:17:0;;29877:122;30023:28;:::i;:::-;30010:42;29257:813;-1:-1:-1;;;;;;;;;29257:813:0:o;28391:492::-;10183:6;;28493:4;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;28572:6:::1;28551:13;14198:12:::0;;;14110:108;28551:13:::1;:17;::::0;28567:1:::1;28551:17;:::i;:::-;28550:28;;;;:::i;:::-;28537:9;:41;;28515:144;;;::::0;-1:-1:-1;;;28515:144:0;;9696:2:1;28515:144:0::1;::::0;::::1;9678:21:1::0;9735:2;9715:18;;;9708:30;9774:34;9754:18;;;9747:62;-1:-1:-1;;;9825:18:1;;;9818:51;9886:19;;28515:144:0::1;9494:417:1::0;28515:144:0::1;28727:4;28706:13;14198:12:::0;;;14110:108;28706:13:::1;:17;::::0;28722:1:::1;28706:17;:::i;:::-;28705:26;;;;:::i;:::-;28692:9;:39;;28670:141;;;::::0;-1:-1:-1;;;28670:141:0;;10118:2:1;28670:141:0::1;::::0;::::1;10100:21:1::0;10157:2;10137:18;;;10130:30;10196:34;10176:18;;;10169:62;-1:-1:-1;;;10247:18:1;;;10240:50;10307:19;;28670:141:0::1;9916:416:1::0;28670:141:0::1;-1:-1:-1::0;28822:19:0::1;:31:::0;;;28871:4:::1;10316:1;28391:492:::0;;;:::o;15413:270::-;15528:4;9711:10;15589:64;9711:10;15605:7;15642:10;15614:25;9711:10;15605:7;15614:9;:25::i;:::-;:38;;;;:::i;:::-;15589:8;:64::i;38792:1029::-;10183:6;;38895:4;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;38980:19:::1;;38957:20;;:42;;;;:::i;:::-;38939:15;:60;38917:142;;;::::0;-1:-1:-1;;;38917:142:0;;10669:2:1;38917:142:0::1;::::0;::::1;10651:21:1::0;;;10688:18;;;10681:30;10747:34;10727:18;;;10720:62;10799:18;;38917:142:0::1;10467:356:1::0;38917:142:0::1;39089:4;39078:7;:15;;39070:70;;;::::0;-1:-1:-1;;;39070:70:0;;11030:2:1;39070:70:0::1;::::0;::::1;11012:21:1::0;11069:2;11049:18;;;11042:30;11108:34;11088:18;;;11081:62;-1:-1:-1;;;11159:18:1;;;11152:40;11209:19;;39070:70:0::1;10828:406:1::0;39070:70:0::1;39174:15;39151:20;:38:::0;39290:5:::1;::::0;39275:21:::1;::::0;-1:-1:-1;;;39275:21:0;;-1:-1:-1;;;;;39290:5:0;;::::1;39275:21;::::0;::::1;1980:51:1::0;39244:28:0::1;::::0;39275:4:::1;::::0;:14:::1;::::0;1953:18:1;;39275:21:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39244:52;;39346:20;39411:5;39392:16;;39369:20;:39;;;;:::i;:::-;:47;;;;:::i;:::-;39346:70:::0;-1:-1:-1;39523:16:0;;39519:102:::1;;39572:5;::::0;39556:53:::1;::::0;-1:-1:-1;;;;;39572:5:0::1;39587:6;39596:12:::0;39556:15:::1;:53::i;:::-;39733:5;::::0;39750:11:::1;::::0;;-1:-1:-1;;;;;;39750:11:0;;;;-1:-1:-1;;;;;39733:5:0;;::::1;::::0;;;39750:9:::1;::::0;:11:::1;::::0;;::::1;::::0;39696:19:::1;::::0;39750:11;;;;;;;39696:19;39733:5;39750:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39777:14:0::1;::::0;::::1;::::0;-1:-1:-1;39777:14:0;;-1:-1:-1;39777:14:0::1;-1:-1:-1::0;39809:4:0::1;::::0;38792:1029;-1:-1:-1;;;;38792:1029:0:o;37009:172::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37089:16:::1;::::0;37081:65:::1;::::0;37064:12:::1;::::0;-1:-1:-1;;;;;37089:16:0::1;::::0;37120:21:::1;::::0;37064:12;37081:65;37064:12;37081:65;37120:21;37089:16;37081:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37063:83;;;37165:7;37157:16;;;::::0;::::1;;37052:129;37009:172::o:0;14226:177::-;-1:-1:-1;;;;;14377:18:0;14345:7;14377:18;;;;;;;;;;;;14226:177::o;10333:103::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;10398:30:::1;10425:1;10398:18;:30::i;:::-;10333:103::o:0;37491:553::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37693:2:::1;37670:19;:25;;37648:125;;;::::0;-1:-1:-1;;;37648:125:0;;11840:2:1;37648:125:0::1;::::0;::::1;11822:21:1::0;11879:2;11859:18;;;11852:30;11918:34;11898:18;;;11891:62;-1:-1:-1;;;11969:18:1;;;11962:48;12027:19;;37648:125:0::1;11638:414:1::0;37648:125:0::1;37818:4;37806:8;:16;;:33;;;;-1:-1:-1::0;37826:13:0;37806:33:::1;37784:131;;;::::0;-1:-1:-1;;;37784:131:0;;12259:2:1;37784:131:0::1;::::0;::::1;12241:21:1::0;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;-1:-1:-1;;;12388:18:1;;;12381:46;12444:19;;37784:131:0::1;12057:412:1::0;37784:131:0::1;37926:15;:37:::0;;;;37974:16:::1;:27:::0;38012:13:::1;:24:::0;;-1:-1:-1;;38012:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37491:553::o;27117:122::-;10183:6;;27169:4;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;27186:15:0::1;:23:::0;;-1:-1:-1;;27186:23:0::1;::::0;;;27117:122;:::o;28891:167::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29004:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;29004:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28891:167::o;40015:176::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;40084:19:::1;::::0;::::1;;:27;;:19:::0;:27:::1;40076:69;;;::::0;-1:-1:-1;;;40076:69:0;;12676:2:1;40076:69:0::1;::::0;::::1;12658:21:1::0;12715:2;12695:18;;;12688:30;12754:31;12734:18;;;12727:59;12803:18;;40076:69:0::1;12474:353:1::0;40076:69:0::1;40156:19;:27:::0;;-1:-1:-1;;40156:27:0::1;::::0;;40015:176::o;13897:104::-;13953:13;13986:7;13979:14;;;;;:::i;27249:499::-;27338:6;27359;27380:7;27402;27424:6;27473:15;27503:13;27531:18;27564:17;27596:23;27633:10;;;;;;;;;-1:-1:-1;;;;;27633:10:0;-1:-1:-1;;;;;27633:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27458:203;;;;-1:-1:-1;27458:203:0;;-1:-1:-1;27458:203:0;-1:-1:-1;27458:203:0;;-1:-1:-1;27249:499:0;-1:-1:-1;;;;;;27249:499:0:o;26817:292::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;26926:5:::1;::::0;-1:-1:-1;;;;;26926:5:0;;::::1;26918:13:::0;;::::1;::::0;26910:83:::1;;;::::0;-1:-1:-1;;;26910:83:0;;13034:2:1;26910:83:0::1;::::0;::::1;13016:21:1::0;13073:2;13053:18;;;13046:30;13112:34;13092:18;;;13085:62;13183:27;13163:18;;;13156:55;13228:19;;26910:83:0::1;12832:421:1::0;26910:83:0::1;27004:41;27033:4;27039:5;27004:28;:41::i;:::-;27061:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;27061:40:0;::::1;::::0;::::1;::::0;;;::::1;26817:292:::0;;:::o;15691:505::-;15811:4;9711:10;15811:4;15899:25;9711:10;15916:7;15899:9;:25::i;:::-;15872:52;;15977:15;15957:16;:35;;15935:122;;;;-1:-1:-1;;;15935:122:0;;13460:2:1;15935:122:0;;;13442:21:1;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;-1:-1:-1;;;13589:18:1;;;13582:35;13634:19;;15935:122:0;13258:401:1;15935:122:0;16093:60;16102:5;16109:7;16137:15;16118:16;:34;16093:8;:60::i;36779:222::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;36833:37:::1;36845:24;36863:4;36845:9;:24::i;:::-;36833:11;:37::i;14411:234::-:0;14526:4;9711:10;14587:28;9711:10;14604:2;14608:6;14587:9;:28::i;37189:80::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37260:1:::1;37245:12;:16:::0;37189:80::o;27756:627::-;27872:5;;27830:4;;;;-1:-1:-1;;;;;27861:16:0;;;27872:5;;27861:16;:58;;;;-1:-1:-1;27902:16:0;;-1:-1:-1;;;;;27881:38:0;;;27902:16;;27881:38;;27861:58;-1:-1:-1;;;;;27955:27:0;;27930:22;27955:27;;;:16;:27;;;;;;27847:72;;-1:-1:-1;27955:27:0;;27847:72;27997:27;;;;;28007:17;27997:27;27993:66;;;28044:15;28026;:33;27993:66;-1:-1:-1;;;;;28095:25:0;;28070:22;28095:25;;;:16;:25;;;;;;;;;:56;;-1:-1:-1;;;;;;28124:27:0;;;;;;:16;:27;;;;;;;;28095:56;28190:5;;28070:81;;-1:-1:-1;;;;;;28177:18:0;;;28190:5;;28177:18;28162:12;28223:6;;:17;;;28233:7;28223:17;28207:33;;28287:1;28274:10;;:14;:41;;;;-1:-1:-1;28306:9:0;;-1:-1:-1;;;28306:9:0;;;;28305:10;28274:41;:76;;;;;28333:17;28332:18;28274:76;:101;;;;;28367:8;28274:101;28253:122;27756:627;-1:-1:-1;;;;;;;;27756:627:0:o;37277:82::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37350:1:::1;37334:13;:17:::0;37277:82::o;29066:179::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29151:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:36;;-1:-1:-1;;29151:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29203:34;;1530:41:1;;;29203:34:0::1;::::0;1503:18:1;29203:34:0::1;;;;;;;29066:179:::0;;:::o;26447:124::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;26498:14:::1;:21:::0;;-1:-1:-1;;26498:21:0::1;;;::::0;;26548:15:::1;26530;:33:::0;26447:124::o;14653:201::-;-1:-1:-1;;;;;14819:18:0;;;14787:7;14819:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14653:201::o;10444:238::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10547:22:0;::::1;10525:110;;;::::0;-1:-1:-1;;;10525:110:0;;13866:2:1;10525:110:0::1;::::0;::::1;13848:21:1::0;13905:2;13885:18;;;13878:30;13944:34;13924:18;;;13917:62;-1:-1:-1;;;13995:18:1;;;13988:36;14041:19;;10525:110:0::1;13664:402:1::0;10525:110:0::1;10646:28;10665:8;10646:18;:28::i;40199:155::-:0;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;40271:11:::1;:18:::0;;-1:-1:-1;;;;;40271:18:0;;::::1;-1:-1:-1::0;;;;;;40271:18:0;;::::1;::::0;::::1;::::0;;;40300:10:::1;:46:::0;;;;::::1;;::::0;;40199:155::o;2873:98::-;2931:7;2958:5;2962:1;2958;:5;:::i;:::-;2951:12;2873:98;-1:-1:-1;;;2873:98:0:o;17822:380::-;-1:-1:-1;;;;;17958:19:0;;17950:68;;;;-1:-1:-1;;;17950:68:0;;14273:2:1;17950:68:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:34;14331:18;;;14324:62;-1:-1:-1;;;14402:18:1;;;14395:34;14446:19;;17950:68:0;14071:400:1;17950:68:0;-1:-1:-1;;;;;18037:21:0;;18029:68;;;;-1:-1:-1;;;18029:68:0;;14678:2:1;18029:68:0;;;14660:21:1;14717:2;14697:18;;;14690:30;14756:34;14736:18;;;14729:62;-1:-1:-1;;;14807:18:1;;;14800:32;14849:19;;18029:68:0;14476:398:1;18029:68:0;-1:-1:-1;;;;;18110:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18162:32;;345:25:1;;;18162:32:0;;318:18:1;18162:32:0;;;;;;;17822:380;;;:::o;18210:502::-;18345:24;18372:25;18382:5;18389:7;18372:9;:25::i;:::-;18345:52;;-1:-1:-1;;18412:16:0;:37;18408:297;;18512:6;18492:16;:26;;18466:117;;;;-1:-1:-1;;;18466:117:0;;15081:2:1;18466:117:0;;;15063:21:1;15120:2;15100:18;;;15093:30;15159:31;15139:18;;;15132:59;15208:18;;18466:117:0;14879:353:1;18466:117:0;18627:51;18636:5;18643:7;18671:6;18652:16;:25;18627:8;:51::i;:::-;18334:378;18210:502;;;:::o;31588:2250::-;-1:-1:-1;;;;;31720:18:0;;31712:68;;;;-1:-1:-1;;;31712:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31799:16:0;;31791:64;;;;-1:-1:-1;;;31791:64:0;;;;;;;:::i;:::-;31870:6;31880:1;31870:11;31866:94;;31898:28;31914:4;31920:2;31924:1;31898:15;:28::i;:::-;31588:2250;;;:::o;31866:94::-;31970:17;31998:7;10183:6;;-1:-1:-1;;;;;10183:6:0;;10110:87;31998:7;-1:-1:-1;;;;;31990:15:0;:4;-1:-1:-1;;;;;31990:15:0;;:32;;;-1:-1:-1;10183:6:0;;-1:-1:-1;;;;;32009:13:0;;;10183:6;;32009:13;31990:32;31970:52;-1:-1:-1;32033:13:0;-1:-1:-1;;;;;32049:16:0;;;;:41;;-1:-1:-1;;;;;;32069:21:0;;32083:6;32069:21;32049:41;32033:57;;32101:13;32117:12;:24;;;;32133:8;32117:24;:37;;;-1:-1:-1;32145:9:0;;-1:-1:-1;;;32145:9:0;;;;32117:37;32188:5;;32101:53;;-1:-1:-1;32167:10:0;;-1:-1:-1;;;;;32180:13:0;;;32188:5;;32180:13;:53;;;;-1:-1:-1;;;;;;32198:35:0;;;;;;:31;:35;;;;;;;;32197:36;32180:53;32264:5;;32167:66;;-1:-1:-1;32244:11:0;;-1:-1:-1;;;;;32258:11:0;;;32264:5;;32258:11;:53;;;;-1:-1:-1;;;;;;32274:37:0;;;;;;:31;:37;;;;;;;;32273:38;32258:53;-1:-1:-1;;;;;32345:22:0;;32322:20;32345:22;;;:16;:22;;;;;;32244:67;;-1:-1:-1;32322:20:0;32345:22;;;:46;;-1:-1:-1;;;;;;32371:20:0;;;;;;:16;:20;;;;;;;;32345:46;32406:15;;32322:69;;-1:-1:-1;32406:15:0;;:28;;;;;32426:8;32425:9;32406:28;32402:849;;;32459:14;;;;;;;;:33;;;32477:15;32459:33;32451:68;;;;-1:-1:-1;;;32451:68:0;;16249:2:1;32451:68:0;;;16231:21:1;16288:2;16268:18;;;16261:30;-1:-1:-1;;;16307:18:1;;;16300:52;16369:18;;32451:68:0;16047:346:1;32451:68:0;32538:5;32534:706;;;32604:21;;32594:6;:31;;32564:153;;;;-1:-1:-1;;;32564:153:0;;16600:2:1;32564:153:0;;;16582:21:1;16639:2;16619:18;;;16612:30;16678:34;16658:18;;;16651:62;-1:-1:-1;;;16729:18:1;;;16722:46;16785:19;;32564:153:0;16398:412:1;32564:153:0;32792:10;;32775:13;32785:2;32775:9;:13::i;:::-;32766:22;;:6;:22;:::i;:::-;:36;;32736:152;;;;-1:-1:-1;;;32736:152:0;;17017:2:1;32736:152:0;;;16999:21:1;17056:2;17036:18;;;17029:30;17095:34;17075:18;;;17068:62;-1:-1:-1;;;17146:18:1;;;17139:40;17196:19;;32736:152:0;16815:406:1;32736:152:0;32534:706;;;32914:6;32910:330;;-1:-1:-1;;;;;32967:35:0;;;;;;:31;:35;;;;;;;;32966:36;:95;;;;-1:-1:-1;;;;;;33024:37:0;;;;;;:31;:37;;;;;;;;33023:38;32966:95;32944:296;;;33152:10;;33135:13;33145:2;33135:9;:13::i;:::-;33126:22;;:6;:22;:::i;:::-;:36;;33096:128;;;;-1:-1:-1;;;33096:128:0;;17428:2:1;33096:128:0;;;17410:21:1;17467:2;17447:18;;;17440:30;-1:-1:-1;;;17486:18:1;;;17479:48;17544:18;;33096:128:0;17226:342:1;33096:128:0;33265:19;;;;33261:51;;;33286:26;33303:2;33307:4;33286:16;:26::i;:::-;-1:-1:-1;;;;;33329:22:0;;;;;;:16;:22;;;;;;;;33328:23;:48;;;;-1:-1:-1;;;;;;33356:20:0;;;;;;:16;:20;;;;;;;;33355:21;33328:48;:62;;;;-1:-1:-1;33381:9:0;;-1:-1:-1;;;33381:9:0;;;;33380:10;33328:62;:93;;;;-1:-1:-1;;;;;;33395:26:0;;;;;;:20;:26;;;;;;;;33394:27;33328:93;33323:447;;;33438:28;33469:24;33487:4;33469:9;:24::i;:::-;33547:19;;33438:55;;-1:-1:-1;33523:43:0;;;33585:17;:15;:17::i;:::-;:28;;;;;33606:7;33585:28;:48;;;;;33618:15;33617:16;33585:48;33581:178;;;33654:9;:16;;-1:-1:-1;;;;33654:16:0;-1:-1:-1;;;33654:16:0;;;33689:18;:16;:18::i;:::-;33726:9;:17;;-1:-1:-1;;;;33726:17:0;;;33581:178;33423:347;;33323:447;33780:50;33798:4;33804:2;33808:6;33816:5;33823:6;33780:17;:50::i;:::-;31701:2137;;;;;;31588:2250;;;:::o;18985:708::-;-1:-1:-1;;;;;19116:18:0;;19108:68;;;;-1:-1:-1;;;19108:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19195:16:0;;19187:64;;;;-1:-1:-1;;;19187:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19337:15:0;;19315:19;19337:15;;;;;;;;;;;19385:21;;;;19363:109;;;;-1:-1:-1;;;19363:109:0;;17775:2:1;19363:109:0;;;17757:21:1;17814:2;17794:18;;;17787:30;17853:34;17833:18;;;17826:62;-1:-1:-1;;;17904:18:1;;;17897:36;17950:19;;19363:109:0;17573:402:1;19363:109:0;-1:-1:-1;;;;;19508:15:0;;;:9;:15;;;;;;;;;;;19526:20;;;19508:38;;19568:13;;;;;;;;:23;;19540:6;;19508:9;19568:23;;19540:6;;19568:23;:::i;:::-;;;;;;;;19624:2;-1:-1:-1;;;;;19609:26:0;19618:4;-1:-1:-1;;;;;19609:26:0;;19628:6;19609:26;;;;345:25:1;;333:2;318:18;;199:177;19609:26:0;;;;;;;;19648:37;31588:2250;10690:191;10783:6;;;-1:-1:-1;;;;;10800:17:0;;;-1:-1:-1;;;;;;10800:17:0;;;;;;;10833:40;;10783:6;;;10800:17;10783:6;;10833:40;;10764:16;;10833:40;10753:128;10690:191;:::o;26579:230::-;-1:-1:-1;;;;;26662:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;26662:34:0;;;;;;;26707:38;26662:26;:34;26707:25;:38::i;36292:473::-;36377:16;;;36391:1;36377:16;;;;;;;;36353:21;;36377:16;;;;;;;;;;-1:-1:-1;36377:16:0;36353:40;;36422:4;36404;36409:1;36404:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36404:23:0;;;:7;;;;;;;;;;:23;;;;36448:16;;:23;;;-1:-1:-1;;;36448:23:0;;;;:16;;;;;:21;;:23;;;;;36404:7;;36448:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36438:4;36443:1;36438:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36438:33:0;;;:7;;;;;;;;;:33;36516:16;;36484:63;;36501:4;;36516:16;36535:11;36484:8;:63::i;:::-;36560:16;;:197;;-1:-1:-1;;;36560:197:0;;-1:-1:-1;;;;;36560:16:0;;;;:67;;:197;;36642:11;;36560:16;;36684:4;;36711;;36731:15;;36560:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36342:423;36292:473;:::o;33846:272::-;-1:-1:-1;;;;;33921:26:0;;;;;;:20;:26;;;;;;;;33917:194;;;-1:-1:-1;;;;;33968:21:0;;;;;;:17;:21;;;;;;:26;;33964:71;;-1:-1:-1;;;;;33996:21:0;;;;;;:17;:21;;;;;34020:15;33996:39;;33964:71;33846:272;;:::o;33917:194::-;34073:9;;-1:-1:-1;;;34073:9:0;;;;34068:31;;34084:8;:15;;-1:-1:-1;;;;;;34084:15:0;;-1:-1:-1;;;;;34084:15:0;;;;;;33846:272;;:::o;30078:120::-;30128:4;30174:1;30152:19;:17;:19::i;:::-;:23;:38;;-1:-1:-1;30185:5:0;;30078:120::o;30152:38::-;-1:-1:-1;30178:4:0;;30078:120::o;34263:1646::-;34310:23;34336:24;34354:4;34336:9;:24::i;:::-;34310:50;;34371:23;34435:10;;34416:16;;34397;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;34371:74;-1:-1:-1;34460:20:0;;;:44;;-1:-1:-1;34484:20:0;;34460:44;34456:57;;;34506:7;;34263:1646::o;34456:57::-;34545:19;;34527:15;:37;34523:107;;;34599:19;;34581:37;;34523:107;34640:23;34723:1;34705:15;34685:16;;34667:15;:34;;;;:::i;:::-;34666:54;;;;:::i;:::-;:58;;;;:::i;:::-;34640:84;-1:-1:-1;34735:26:0;34764:36;:15;34640:84;34764:19;:36::i;:::-;34735:65;-1:-1:-1;34839:21:0;34871:31;34735:65;34871:11;:31::i;:::-;34913:18;34934:44;:21;34960:17;34934:25;:44::i;:::-;34913:65;;34989:23;35015:53;35052:15;35015:32;35030:16;;35015:10;:14;;:32;;;;:::i;:::-;:36;;:53::i;:::-;34989:79;;35079:25;35107:47;35138:15;35107:26;35122:10;;35107;:14;;:26;;;;:::i;:47::-;35079:75;-1:-1:-1;35165:23:0;35079:75;35191:28;35204:15;35191:10;:28;:::i;:::-;:48;;;;:::i;:::-;35165:74;;35274:1;35256:15;:19;:42;;;;;35297:1;35279:15;:19;35256:42;35252:277;;;35315:47;35329:15;35346;35315:13;:47::i;:::-;35486:16;;35382:135;;;19564:25:1;;;19620:2;19605:18;;19598:34;;;19648:18;;;19641:34;;;;35382:135:0;;;;;;19552:2:1;35382:135:0;;;35252:277;35560:1;35541:16;:20;;;35572:16;:20;;;35603:10;:14;;;35670:16;;35662:58;;-1:-1:-1;;;;;35670:16:0;;;;35700:15;;35560:1;35662:58;35560:1;35662:58;35700:15;35670:16;35662:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35630:90;;;35729:20;35721:29;;;;;;35813:10;;35805:54;;35772:27;;-1:-1:-1;;;;;35813:10:0;;35837:17;;35772:27;35805:54;35772:27;35805:54;35837:17;35813:10;35805:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35771:88;;;35868:22;35860:31;;;;;;34299:1610;;;;;;;;;;;34263:1646::o;30206:1374::-;30386:14;30403:32;30416:7;30425:9;30403:12;:32::i;:::-;-1:-1:-1;;;;;30471:25:0;;30448:19;30471:25;;;:16;:25;;;;;;30386:49;;-1:-1:-1;30471:25:0;;30470:26;;30509:1009;;30545:44;30561:7;30570;30579:9;30545:15;:44::i;:::-;30590:7;;;;30509:1009;30618:9;30614:904;;;30666:10;;30717:13;;30745:152;;;;30804:12;;30791:10;;:25;;;;:::i;:::-;30777:39;;30869:12;;30853:13;;:28;;;;:::i;:::-;30835:46;;30745:152;30915:8;30911:155;;;30971:13;;30958:10;;:26;;;;:::i;:::-;30944:40;;31037:13;;31021;;:29;;;;:::i;:::-;31003:47;;30911:155;31080:17;31100:33;31129:3;31100:24;:7;31112:11;31100;:24::i;:33::-;31080:53;;31198:11;31181:13;;31169:9;:25;;;;:::i;:::-;31168:41;;;;:::i;:::-;31148:16;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;31276:11:0;;-1:-1:-1;31245:27:0;31257:15;31245:9;:27;:::i;:::-;31244:43;;;;:::i;:::-;31224:16;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31329:7:0;;31340:11;;31317:19;;:9;:19;:::i;:::-;31316:35;;;;:::i;:::-;31302:10;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;31372:13:0;;31368:104;;31406:50;31422:7;31439:4;31446:9;31406:15;:50::i;:::-;31486:20;31497:9;31486:20;;:::i;:::-;;;30629:889;;;30614:904;31528:44;31544:7;31553:9;31564:7;31528:15;:44::i;:::-;30375:1205;;30206:1374;;;;;;:::o;2767:98::-;2825:7;2852:5;2856:1;2852;:5;:::i;2979:98::-;3037:7;3064:5;3068:1;3064;:5;:::i;35917:363::-;36031:16;;35999:63;;36016:4;;-1:-1:-1;;;;;36031:16:0;36050:11;35999:8;:63::i;:::-;36073:16;;-1:-1:-1;;;;;36073:16:0;:32;36113:9;36146:4;36166:11;36073:16;;36224:7;10183:6;;-1:-1:-1;;;;;10183:6:0;;10110:87;36224:7;36073:199;;;;;;-1:-1:-1;;;;;;36073:199:0;;;-1:-1:-1;;;;;20045:15:1;;;36073:199:0;;;20027:34:1;20077:18;;;20070:34;;;;20120:18;;;20113:34;;;;20163:18;;;20156:34;20227:15;;;20206:19;;;20199:44;36246:15:0;20259:19:1;;;20252:35;19961:19;;36073:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16204:604::-;-1:-1:-1;;;;;16335:18:0;;16327:68;;;;-1:-1:-1;;;16327:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16414:16:0;;16406:64;;;;-1:-1:-1;;;16406:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16558:15:0;;;16534:21;16558:15;;;;;;;;;;;;;16629:22;;;16611:40;;;16683:13;;;;;;;:23;;16645:6;;16534:21;16683:23;;16645:6;;16683:23;:::i;:::-;;;;;;;;16739:2;-1:-1:-1;;;;;16724:26:0;16733:4;-1:-1:-1;;;;;16724:26:0;;16743:6;16724:26;;;;345:25:1;;333:2;318:18;;199:177;14:180;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:548::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;665:3;850:1;845:2;836:6;825:9;821:22;817:31;810:42;920:2;913;909:7;904:2;896:6;892:15;888:29;877:9;873:45;869:54;861:62;;;;381:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:247::-;1641:6;1694:2;1682:9;1673:7;1669:23;1665:32;1662:52;;;1710:1;1707;1700:12;1662:52;1749:9;1736:23;1768:31;1793:5;1768:31;:::i;2042:456::-;2119:6;2127;2135;2188:2;2176:9;2167:7;2163:23;2159:32;2156:52;;;2204:1;2201;2194:12;2156:52;2243:9;2230:23;2262:31;2287:5;2262:31;:::i;:::-;2312:5;-1:-1:-1;2369:2:1;2354:18;;2341:32;2382:33;2341:32;2382:33;:::i;:::-;2042:456;;2434:7;;-1:-1:-1;;;2488:2:1;2473:18;;;;2460:32;;2042:456::o;2926:160::-;2991:20;;3047:13;;3040:21;3030:32;;3020:60;;3076:1;3073;3066:12;3091:316;3165:6;3173;3181;3234:2;3222:9;3213:7;3209:23;3205:32;3202:52;;;3250:1;3247;3240:12;3202:52;3286:9;3273:23;3263:33;;3343:2;3332:9;3328:18;3315:32;3305:42;;3366:35;3397:2;3386:9;3382:18;3366:35;:::i;:::-;3356:45;;3091:316;;;;;:::o;3412:315::-;3477:6;3485;3538:2;3526:9;3517:7;3513:23;3509:32;3506:52;;;3554:1;3551;3544:12;3506:52;3593:9;3580:23;3612:31;3637:5;3612:31;:::i;:::-;3662:5;-1:-1:-1;3686:35:1;3717:2;3702:18;;3686:35;:::i;:::-;3676:45;;3412:315;;;;;:::o;4253:388::-;4321:6;4329;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;4437:9;4424:23;4456:31;4481:5;4456:31;:::i;:::-;4506:5;-1:-1:-1;4563:2:1;4548:18;;4535:32;4576:33;4535:32;4576:33;:::i;:::-;4628:7;4618:17;;;4253:388;;;;;:::o;4646:356::-;4848:2;4830:21;;;4867:18;;;4860:30;4926:34;4921:2;4906:18;;4899:62;4993:2;4978:18;;4646:356::o;5007:380::-;5086:1;5082:12;;;;5129;;;5150:61;;5204:4;5196:6;5192:17;5182:27;;5150:61;5257:2;5249:6;5246:14;5226:18;5223:38;5220:161;;5303:10;5298:3;5294:20;5291:1;5284:31;5338:4;5335:1;5328:15;5366:4;5363:1;5356:15;5220:161;;5007:380;;;:::o;5749:251::-;5819:6;5872:2;5860:9;5851:7;5847:23;5843:32;5840:52;;;5888:1;5885;5878:12;5840:52;5920:9;5914:16;5939:31;5964:5;5939:31;:::i;6005:188::-;6084:13;;-1:-1:-1;;;;;6126:42:1;;6116:53;;6106:81;;6183:1;6180;6173:12;6198:450;6285:6;6293;6301;6354:2;6342:9;6333:7;6329:23;6325:32;6322:52;;;6370:1;6367;6360:12;6322:52;6393:40;6423:9;6393:40;:::i;:::-;6383:50;;6452:49;6497:2;6486:9;6482:18;6452:49;:::i;:::-;6442:59;;6544:2;6533:9;6529:18;6523:25;6588:10;6581:5;6577:22;6570:5;6567:33;6557:61;;6614:1;6611;6604:12;6557:61;6637:5;6627:15;;;6198:450;;;;;:::o;6653:179::-;6731:13;;6784:22;6773:34;;6763:45;;6753:73;;6822:1;6819;6812:12;6837:473;6940:6;6948;6956;6964;6972;7025:3;7013:9;7004:7;7000:23;6996:33;6993:53;;;7042:1;7039;7032:12;6993:53;7065:39;7094:9;7065:39;:::i;:::-;7055:49;;7144:2;7133:9;7129:18;7123:25;7113:35;;7188:2;7177:9;7173:18;7167:25;7157:35;;7232:2;7221:9;7217:18;7211:25;7201:35;;7255:49;7299:3;7288:9;7284:19;7255:49;:::i;:::-;7245:59;;6837:473;;;;;;;;:::o;7315:273::-;7383:6;7436:2;7424:9;7415:7;7411:23;7407:32;7404:52;;;7452:1;7449;7442:12;7404:52;7484:9;7478:16;7534:4;7527:5;7523:16;7516:5;7513:27;7503:55;;7554:1;7551;7544:12;7593:127;7654:10;7649:3;7645:20;7642:1;7635:31;7685:4;7682:1;7675:15;7709:4;7706:1;7699:15;7725:422;7814:1;7857:5;7814:1;7871:270;7892:7;7882:8;7879:21;7871:270;;;7951:4;7947:1;7943:6;7939:17;7933:4;7930:27;7927:53;;;7960:18;;:::i;:::-;8010:7;8000:8;7996:22;7993:55;;;8030:16;;;;7993:55;8109:22;;;;8069:15;;;;7871:270;;;7875:3;7725:422;;;;;:::o;8152:806::-;8201:5;8231:8;8221:80;;-1:-1:-1;8272:1:1;8286:5;;8221:80;8320:4;8310:76;;-1:-1:-1;8357:1:1;8371:5;;8310:76;8402:4;8420:1;8415:59;;;;8488:1;8483:130;;;;8395:218;;8415:59;8445:1;8436:10;;8459:5;;;8483:130;8520:3;8510:8;8507:17;8504:43;;;8527:18;;:::i;:::-;-1:-1:-1;;8583:1:1;8569:16;;8598:5;;8395:218;;8697:2;8687:8;8684:16;8678:3;8672:4;8669:13;8665:36;8659:2;8649:8;8646:16;8641:2;8635:4;8632:12;8628:35;8625:77;8622:159;;;-1:-1:-1;8734:19:1;;;8766:5;;8622:159;8813:34;8838:8;8832:4;8813:34;:::i;:::-;8883:6;8879:1;8875:6;8871:19;8862:7;8859:32;8856:58;;;8894:18;;:::i;:::-;8932:20;;8152:806;-1:-1:-1;;;8152:806:1:o;8963:131::-;9023:5;9052:36;9079:8;9073:4;9052:36;:::i;9099:168::-;9172:9;;;9203;;9220:15;;;9214:22;;9200:37;9190:71;;9241:18;;:::i;9272:217::-;9312:1;9338;9328:132;;9382:10;9377:3;9373:20;9370:1;9363:31;9417:4;9414:1;9407:15;9445:4;9442:1;9435:15;9328:132;-1:-1:-1;9474:9:1;;9272:217::o;10337:125::-;10402:9;;;10423:10;;;10420:36;;;10436:18;;:::i;11239:184::-;11309:6;11362:2;11350:9;11341:7;11337:23;11333:32;11330:52;;;11378:1;11375;11368:12;11330:52;-1:-1:-1;11401:16:1;;11239:184;-1:-1:-1;11239:184:1:o;15237:401::-;15439:2;15421:21;;;15478:2;15458:18;;;15451:30;15517:34;15512:2;15497:18;;15490:62;-1:-1:-1;;;15583:2:1;15568:18;;15561:35;15628:3;15613:19;;15237:401::o;15643:399::-;15845:2;15827:21;;;15884:2;15864:18;;;15857:30;15923:34;15918:2;15903:18;;15896:62;-1:-1:-1;;;15989:2:1;15974:18;;15967:33;16032:3;16017:19;;15643:399::o;18112:127::-;18173:10;18168:3;18164:20;18161:1;18154:31;18204:4;18201:1;18194:15;18228:4;18225:1;18218:15;18244:980;18506:4;18554:3;18543:9;18539:19;18585:6;18574:9;18567:25;18611:2;18649:6;18644:2;18633:9;18629:18;18622:34;18692:3;18687:2;18676:9;18672:18;18665:31;18716:6;18751;18745:13;18782:6;18774;18767:22;18820:3;18809:9;18805:19;18798:26;;18859:2;18851:6;18847:15;18833:29;;18880:1;18890:195;18904:6;18901:1;18898:13;18890:195;;;18969:13;;-1:-1:-1;;;;;18965:39:1;18953:52;;19060:15;;;;19025:12;;;;19001:1;18919:9;18890:195;;;-1:-1:-1;;;;;;;19141:32:1;;;;19136:2;19121:18;;19114:60;-1:-1:-1;;;19205:3:1;19190:19;19183:35;19102:3;18244:980;-1:-1:-1;;;18244:980:1:o;19229:128::-;19296:9;;;19317:11;;;19314:37;;;19331:18;;:::i;20298:306::-;20386:6;20394;20402;20455:2;20443:9;20434:7;20430:23;20426:32;20423:52;;;20471:1;20468;20461:12;20423:52;20500:9;20494:16;20484:26;;20550:2;20539:9;20535:18;20529:25;20519:35;;20594:2;20583:9;20579:18;20573:25;20563:35;;20298:306;;;;;:::o

Swarm Source

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