ETH Price: $2,641.85 (+1.51%)

Token

HODL (HODL)
 

Overview

Max Total Supply

1,000,000,000 HODL

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,485,970.145476568335389865 HODL

Value
$0.00
0x4b5f8ebc4822029d2d4ae0dca42be5b80fd5b00c
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:
HODL

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-19
*/

/**
*
$HODL is a movement that aims to turn every 'jeet' into a HODLER. We'll eliminate the jeets and move forward. To usher in this new era, we'll use a smart contract designed to reward holders.

🔛How It Works:

TOTAL TAX : 4% Tax: Every time someone buys or sells $HODL, we take a small fee.
➡️3% Rewards: We share most of this fee in eth (3%) with everyone who holds $HODL.
➡️1% Development: We use the rest (1%) to make $HODL even better.

So, holding $HODL is like having a magic toy that gives you more toys the longer you keep it!

✅Website: https://hodl.cfd/
✖️Twiitter: https://x.com/JustHodl_eth
✈️Telegram: https://t.me/justhodl_eth

*/

pragma solidity 0.8.19;

// SPDX-License-Identifier: Unlicensed

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 IERC20 {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

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

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

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

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

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

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;

    address distributorOwner;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10**15);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token || msg.sender == distributorOwner);
        _;
    }

    constructor(address _distributorOwner) {
        _token = msg.sender;
        distributorOwner = _distributorOwner;
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        totalDividends = totalDividends.add(msg.value);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            // RewardToken.transfer(shareholder, amount);
            payable(shareholder).transfer(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend(address shareholder) external onlyToken {
        distributeDividend(shareholder);
    }

    function changeOwner(address newOwner) external onlyToken {
        distributorOwner = newOwner;
    }

    function rescueDividends(uint256 amountPercentage) external onlyToken {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract HODL is IERC20, Ownable {
    using SafeMath for uint256;

    string constant _name = "HODL";
    string constant _symbol = "HODL";
    uint8 constant _decimals = 18;

    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public autoLiquidityReceiver;
    address public marketingWallet;

    uint256 _totalSupply = 1_000_000_000 * (10**_decimals);
    uint256 public _maxTxAmount = (_totalSupply * 20) / 1000;
    uint256 public _walletMax = (_totalSupply * 20) / 1000;
    bool public restrictWhales = true;

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

    bool public tradingOpen = false;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    bool public takeBuyFee = true;
    bool public takeSellFee = true;
    bool public takeTransferFee = true;

    uint256 public liquidityFee = 10;
    uint256 public marketingFee = 30;
    uint256 public rewardsFee = 20;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    IDEXRouter public router;
    address public pair;
    mapping(address => bool) public isPair;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 750000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = (_totalSupply * 3) / 2000;

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

    event AutoLiquify(uint256 amountETH, uint256 amountToken);

    constructor() {
        autoLiquidityReceiver = msg.sender;
        marketingWallet = 0x805f968E7B22BE26acC962dF724074e17ce75F47;

        router = IDEXRouter(routerAddress);
        address pair_weth = IDEXFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        pair = pair_weth;
        isPair[pair] = true;

        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(msg.sender);

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[pair_weth] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[pair_weth] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(0xdead)] = true;
        isDividendExempt[address(0)] = true;

        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee;

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

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

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

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

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

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

    function allowance(address holder, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function checkPendingDividends(address account) external view returns (uint256) {
        return dividendDistributor.getUnpaidEarnings(account);
    }

    function claimDividend() external {
        dividendDistributor.claimDividend(msg.sender);
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender],
            "TX Limit Exceeded"
        );
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function setRestrictWhales(bool _status) external onlyOwner {
        restrictWhales = _status;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (!isFeeExempt[sender]) {
            require(tradingOpen, "Trading not open yet");
        }

        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender] || !restrictWhales,
            "TX Limit Exceeded"
        );

        if (
            !isPair[sender] &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        if (!isTxLimitExempt[recipient] && restrictWhales) {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if (!isDividendExempt[sender]) {
            try
                dividendDistributor.setShare(sender, _balances[sender])
            {} catch {}
        }

        if (!isDividendExempt[recipient]) {
            try
                dividendDistributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);

        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = 0;

        if (isPair[recipient] && takeSellFee) {
            feeApplicable = totalFeeIfSelling;
        }
        if (isPair[sender] && takeBuyFee) {
            feeApplicable = totalFee;
        }
        if (!isPair[sender] && !isPair[recipient]) {
            if (takeTransferFee) {
                feeApplicable = totalFeeIfSelling;
            } else {
                feeApplicable = 0;
            }
        }

        uint256 feeAmount = amount.mul(feeApplicable).div(1000);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(
            totalETHFee
        );
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        try
            dividendDistributor.deposit{value: amountETHReflection}()
        {} catch {}

        (bool tmpSuccess, ) = payable(marketingWallet).call{
            value: amountETHMarketing,
            gas: 30000
        }("");

        tmpSuccess = false;

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function changeTakeBuyfee(bool status) public onlyOwner {
        takeBuyFee = status;
    }

    function changeTakeSellfee(bool status) public onlyOwner {
        takeSellFee = status;
    }

    function changeTakeTransferfee(bool status) public onlyOwner {
        takeTransferFee = status;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= 5, "Wallet Limit needs to be at least 0.5%");
        _walletMax = (_totalSupply * newLimit) / 1000;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= 5, "Wallet Limit needs to be at least 0.5%");
        _maxTxAmount = (_totalSupply * newLimit) / 1000;
    }

    function changeFees(
        uint256 newLiqFeeThou,
        uint256 newRewardFeeThou,
        uint256 newmarketingFee,
        uint256 extraSellFee
    ) external onlyOwner {
        liquidityFee = newLiqFeeThou;
        rewardsFee = newRewardFeeThou;
        marketingFee = newmarketingFee;

        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee + extraSellFee;
        require(
            totalFee + totalFeeIfSelling <= 700,
            "Token: Combined fees must be under %"
        );
    }

    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit,
        bool swapByLimitOnly
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = _totalSupply * newSwapBackLimit / 10000;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(
        uint256 newinPeriod,
        uint256 newMinDistribution
    ) external onlyOwner {
        dividendDistributor.setDistributionCriteria(
            newinPeriod,
            newMinDistribution
        );
    }

    function changeDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributorGas = gas;
    }

    function processDividends(uint256 gas) external onlyOwner {
        dividendDistributor.process(gas);
    }

    function setRouterAddress(address newRouter) public onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(newRouter);
        // Create a uniswap pair for this new token
        IDEXFactory _uniswapV2Factory = IDEXFactory(_uniswapV2Router.factory());
        address pairAddress = _uniswapV2Factory.getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        if (pairAddress == address(0)) {
            pairAddress = _uniswapV2Factory.createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        isPair[pairAddress] = true;
        isDividendExempt[pairAddress] = true;
        isTxLimitExempt[pairAddress] = true;

        router = _uniswapV2Router;
    }

    function changePair(address _address, bool status) public onlyOwner {
        isPair[_address] = status;
    }

    function changeIsFeeExempt(address holder, bool exempt) public onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt)
        public
        onlyOwner
    {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt)
        public
        onlyOwner
    {
        if (isPair[holder]) {
            exempt = true;
        }

        isDividendExempt[holder] = exempt;

        if (exempt) {
            dividendDistributor.setShare(holder, 0);
        } else {
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function addDapp(address target) public onlyOwner {
        changeIsDividendExempt(target, true);
        changeIsTxLimitExempt(target, true);
        changeIsFeeExempt(target, true);
    }

    function changeFeeReceivers(
        address newLiquidityReceiver,
        address newMarketingWallet
    ) external onlyOwner {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
    }

    function removeERC20(address tokenAddress, uint256 tokens)
        public
        onlyOwner
        returns (bool success)
    {
        require(tokenAddress != address(this), "Cant remove the native token");
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }

    function removeEther(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFeeThou","type":"uint256"},{"internalType":"uint256","name":"newRewardFeeThou","type":"uint256"},{"internalType":"uint256","name":"newmarketingFee","type":"uint256"},{"internalType":"uint256","name":"extraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeBuyfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeSellfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeTransferfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkPendingDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"removeERC20","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"removeEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"takeBuyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620000386012600a62000688565b6200004890633b9aca0062000699565b6004556103e860045460146200005f919062000699565b6200006b9190620006b3565b6005556103e8600454601462000082919062000699565b6200008e9190620006b3565b6006556007805460ff19908116600117909155600a80549091168155600e80546201010162ffffff19909116179055600f55601e601055601460115560006012819055601355620b71b06018556019805462ffff0019166101001790556004546107d090620000ff90600362000699565b6200010b9190620006b3565b601a553480156200011b57600080fd5b50620001273362000500565b600280546001600160a01b0319908116331790915560038054821673805f968e7b22be26acc962df724074e17ce75f47179055600154601480549092166001600160a01b03919091169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db9190620006d6565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002639190620006d6565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d69190620006d6565b601580546001600160a01b0319166001600160a01b038381169182179092556000908152601660209081526040808320805460ff1916600117905530835260098252808320601454909416835292905281902060001990555190915033906200033f9062000567565b6001600160a01b039091168152602001604051809103906000f0801580156200036c573d6000803e3d6000fd5b50601780546001600160a01b0319166001600160a01b03928316179055336000818152600b60209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600c8552838620805483168417905560158054891687528487208054841685179055898916808852858820805485168617905590549098168652600d909452828520805482168317905595845281842080548716821790559383528083208054861685179055908252812080548416831790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805484168317905580527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee8054909216179055601154601054600f54620004a692916200049f919062000550565b9062000550565b601281905560135560045433600081815260086020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200071e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200055e828462000708565b90505b92915050565b610c8e806200308483390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005cc578160001904821115620005b057620005b062000575565b80851615620005be57918102915b93841c939080029062000590565b509250929050565b600082620005e55750600162000561565b81620005f45750600062000561565b81600181146200060d5760028114620006185762000638565b600191505062000561565b60ff8411156200062c576200062c62000575565b50506001821b62000561565b5060208310610133831016604e8410600b84101617156200065d575081810a62000561565b6200066983836200058b565b806000190482111562000680576200068062000575565b029392505050565b60006200055e60ff841683620005d4565b808202811582820484141762000561576200056162000575565b600082620006d157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006e957600080fd5b81516001600160a01b03811681146200070157600080fd5b9392505050565b8082018082111562000561576200056162000575565b612956806200072e6000396000f3fe6080604052600436106103905760003560e01c8063787a051b116101dc578063a9f7864b11610102578063e5e31b13116100a0578063f2fde38b1161006f578063f2fde38b14610aa3578063f887ea4014610ac3578063fabe628314610ae3578063ffb54a9914610b0357600080fd5b8063e5e31b1314610a24578063f0ef821f14610a54578063f0fc6bca14610a6e578063f1d5f51714610a8357600080fd5b8063ca33e64c116100dc578063ca33e64c14610988578063ca987b0e146109a8578063da00097d146109be578063dd62ed3e146109de57600080fd5b8063a9f7864b14610928578063bad3ea6a14610948578063bb54c40e1461096857600080fd5b8063900d96111161017a578063a3a2e89e11610149578063a3a2e89e146108a8578063a5355989146108c8578063a8aa1b31146108e8578063a9059cbb1461090857600080fd5b8063900d96111461085257806395d89b41146103c557806398118cb4146108725780639fe9f4691461088857600080fd5b80638637b069116101b65780638637b069146107c4578063899420ed146107e45780638b42507f146108045780638da5cb5b1461083457600080fd5b8063787a051b146107785780637d1db4a514610798578063807c2d9c146107ae57600080fd5b806341cb87fc116102c15780636b67c4df1161025f578063715018a61161022e578063715018a6146106eb57806371bb96e71461070057806375f0a87414610720578063773fcb5c1461075857600080fd5b80636b67c4df1461066057806370540933146106765780637070c8981461069557806370a08231146106b557600080fd5b8063479f66d81161029b578063479f66d8146105e15780634a74bb02146106015780635c85974f14610620578063650c42261461064057600080fd5b806341cb87fc146105775780634355855a1461059757806344de2e4c146105c757600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce567146104eb57806334c7088914610507578063399c7976146105275780633f4218e01461054757600080fd5b806323b872dd1461049557806327b7ca5f146104b55780632bb14e1d146104d557600080fd5b80630d2959801161036a5780630d2959801461042857806318160ddd1461044a5780631df4ccfc1461045f5780631f2c80f11461047557600080fd5b80630445b6671461039c57806306fdde03146103c5578063095ea7b3146103f857600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601a5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b5060408051808201825260048152631213d11360e21b602082015290516103bc91906124fa565b34801561040457600080fd5b5061041861041336600461255d565b610b1d565b60405190151581526020016103bc565b34801561043457600080fd5b50610448610443366004612597565b610b8a565b005b34801561045657600080fd5b506004546103b2565b34801561046b57600080fd5b506103b260125481565b34801561048157600080fd5b506104486104903660046125b4565b610bd0565b3480156104a157600080fd5b506104186104b03660046125ed565b610c28565b3480156104c157600080fd5b506104486104d036600461262e565b610cea565b3480156104e157600080fd5b506103b260115481565b3480156104f757600080fd5b50604051601281526020016103bc565b34801561051357600080fd5b5061044861052236600461264b565b610d38565b34801561053357600080fd5b5061044861054236600461268d565b610db2565b34801561055357600080fd5b5061041861056236600461262e565b600b6020526000908152604090205460ff1681565b34801561058357600080fd5b5061044861059236600461262e565b610e07565b3480156105a357600080fd5b506104186105b236600461262e565b600d6020526000908152604090205460ff1681565b3480156105d357600080fd5b506007546104189060ff1681565b3480156105ed57600080fd5b506104486105fc3660046126bb565b6110dd565b34801561060d57600080fd5b5060195461041890610100900460ff1681565b34801561062c57600080fd5b5061044861063b3660046126bb565b61111b565b34801561064c57600080fd5b5061044861065b3660046126d4565b611187565b34801561066c57600080fd5b506103b260105481565b34801561068257600080fd5b50600e5461041890610100900460ff1681565b3480156106a157600080fd5b506104486106b0366004612597565b611259565b3480156106c157600080fd5b506103b26106d036600461262e565b6001600160a01b031660009081526008602052604090205490565b3480156106f757600080fd5b5061044861129f565b34801561070c57600080fd5b5061044861071b3660046126bb565b6112d5565b34801561072c57600080fd5b50600354610740906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561076457600080fd5b5061044861077336600461268d565b611363565b34801561078457600080fd5b506104486107933660046126bb565b611493565b3480156107a457600080fd5b506103b260055481565b3480156107ba57600080fd5b506103b260065481565b3480156107d057600080fd5b506104186107df36600461255d565b611505565b3480156107f057600080fd5b506104486107ff366004612597565b6115f9565b34801561081057600080fd5b5061041861081f36600461262e565b600c6020526000908152604090205460ff1681565b34801561084057600080fd5b506000546001600160a01b0316610740565b34801561085e57600080fd5b5061044861086d366004612597565b611636565b34801561087e57600080fd5b506103b2600f5481565b34801561089457600080fd5b506103b26108a336600461262e565b61167a565b3480156108b457600080fd5b506104486108c336600461268d565b6116e9565b3480156108d457600080fd5b50600e546104189062010000900460ff1681565b3480156108f457600080fd5b50601554610740906001600160a01b031681565b34801561091457600080fd5b5061041861092336600461255d565b61173e565b34801561093457600080fd5b50610448610943366004612706565b61174b565b34801561095457600080fd5b50601754610740906001600160a01b031681565b34801561097457600080fd5b50610448610983366004612597565b6117ad565b34801561099457600080fd5b50600254610740906001600160a01b031681565b3480156109b457600080fd5b506103b260135481565b3480156109ca57600080fd5b506019546104189062010000900460ff1681565b3480156109ea57600080fd5b506103b26109f93660046125b4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a3057600080fd5b50610418610a3f36600461262e565b60166020526000908152604090205460ff1681565b348015610a6057600080fd5b50600e546104189060ff1681565b348015610a7a57600080fd5b506104486117ea565b348015610a8f57600080fd5b50610448610a9e3660046126bb565b611843565b348015610aaf57600080fd5b50610448610abe36600461262e565b6118af565b348015610acf57600080fd5b50601454610740906001600160a01b031681565b348015610aef57600080fd5b50610448610afe36600461268d565b611947565b348015610b0f57600080fd5b50600a546104189060ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b789086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610bb490612728565b60405180910390fd5b600a805460ff1916911515919091179055565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610bb490612728565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610cd5576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610cb091849061199c565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610ce08484846119c8565b90505b9392505050565b6000546001600160a01b03163314610d145760405162461bcd60e51b8152600401610bb490612728565b610d1f816001611363565b610d2a816001611947565b610d358160016116e9565b50565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610bb490612728565b6019805461ff0019166101008515150217905560045461271090610d87908490612773565b610d91919061278a565b601a5560198054911515620100000262ff0000199092169190911790555050565b6000546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e315760405162461bcd60e51b8152600401610bb490612728565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9a91906127ac565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1091906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f91906127ac565b90506001600160a01b03811661107557816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107291906127ac565b90505b6001600160a01b0390811660009081526016602090815260408083208054600160ff199182168117909255600d84528285208054821683179055600c909352922080549091169091179055601480546001600160a01b03191693909116929092179091555050565b6000546001600160a01b031633146111075760405162461bcd60e51b8152600401610bb490612728565b620b71b0811061111657600080fd5b601855565b6000546001600160a01b031633146111455760405162461bcd60e51b8152600401610bb490612728565b60058110156111665760405162461bcd60e51b8152600401610bb4906127c9565b6103e8816004546111779190612773565b611181919061278a565b60055550565b6000546001600160a01b031633146111b15760405162461bcd60e51b8152600401610bb490612728565b600f849055601183905560108290556111d4836111ce8685611e65565b90611e65565b60128190556111e490829061280f565b60138190556012546102bc916111f99161280f565b11156112535760405162461bcd60e51b8152602060048201526024808201527f546f6b656e3a20436f6d62696e65642066656573206d75737420626520756e646044820152636572202560e01b6064820152608401610bb4565b50505050565b6000546001600160a01b031633146112835760405162461bcd60e51b8152600401610bb490612728565b600e8054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146112c95760405162461bcd60e51b8152600401610bb490612728565b6112d36000611e71565b565b6000546001600160a01b031633146112ff5760405162461bcd60e51b8152600401610bb490612728565b6017546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03821660009081526016602052604090205460ff16156113b2575060015b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561144a57601754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801561142e57600080fd5b505af1158015611442573d6000803e3d6000fd5b505050505050565b6017546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611414565b6000546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610bb490612728565b47336108fc60646114ce8585612773565b6114d8919061278a565b6040518115909202916000818181858888f19350505050158015611500573d6000803e3d6000fd5b505050565b600080546001600160a01b031633146115305760405162461bcd60e51b8152600401610bb490612728565b306001600160a01b038416036115885760405162461bcd60e51b815260206004820152601c60248201527f43616e742072656d6f766520746865206e617469766520746f6b656e000000006044820152606401610bb4565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce39190612822565b6000546001600160a01b031633146116235760405162461bcd60e51b8152600401610bb490612728565b6007805460ff1916911515919091179055565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610bb490612728565b600e80549115156101000261ff0019909216919091179055565b60175460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b84919061283f565b6000546001600160a01b031633146117135760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610ce33384846119c8565b6000546001600160a01b031633146117755760405162461bcd60e51b8152600401610bb490612728565b6017546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401611414565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610bb490612728565b600e805460ff1916911515919091179055565b601754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561182f57600080fd5b505af1158015611253573d6000803e3d6000fd5b6000546001600160a01b0316331461186d5760405162461bcd60e51b8152600401610bb490612728565b600581101561188e5760405162461bcd60e51b8152600401610bb4906127c9565b6103e88160045461189f9190612773565b6118a9919061278a565b60065550565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03811661193e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b610d3581611e71565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600081848411156119c05760405162461bcd60e51b8152600401610bb491906124fa565b505050900390565b60195460009060ff16156119e8576119e1848484611ec1565b9050610ce3565b6001600160a01b0384166000908152600b602052604090205460ff16611a5157600a5460ff16611a515760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bb4565b60055482111580611a7a57506001600160a01b0384166000908152600c602052604090205460ff165b80611a88575060075460ff16155b611ac85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bb4565b6001600160a01b03841660009081526016602052604090205460ff16158015611af4575060195460ff16155b8015611b075750601954610100900460ff165b8015611b245750601a543060009081526008602052604090205410155b15611b3157611b31611fa7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611b8391849061199c565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600c909152205460ff16158015611bc1575060075460ff165b15611bf7576006546001600160a01b038416600090815260086020526040902054611bec9084611e65565b1115611bf757600080fd5b6001600160a01b0384166000908152600b602052604081205460ff16158015611c3957506001600160a01b0384166000908152600b602052604090205460ff16155b611c435782611c4e565b611c4e858585612366565b6001600160a01b038516600090815260086020526040902054909150611c749082611e65565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600d909152205460ff16611d18576017546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d0557600080fd5b505af1925050508015611d16575060015b505b6001600160a01b0384166000908152600d602052604090205460ff16611da9576017546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d9657600080fd5b505af1925050508015611da7575060015b505b6017546018546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611de19160040190815260200190565b600060405180830381600087803b158015611dfb57600080fd5b505af1925050508015611e0c575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5291815260200190565b60405180910390a3506001949350505050565b6000610ce3828461280f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611f1291849061199c565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611f419083611e65565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f959086815260200190565b60405180910390a35060019392505050565b6019805460ff1916600117905530600090815260086020526040812054601254600f54919291611fe891600291611fe29190829087906124d6565b906124e2565b90506000611ff683836124ee565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061203057612030612858565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad91906127ac565b816001815181106120c0576120c0612858565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac9479061210690859060009086903090429060040161286e565b600060405180830381600087803b15801561212057600080fd5b505af1158015612134573d6000803e3d6000fd5b5050600f54479250600091506121589061214f9060026124e2565b601254906124ee565b9050600061217a6002611fe284611fe2600f54886124d690919063ffffffff16565b9050600061219783611fe2601154876124d690919063ffffffff16565b905060006121b484611fe2601054886124d690919063ffffffff16565b9050601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220657600080fd5b505af193505050508015612218575060015b506003546040516000916001600160a01b03169061753090849084818181858888f193505050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b506000925050891590506123505760145460025460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af11580156122ee573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061231391906128df565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff191690555050505050505050565b6001600160a01b038216600090815260166020526040812054819060ff1680156123975750600e54610100900460ff165b156123a157506013545b6001600160a01b03851660009081526016602052604090205460ff1680156123cb5750600e5460ff165b156123d557506012545b6001600160a01b03851660009081526016602052604090205460ff1615801561241757506001600160a01b03841660009081526016602052604090205460ff16155b1561243a57600e5462010000900460ff1615612436575060135461243a565b5060005b600061244c6103e8611fe286856124d6565b306000908152600860205260409020549091506124699082611e65565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124ba9085815260200190565b60405180910390a36124cc84826124ee565b9695505050505050565b6000610ce38284612773565b6000610ce3828461278a565b6000610ce3828461290d565b600060208083528351808285015260005b818110156125275785810183015185820160400152820161250b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3557600080fd5b6000806040838503121561257057600080fd5b823561257b81612548565b946020939093013593505050565b8015158114610d3557600080fd5b6000602082840312156125a957600080fd5b8135610ce381612589565b600080604083850312156125c757600080fd5b82356125d281612548565b915060208301356125e281612548565b809150509250929050565b60008060006060848603121561260257600080fd5b833561260d81612548565b9250602084013561261d81612548565b929592945050506040919091013590565b60006020828403121561264057600080fd5b8135610ce381612548565b60008060006060848603121561266057600080fd5b833561266b81612589565b925060208401359150604084013561268281612589565b809150509250925092565b600080604083850312156126a057600080fd5b82356126ab81612548565b915060208301356125e281612589565b6000602082840312156126cd57600080fd5b5035919050565b600080600080608085870312156126ea57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561271957600080fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8457610b8461275d565b6000826127a757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127be57600080fd5b8151610ce381612548565b60208082526026908201527f57616c6c6574204c696d6974206e6565647320746f206265206174206c6561736040820152657420302e352560d01b606082015260800190565b80820180821115610b8457610b8461275d565b60006020828403121561283457600080fd5b8151610ce381612589565b60006020828403121561285157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128be5784516001600160a01b031683529383019391830191600101612899565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128f457600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610b8457610b8461275d56fea2646970667358221220bc40e9d02735c5cb026b0c3916d80f6f88681f3f97e588e8940439b9df1cc1d864736f6c6343000813003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b5566038d7ea4c68000600c5534801561003457600080fd5b50604051610c8e380380610c8e83398101604081905261005391610086565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100b6565b60006020828403121561009857600080fd5b81516001600160a01b03811681146100af57600080fd5b9392505050565b610bc9806100c56000396000f3fe6080604052600436106100f35760003560e01c8063a6f9dae11161008a578063e2d2e21911610059578063e2d2e21914610284578063efca2eed1461029a578063ffb2c479146102b0578063ffd49c84146102d057600080fd5b8063a6f9dae1146101e5578063c9d6567e14610205578063ce7c2ac214610225578063d0e30db01461027c57600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b9578063997664d7146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600a5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610a59565b6102e6565b005b34801561014f57600080fd5b5061014161015e366004610a83565b610473565b34801561016f57600080fd5b5061010e61017e366004610a83565b6104ab565b34801561018f57600080fd5b5061014161019e366004610a9e565b610536565b3480156101af57600080fd5b5061010e60065481565b3480156101c557600080fd5b5061010e600c5481565b3480156101db57600080fd5b5061010e60075481565b3480156101f157600080fd5b50610141610200366004610a83565b61056d565b34801561021157600080fd5b50610141610220366004610ac0565b6105bb565b34801561023157600080fd5b50610261610240366004610a83565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b61014161062f565b34801561029057600080fd5b5061010e60095481565b3480156102a657600080fd5b5061010e60085481565b3480156102bc57600080fd5b506101416102cb366004610ac0565b610697565b3480156102dc57600080fd5b5061010e600b5481565b6000546001600160a01b031633148061030957506001546001600160a01b031633145b61031257600080fd5b6001600160a01b0382166000908152600560205260409020541561033957610339826107b0565b60008111801561035f57506001600160a01b038216600090815260056020526040902054155b156103c557600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690911790556103f8565b801580156103ea57506001600160a01b03821660009081526005602052604090205415155b156103f8576103f88261088d565b6001600160a01b038216600090815260056020526040902054600654610429918391610423916109a2565b906109b7565b6006556001600160a01b0382166000908152600560205260409020819055610450816109c3565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6000546001600160a01b031633148061049657506001546001600160a01b031633145b61049f57600080fd5b6104a8816107b0565b50565b6001600160a01b03811660009081526005602052604081205481036104d257506000919050565b6001600160a01b0382166000908152600560205260408120546104f4906109c3565b6001600160a01b038416600090815260056020526040902060010154909150808211610524575060009392505050565b61052e82826109a2565b949350505050565b6000546001600160a01b031633148061055957506001546001600160a01b031633145b61056257600080fd5b600b91909155600c55565b6000546001600160a01b031633148061059057506001546001600160a01b031633145b61059957600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806105de57506001546001600160a01b031633145b6105e757600080fd5b47336108fc60646105f88585610aef565b6106029190610b06565b6040518115909202916000818181858888f1935050505015801561062a573d6000803e3d6000fd5b505050565b6000546001600160a01b031633148061065257506001546001600160a01b031633145b61065b57600080fd5b60075461066890346109b7565b600755600654600a54610692916106899161068390346109e0565b906109ec565b600954906109b7565b600955565b6000546001600160a01b03163314806106ba57506001546001600160a01b031633145b6106c357600080fd5b60025460008190036106d3575050565b60008060005a90505b84821080156106ea57508383105b156107a95783600d54106106fe576000600d555b6107306002600d548154811061071657610716610b28565b6000918252602090912001546001600160a01b03166109f8565b15610767576107676002600d548154811061074d5761074d610b28565b6000918252602090912001546001600160a01b03166107b0565b61077c6107755a83906109a2565b83906109b7565b91505a600d8054919250600061079183610b3e565b919050555082806107a190610b3e565b9350506106dc565b5050505050565b6001600160a01b03811660009081526005602052604081205490036107d25750565b60006107dd826104ab565b90508015610889576008546107f290826109b7565b6008556040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561082b573d6000803e3d6000fd5b506001600160a01b0382166000908152600460209081526040808320429055600590915290206002015461085f90826109b7565b6001600160a01b0383166000908152600560205260409020600281019190915554610450906109c3565b5050565b6002805461089d90600190610b57565b815481106108ad576108ad610b28565b60009182526020808320909101546001600160a01b03848116845260039092526040909220546002805492909316929181106108eb576108eb610b28565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161093790600190610b57565b8154811061094757610947610b28565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061097d5761097d610b6a565b600082815260209020810160001990810180546001600160a01b031916905501905550565b60006109ae8284610b57565b90505b92915050565b60006109ae8284610b80565b60006109b1600a54610683600954856109e090919063ffffffff16565b60006109ae8284610aef565b60006109ae8284610b06565b600b546001600160a01b03821660009081526004602052604081205490914291610a229190610b80565b1080156109b15750600c54610a36836104ab565b1192915050565b80356001600160a01b0381168114610a5457600080fd5b919050565b60008060408385031215610a6c57600080fd5b610a7583610a3d565b946020939093013593505050565b600060208284031215610a9557600080fd5b6109ae82610a3d565b60008060408385031215610ab157600080fd5b50508035926020909101359150565b600060208284031215610ad257600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b1576109b1610ad9565b600082610b2357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201610b5057610b50610ad9565b5060010190565b818103818111156109b1576109b1610ad9565b634e487b7160e01b600052603160045260246000fd5b808201808211156109b1576109b1610ad956fea264697066735822122082ea1c9d4983e456552fa840a11f1af965f6493022c915d30f64e558e1c1dcde64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063787a051b116101dc578063a9f7864b11610102578063e5e31b13116100a0578063f2fde38b1161006f578063f2fde38b14610aa3578063f887ea4014610ac3578063fabe628314610ae3578063ffb54a9914610b0357600080fd5b8063e5e31b1314610a24578063f0ef821f14610a54578063f0fc6bca14610a6e578063f1d5f51714610a8357600080fd5b8063ca33e64c116100dc578063ca33e64c14610988578063ca987b0e146109a8578063da00097d146109be578063dd62ed3e146109de57600080fd5b8063a9f7864b14610928578063bad3ea6a14610948578063bb54c40e1461096857600080fd5b8063900d96111161017a578063a3a2e89e11610149578063a3a2e89e146108a8578063a5355989146108c8578063a8aa1b31146108e8578063a9059cbb1461090857600080fd5b8063900d96111461085257806395d89b41146103c557806398118cb4146108725780639fe9f4691461088857600080fd5b80638637b069116101b65780638637b069146107c4578063899420ed146107e45780638b42507f146108045780638da5cb5b1461083457600080fd5b8063787a051b146107785780637d1db4a514610798578063807c2d9c146107ae57600080fd5b806341cb87fc116102c15780636b67c4df1161025f578063715018a61161022e578063715018a6146106eb57806371bb96e71461070057806375f0a87414610720578063773fcb5c1461075857600080fd5b80636b67c4df1461066057806370540933146106765780637070c8981461069557806370a08231146106b557600080fd5b8063479f66d81161029b578063479f66d8146105e15780634a74bb02146106015780635c85974f14610620578063650c42261461064057600080fd5b806341cb87fc146105775780634355855a1461059757806344de2e4c146105c757600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce567146104eb57806334c7088914610507578063399c7976146105275780633f4218e01461054757600080fd5b806323b872dd1461049557806327b7ca5f146104b55780632bb14e1d146104d557600080fd5b80630d2959801161036a5780630d2959801461042857806318160ddd1461044a5780631df4ccfc1461045f5780631f2c80f11461047557600080fd5b80630445b6671461039c57806306fdde03146103c5578063095ea7b3146103f857600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b2601a5481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b5060408051808201825260048152631213d11360e21b602082015290516103bc91906124fa565b34801561040457600080fd5b5061041861041336600461255d565b610b1d565b60405190151581526020016103bc565b34801561043457600080fd5b50610448610443366004612597565b610b8a565b005b34801561045657600080fd5b506004546103b2565b34801561046b57600080fd5b506103b260125481565b34801561048157600080fd5b506104486104903660046125b4565b610bd0565b3480156104a157600080fd5b506104186104b03660046125ed565b610c28565b3480156104c157600080fd5b506104486104d036600461262e565b610cea565b3480156104e157600080fd5b506103b260115481565b3480156104f757600080fd5b50604051601281526020016103bc565b34801561051357600080fd5b5061044861052236600461264b565b610d38565b34801561053357600080fd5b5061044861054236600461268d565b610db2565b34801561055357600080fd5b5061041861056236600461262e565b600b6020526000908152604090205460ff1681565b34801561058357600080fd5b5061044861059236600461262e565b610e07565b3480156105a357600080fd5b506104186105b236600461262e565b600d6020526000908152604090205460ff1681565b3480156105d357600080fd5b506007546104189060ff1681565b3480156105ed57600080fd5b506104486105fc3660046126bb565b6110dd565b34801561060d57600080fd5b5060195461041890610100900460ff1681565b34801561062c57600080fd5b5061044861063b3660046126bb565b61111b565b34801561064c57600080fd5b5061044861065b3660046126d4565b611187565b34801561066c57600080fd5b506103b260105481565b34801561068257600080fd5b50600e5461041890610100900460ff1681565b3480156106a157600080fd5b506104486106b0366004612597565b611259565b3480156106c157600080fd5b506103b26106d036600461262e565b6001600160a01b031660009081526008602052604090205490565b3480156106f757600080fd5b5061044861129f565b34801561070c57600080fd5b5061044861071b3660046126bb565b6112d5565b34801561072c57600080fd5b50600354610740906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561076457600080fd5b5061044861077336600461268d565b611363565b34801561078457600080fd5b506104486107933660046126bb565b611493565b3480156107a457600080fd5b506103b260055481565b3480156107ba57600080fd5b506103b260065481565b3480156107d057600080fd5b506104186107df36600461255d565b611505565b3480156107f057600080fd5b506104486107ff366004612597565b6115f9565b34801561081057600080fd5b5061041861081f36600461262e565b600c6020526000908152604090205460ff1681565b34801561084057600080fd5b506000546001600160a01b0316610740565b34801561085e57600080fd5b5061044861086d366004612597565b611636565b34801561087e57600080fd5b506103b2600f5481565b34801561089457600080fd5b506103b26108a336600461262e565b61167a565b3480156108b457600080fd5b506104486108c336600461268d565b6116e9565b3480156108d457600080fd5b50600e546104189062010000900460ff1681565b3480156108f457600080fd5b50601554610740906001600160a01b031681565b34801561091457600080fd5b5061041861092336600461255d565b61173e565b34801561093457600080fd5b50610448610943366004612706565b61174b565b34801561095457600080fd5b50601754610740906001600160a01b031681565b34801561097457600080fd5b50610448610983366004612597565b6117ad565b34801561099457600080fd5b50600254610740906001600160a01b031681565b3480156109b457600080fd5b506103b260135481565b3480156109ca57600080fd5b506019546104189062010000900460ff1681565b3480156109ea57600080fd5b506103b26109f93660046125b4565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a3057600080fd5b50610418610a3f36600461262e565b60166020526000908152604090205460ff1681565b348015610a6057600080fd5b50600e546104189060ff1681565b348015610a7a57600080fd5b506104486117ea565b348015610a8f57600080fd5b50610448610a9e3660046126bb565b611843565b348015610aaf57600080fd5b50610448610abe36600461262e565b6118af565b348015610acf57600080fd5b50601454610740906001600160a01b031681565b348015610aef57600080fd5b50610448610afe36600461268d565b611947565b348015610b0f57600080fd5b50600a546104189060ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b789086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610bb490612728565b60405180910390fd5b600a805460ff1916911515919091179055565b6000546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610bb490612728565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610cd5576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610cb091849061199c565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610ce08484846119c8565b90505b9392505050565b6000546001600160a01b03163314610d145760405162461bcd60e51b8152600401610bb490612728565b610d1f816001611363565b610d2a816001611947565b610d358160016116e9565b50565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610bb490612728565b6019805461ff0019166101008515150217905560045461271090610d87908490612773565b610d91919061278a565b601a5560198054911515620100000262ff0000199092169190911790555050565b6000546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e315760405162461bcd60e51b8152600401610bb490612728565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9a91906127ac565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1091906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f91906127ac565b90506001600160a01b03811661107557816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906127ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561104e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107291906127ac565b90505b6001600160a01b0390811660009081526016602090815260408083208054600160ff199182168117909255600d84528285208054821683179055600c909352922080549091169091179055601480546001600160a01b03191693909116929092179091555050565b6000546001600160a01b031633146111075760405162461bcd60e51b8152600401610bb490612728565b620b71b0811061111657600080fd5b601855565b6000546001600160a01b031633146111455760405162461bcd60e51b8152600401610bb490612728565b60058110156111665760405162461bcd60e51b8152600401610bb4906127c9565b6103e8816004546111779190612773565b611181919061278a565b60055550565b6000546001600160a01b031633146111b15760405162461bcd60e51b8152600401610bb490612728565b600f849055601183905560108290556111d4836111ce8685611e65565b90611e65565b60128190556111e490829061280f565b60138190556012546102bc916111f99161280f565b11156112535760405162461bcd60e51b8152602060048201526024808201527f546f6b656e3a20436f6d62696e65642066656573206d75737420626520756e646044820152636572202560e01b6064820152608401610bb4565b50505050565b6000546001600160a01b031633146112835760405162461bcd60e51b8152600401610bb490612728565b600e8054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146112c95760405162461bcd60e51b8152600401610bb490612728565b6112d36000611e71565b565b6000546001600160a01b031633146112ff5760405162461bcd60e51b8152600401610bb490612728565b6017546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03821660009081526016602052604090205460ff16156113b2575060015b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561144a57601754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b15801561142e57600080fd5b505af1158015611442573d6000803e3d6000fd5b505050505050565b6017546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611414565b6000546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610bb490612728565b47336108fc60646114ce8585612773565b6114d8919061278a565b6040518115909202916000818181858888f19350505050158015611500573d6000803e3d6000fd5b505050565b600080546001600160a01b031633146115305760405162461bcd60e51b8152600401610bb490612728565b306001600160a01b038416036115885760405162461bcd60e51b815260206004820152601c60248201527f43616e742072656d6f766520746865206e617469766520746f6b656e000000006044820152606401610bb4565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce39190612822565b6000546001600160a01b031633146116235760405162461bcd60e51b8152600401610bb490612728565b6007805460ff1916911515919091179055565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610bb490612728565b600e80549115156101000261ff0019909216919091179055565b60175460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa1580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b84919061283f565b6000546001600160a01b031633146117135760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610ce33384846119c8565b6000546001600160a01b031633146117755760405162461bcd60e51b8152600401610bb490612728565b6017546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401611414565b6000546001600160a01b031633146117d75760405162461bcd60e51b8152600401610bb490612728565b600e805460ff1916911515919091179055565b601754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561182f57600080fd5b505af1158015611253573d6000803e3d6000fd5b6000546001600160a01b0316331461186d5760405162461bcd60e51b8152600401610bb490612728565b600581101561188e5760405162461bcd60e51b8152600401610bb4906127c9565b6103e88160045461189f9190612773565b6118a9919061278a565b60065550565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03811661193e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b610d3581611e71565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610bb490612728565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600081848411156119c05760405162461bcd60e51b8152600401610bb491906124fa565b505050900390565b60195460009060ff16156119e8576119e1848484611ec1565b9050610ce3565b6001600160a01b0384166000908152600b602052604090205460ff16611a5157600a5460ff16611a515760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bb4565b60055482111580611a7a57506001600160a01b0384166000908152600c602052604090205460ff165b80611a88575060075460ff16155b611ac85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bb4565b6001600160a01b03841660009081526016602052604090205460ff16158015611af4575060195460ff16155b8015611b075750601954610100900460ff165b8015611b245750601a543060009081526008602052604090205410155b15611b3157611b31611fa7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611b8391849061199c565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600c909152205460ff16158015611bc1575060075460ff165b15611bf7576006546001600160a01b038416600090815260086020526040902054611bec9084611e65565b1115611bf757600080fd5b6001600160a01b0384166000908152600b602052604081205460ff16158015611c3957506001600160a01b0384166000908152600b602052604090205460ff16155b611c435782611c4e565b611c4e858585612366565b6001600160a01b038516600090815260086020526040902054909150611c749082611e65565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600d909152205460ff16611d18576017546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d0557600080fd5b505af1925050508015611d16575060015b505b6001600160a01b0384166000908152600d602052604090205460ff16611da9576017546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611d9657600080fd5b505af1925050508015611da7575060015b505b6017546018546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611de19160040190815260200190565b600060405180830381600087803b158015611dfb57600080fd5b505af1925050508015611e0c575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5291815260200190565b60405180910390a3506001949350505050565b6000610ce3828461280f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611f1291849061199c565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611f419083611e65565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f959086815260200190565b60405180910390a35060019392505050565b6019805460ff1916600117905530600090815260086020526040812054601254600f54919291611fe891600291611fe29190829087906124d6565b906124e2565b90506000611ff683836124ee565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061203057612030612858565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad91906127ac565b816001815181106120c0576120c0612858565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac9479061210690859060009086903090429060040161286e565b600060405180830381600087803b15801561212057600080fd5b505af1158015612134573d6000803e3d6000fd5b5050600f54479250600091506121589061214f9060026124e2565b601254906124ee565b9050600061217a6002611fe284611fe2600f54886124d690919063ffffffff16565b9050600061219783611fe2601154876124d690919063ffffffff16565b905060006121b484611fe2601054886124d690919063ffffffff16565b9050601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220657600080fd5b505af193505050508015612218575060015b506003546040516000916001600160a01b03169061753090849084818181858888f193505050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b506000925050891590506123505760145460025460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af11580156122ee573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061231391906128df565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff191690555050505050505050565b6001600160a01b038216600090815260166020526040812054819060ff1680156123975750600e54610100900460ff165b156123a157506013545b6001600160a01b03851660009081526016602052604090205460ff1680156123cb5750600e5460ff165b156123d557506012545b6001600160a01b03851660009081526016602052604090205460ff1615801561241757506001600160a01b03841660009081526016602052604090205460ff16155b1561243a57600e5462010000900460ff1615612436575060135461243a565b5060005b600061244c6103e8611fe286856124d6565b306000908152600860205260409020549091506124699082611e65565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124ba9085815260200190565b60405180910390a36124cc84826124ee565b9695505050505050565b6000610ce38284612773565b6000610ce3828461278a565b6000610ce3828461290d565b600060208083528351808285015260005b818110156125275785810183015185820160400152820161250b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3557600080fd5b6000806040838503121561257057600080fd5b823561257b81612548565b946020939093013593505050565b8015158114610d3557600080fd5b6000602082840312156125a957600080fd5b8135610ce381612589565b600080604083850312156125c757600080fd5b82356125d281612548565b915060208301356125e281612548565b809150509250929050565b60008060006060848603121561260257600080fd5b833561260d81612548565b9250602084013561261d81612548565b929592945050506040919091013590565b60006020828403121561264057600080fd5b8135610ce381612548565b60008060006060848603121561266057600080fd5b833561266b81612589565b925060208401359150604084013561268281612589565b809150509250925092565b600080604083850312156126a057600080fd5b82356126ab81612548565b915060208301356125e281612589565b6000602082840312156126cd57600080fd5b5035919050565b600080600080608085870312156126ea57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561271957600080fd5b50508035926020909101359150565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b8457610b8461275d565b6000826127a757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127be57600080fd5b8151610ce381612548565b60208082526026908201527f57616c6c6574204c696d6974206e6565647320746f206265206174206c6561736040820152657420302e352560d01b606082015260800190565b80820180821115610b8457610b8461275d565b60006020828403121561283457600080fd5b8151610ce381612589565b60006020828403121561285157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128be5784516001600160a01b031683529383019391830191600101612899565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128f457600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610b8457610b8461275d56fea2646970667358221220bc40e9d02735c5cb026b0c3916d80f6f88681f3f97e588e8940439b9df1cc1d864736f6c63430008130033

Deployed Bytecode Sourcemap

13829:14928:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15353:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15353:56:0;;;;;;;;16893:94;;;;;;;;;;-1:-1:-1;16974:5:0;;;;;;;;;;;-1:-1:-1;;;16974:5:0;;;;16893:94;;;;16974:5;16893:94;:::i;17636:248::-;;;;;;;;;;-1:-1:-1;17636:248:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;17636:248:0;1205:187:1;23933:94:0;;;;;;;;;;-1:-1:-1;23933:94:0;;;;;:::i;:::-;;:::i;:::-;;17203:102;;;;;;;;;;-1:-1:-1;17285:12:0;;17203:102;;14948:27;;;;;;;;;;;;;;;;28006:240;;;;;;;;;;-1:-1:-1;28006:240:0;;;;;:::i;:::-;;:::i;18565:422::-;;;;;;;;;;-1:-1:-1;18565:422:0;;;;;:::i;:::-;;:::i;27805:193::-;;;;;;;;;;-1:-1:-1;27805:193:0;;;;;:::i;:::-;;:::i;14909:30::-;;;;;;;;;;;;;;;;17101:94;;;;;;;;;;-1:-1:-1;17101:94:0;;14007:2;3014:36:1;;3002:2;2987:18;17101:94:0;2872:184:1;25337:331:0;;;;;;;;;;-1:-1:-1;25337:331:0;;;;;:::i;:::-;;:::i;26987:112::-;;;;;;;;;;-1:-1:-1;26987:112:0;;;;;:::i;:::-;;:::i;14554:43::-;;;;;;;;;;-1:-1:-1;14554:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26208:771;;;;;;;;;;-1:-1:-1;26208:771:0;;;;;:::i;:::-;;:::i;14658:48::-;;;;;;;;;;-1:-1:-1;14658:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14360:33;;;;;;;;;;-1:-1:-1;14360:33:0;;;;;;;;25945:138;;;;;;;;;;-1:-1:-1;25945:138:0;;;;;:::i;:::-;;:::i;15252:40::-;;;;;;;;;;-1:-1:-1;15252:40:0;;;;;;;;;;;24561:198;;;;;;;;;;-1:-1:-1;24561:198:0;;;;;:::i;:::-;;:::i;24767:562::-;;;;;;;;;;-1:-1:-1;24767:562:0;;;;;:::i;:::-;;:::i;14870:32::-;;;;;;;;;;;;;;;;14751:30;;;;;;;;;;-1:-1:-1;14751:30:0;;;;;;;;;;;24241:104;;;;;;;;;;-1:-1:-1;24241:104:0;;;;;:::i;:::-;;:::i;17313:119::-;;;;;;;;;;-1:-1:-1;17313:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;17406:18:0;17379:7;17406:18;;;:9;:18;;;;;;;17313:119;12975:103;;;;;;;;;;;;;:::i;26091:109::-;;;;;;;;;;-1:-1:-1;26091:109:0;;;;;:::i;:::-;;:::i;14136:30::-;;;;;;;;;;-1:-1:-1;14136:30:0;;;;-1:-1:-1;;;;;14136:30:0;;;;;;-1:-1:-1;;;;;4636:32:1;;;4618:51;;4606:2;4591:18;14136:30:0;4472:203:1;27394:403:0;;;;;;;;;;-1:-1:-1;27394:403:0;;;;;:::i;:::-;;:::i;28549:203::-;;;;;;;;;;-1:-1:-1;28549:203:0;;;;;:::i;:::-;;:::i;14236:56::-;;;;;;;;;;;;;;;;14299:54;;;;;;;;;;;;;;;;28254:287;;;;;;;;;;-1:-1:-1;28254:287:0;;;;;:::i;:::-;;:::i;18995:103::-;;;;;;;;;;-1:-1:-1;18995:103:0;;;;;:::i;:::-;;:::i;14604:47::-;;;;;;;;;;-1:-1:-1;14604:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12324:87;;;;;;;;;;-1:-1:-1;12370:7:0;12397:6;-1:-1:-1;;;;;12397:6:0;12324:87;;24137:96;;;;;;;;;;-1:-1:-1;24137:96:0;;;;;:::i;:::-;;:::i;14831:32::-;;;;;;;;;;;;;;;;17892:152;;;;;;;;;;-1:-1:-1;17892:152:0;;;;;:::i;:::-;;:::i;27107:120::-;;;;;;;;;;-1:-1:-1;27107:120:0;;;;;:::i;:::-;;:::i;14788:34::-;;;;;;;;;;-1:-1:-1;14788:34:0;;;;;;;;;;;15058:19;;;;;;;;;;-1:-1:-1;15058:19:0;;;;-1:-1:-1;;;;;15058:19:0;;;18369:188;;;;;;;;;;-1:-1:-1;18369:188:0;;;;;:::i;:::-;;:::i;25676:261::-;;;;;;;;;;-1:-1:-1;25676:261:0;;;;;:::i;:::-;;:::i;15131:46::-;;;;;;;;;;-1:-1:-1;15131:46:0;;;;-1:-1:-1;;;;;15131:46:0;;;24035:94;;;;;;;;;;-1:-1:-1;24035:94:0;;;;;:::i;:::-;;:::i;14093:36::-;;;;;;;;;;-1:-1:-1;14093:36:0;;;;-1:-1:-1;;;;;14093:36:0;;;14982;;;;;;;;;;;;;;;;15299:45;;;;;;;;;;-1:-1:-1;15299:45:0;;;;;;;;;;;17440:188;;;;;;;;;;-1:-1:-1;17440:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;17592:19:0;;;17560:7;17592:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17440:188;15084:38;;;;;;;;;;-1:-1:-1;15084:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14715:29;;;;;;;;;;-1:-1:-1;14715:29:0;;;;;;;;18052:98;;;;;;;;;;;;;:::i;24353:200::-;;;;;;;;;;-1:-1:-1;24353:200:0;;;;;:::i;:::-;;:::i;13233:238::-;;;;;;;;;;-1:-1:-1;13233:238:0;;;;;:::i;:::-;;:::i;15027:24::-;;;;;;;;;;-1:-1:-1;15027:24:0;;;;-1:-1:-1;;;;;15027:24:0;;;27235:151;;;;;;;;;;-1:-1:-1;27235:151:0;;;;;:::i;:::-;;:::i;14514:31::-;;;;;;;;;;-1:-1:-1;14514:31:0;;;;;;;;17636:248;17772:10;17738:4;17760:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17760:32:0;;;;;;;;;;:41;;;17817:37;17738:4;;17760:32;;17817:37;;;;17795:6;160:25:1;;148:2;133:18;;14:177;17817:37:0;;;;;;;;-1:-1:-1;17872:4:0;17636:248;;;;;:::o;23933:94::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;;;;;;;;;23998:11:::1;:21:::0;;-1:-1:-1;;23998:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23933:94::o;28006:240::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;28147:21:::1;:44:::0;;-1:-1:-1;;;;;28147:44:0;;::::1;-1:-1:-1::0;;;;;;28147:44:0;;::::1;;::::0;;;28202:15:::1;:36:::0;;;;;::::1;::::0;::::1;;::::0;;28006:240::o;18565:422::-;-1:-1:-1;;;;;18720:19:0;;18699:4;18720:19;;;:11;:19;;;;;;;;18740:10;18720:31;;;;;;;;-1:-1:-1;;18720:52:0;18716:206;;18823:87;;;;;;;;;;;-1:-1:-1;;;18823:87:0;;;;;;;;-1:-1:-1;;;;;18823:19:0;;-1:-1:-1;18823:19:0;;;:11;:19;;;;;18843:10;18823:31;;;;;;;;;;:87;;18877:6;;18823:53;:87::i;:::-;-1:-1:-1;;;;;18789:19:0;;;;;;:11;:19;;;;;;;;18809:10;18789:31;;;;;;;:121;18716:206;18939:40;18953:6;18961:9;18972:6;18939:13;:40::i;:::-;18932:47;;18565:422;;;;;;:::o;27805:193::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;27866:36:::1;27889:6;27897:4;27866:22;:36::i;:::-;27913:35;27935:6;27943:4;27913:21;:35::i;:::-;27959:31;27977:6;27985:4;27959:17;:31::i;:::-;27805:193:::0;:::o;25337:331::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;25502:21:::1;:38:::0;;-1:-1:-1;;25502:38:0::1;;::::0;::::1;;;;::::0;;25567:12:::1;::::0;25601:5:::1;::::0;25567:31:::1;::::0;25582:16;;25567:31:::1;:::i;:::-;:39;;;;:::i;:::-;25551:13;:55:::0;25617:25:::1;:43:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;25617:43:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;25337:331:0:o;26987:112::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27066:16:0;;;::::1;;::::0;;;:6:::1;:16;::::0;;;;:25;;-1:-1:-1;;27066:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26987:112::o;26208:771::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;26281:27:::1;26322:9;26281:51;;26396:29;26440:16;-1:-1:-1::0;;;;;26440:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26396:71;;26478:19;26500:17;-1:-1:-1::0;;;;;26500:25:0::1;;26548:4;26568:16;-1:-1:-1::0;;;;;26568:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26500:102;::::0;-1:-1:-1;;;;;;26500:102:0::1;::::0;;;;;;-1:-1:-1;;;;;6769:15:1;;;26500:102:0::1;::::0;::::1;6751:34:1::0;6821:15;;6801:18;;;6794:43;6686:18;;26500:102:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26478:124:::0;-1:-1:-1;;;;;;26619:25:0;::::1;26615:189;;26675:17;-1:-1:-1::0;;;;;26675:28:0::1;;26730:4;26754:16;-1:-1:-1::0;;;;;26754:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26675:117;::::0;-1:-1:-1;;;;;;26675:117:0::1;::::0;;;;;;-1:-1:-1;;;;;6769:15:1;;;26675:117:0::1;::::0;::::1;6751:34:1::0;6821:15;;6801:18;;;6794:43;6686:18;;26675:117:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26661:131;;26615:189;-1:-1:-1::0;;;;;26814:19:0;;::::1;;::::0;;;:6:::1;:19;::::0;;;;;;;:26;;26836:4:::1;-1:-1:-1::0;;26814:26:0;;::::1;::::0;::::1;::::0;;;26851:16:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;26898:15:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;26946:6:::1;:25:::0;;-1:-1:-1;;;;;;26946:25:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;26208:771:0:o;25945:138::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;26037:6:::1;26031:3;:12;26023:21;;;::::0;::::1;;26055:14;:20:::0;25945:138::o;24561:198::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24649:1:::1;24637:8;:13;;24629:64;;;;-1:-1:-1::0;;;24629:64:0::1;;;;;;;:::i;:::-;24747:4;24735:8;24720:12;;:23;;;;:::i;:::-;24719:32;;;;:::i;:::-;24704:12;:47:::0;-1:-1:-1;24561:198:0:o;24767:562::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24956:12:::1;:28:::0;;;24995:10:::1;:29:::0;;;25035:12:::1;:30:::0;;;25089:46:::1;25008:16:::0;25089:30:::1;24971:13:::0;25050:15;25089:16:::1;:30::i;:::-;:34:::0;::::1;:46::i;:::-;25078:8;:57:::0;;;25166:23:::1;::::0;25177:12;;25166:23:::1;:::i;:::-;25146:17;:43:::0;;;25222:8:::1;::::0;25254:3:::1;::::0;25222:28:::1;::::0;::::1;:::i;:::-;:35;;25200:121;;;::::0;-1:-1:-1;;;25200:121:0;;7587:2:1;25200:121:0::1;::::0;::::1;7569:21:1::0;7626:2;7606:18;;;7599:30;7665:34;7645:18;;;7638:62;-1:-1:-1;;;7716:18:1;;;7709:34;7760:19;;25200:121:0::1;7385:400:1::0;25200:121:0::1;24767:562:::0;;;;:::o;24241:104::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24313:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;24313:24:0;;::::1;::::0;;;::::1;::::0;;24241:104::o;12975:103::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;13040:30:::1;13067:1;13040:18;:30::i;:::-;12975:103::o:0;26091:109::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;26160:19:::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;;26160:32:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;26160:19:0;;::::1;::::0;:27:::1;::::0;133:18:1;;26160:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26091:109:::0;:::o;27394:403::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27510:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;::::1;;27506:60;;;-1:-1:-1::0;27550:4:0::1;27506:60;-1:-1:-1::0;;;;;27578:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27578:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27624:166:::1;;27651:19;::::0;:39:::1;::::0;-1:-1:-1;;;27651:39:0;;-1:-1:-1;;;;;7990:32:1;;;27651:39:0::1;::::0;::::1;7972:51:1::0;27651:19:0::1;8039:18:1::0;;;8032:34;27651:19:0;;::::1;::::0;:28:::1;::::0;7945:18:1;;27651:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27394:403:::0;;:::o;27624:166::-:1;27723:19;::::0;-1:-1:-1;;;;;27760:17:0;;::::1;27723:19;27760:17:::0;;;:9:::1;:17;::::0;;;;;;;27723:55;;-1:-1:-1;;;27723:55:0;;::::1;::::0;::::1;7972:51:1::0;;;;8039:18;;;8032:34;27723:19:0;::::1;::::0;:28:::1;::::0;7945:18:1;;27723:55:0::1;7790:282:1::0;28549:203:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;28646:21:::1;28686:10;28678:66;28740:3;28708:28;28720:16:::0;28646:21;28708:28:::1;:::i;:::-;28707:36;;;;:::i;:::-;28678:66;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28615:137;28549:203:::0;:::o;28254:287::-;28366:12;12397:6;;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;28428:4:::1;-1:-1:-1::0;;;;;28404:29:0;::::1;::::0;28396:70:::1;;;::::0;-1:-1:-1;;;28396:70:0;;8558:2:1;28396:70:0::1;::::0;::::1;8540:21:1::0;8597:2;8577:18;;;8570:30;8636;8616:18;;;8609:58;8684:18;;28396:70:0::1;8356:352:1::0;28396:70:0::1;28484:49;::::0;-1:-1:-1;;;28484:49:0;;28514:10:::1;28484:49;::::0;::::1;7972:51:1::0;8039:18;;;8032:34;;;-1:-1:-1;;;;;28484:29:0;::::1;::::0;::::1;::::0;7945:18:1;;28484:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18995:103::-:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;19066:14:::1;:24:::0;;-1:-1:-1;;19066:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18995:103::o;24137:96::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24205:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;24205:20:0;;::::1;::::0;;;::::1;::::0;;24137:96::o;17892:152::-;17990:19;;:46;;-1:-1:-1;;;17990:46:0;;-1:-1:-1;;;;;4636:32:1;;;17990:46:0;;;4618:51:1;17963:7:0;;17990:19;;:37;;4591:18:1;;17990:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27107:120::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27191:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27191:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27107:120::o;18369:188::-;18476:4;18505:44;18519:10;18531:9;18542:6;18505:13;:44::i;25676:261::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;25816:19:::1;::::0;:113:::1;::::0;-1:-1:-1;;;25816:113:0;;::::1;::::0;::::1;9326:25:1::0;;;9367:18;;;9360:34;;;-1:-1:-1;;;;;25816:19:0;;::::1;::::0;:43:::1;::::0;9299:18:1;;25816:113:0::1;9152:248:1::0;24035:94:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24102:10:::1;:19:::0;;-1:-1:-1;;24102:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24035:94::o;18052:98::-;18097:19;;:45;;-1:-1:-1;;;18097:45:0;;18131:10;18097:45;;;4618:51:1;-1:-1:-1;;;;;18097:19:0;;;;:33;;4591:18:1;;18097:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24353:200;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;24445:1:::1;24433:8;:13;;24425:64;;;;-1:-1:-1::0;;;24425:64:0::1;;;;;;;:::i;:::-;24541:4;24529:8;24514:12;;:23;;;;:::i;:::-;24513:32;;;;:::i;:::-;24500:10;:45:::0;-1:-1:-1;24353:200:0:o;13233:238::-;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13336:22:0;::::1;13314:110;;;::::0;-1:-1:-1;;;13314:110:0;;9607:2:1;13314:110:0::1;::::0;::::1;9589:21:1::0;9646:2;9626:18;;;9619:30;9685:34;9665:18;;;9658:62;-1:-1:-1;;;9736:18:1;;;9729:36;9782:19;;13314:110:0::1;9405:402:1::0;13314:110:0::1;13435:28;13454:8;13435:18;:28::i;27235:151::-:0;12370:7;12397:6;-1:-1:-1;;;;;12397:6:0;11751:10;12544:23;12536:68;;;;-1:-1:-1;;;12536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27346:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;27346:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27235:151::o;2588:240::-;2708:7;2769:12;2761:6;;;;2753:29;;;;-1:-1:-1;;;2753:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2804:5:0;;;2588:240::o;19106:1779::-;19253:16;;19232:4;;19253:16;;19249:97;;;19293:41;19308:6;19316:9;19327:6;19293:14;:41::i;:::-;19286:48;;;;19249:97;-1:-1:-1;;;;;19363:19:0;;;;;;:11;:19;;;;;;;;19358:97;;19407:11;;;;19399:44;;;;-1:-1:-1;;;19399:44:0;;10014:2:1;19399:44:0;;;9996:21:1;10053:2;10033:18;;;10026:30;-1:-1:-1;;;10072:18:1;;;10065:50;10132:18;;19399:44:0;9812:344:1;19399:44:0;19499:12;;19489:6;:22;;:49;;;-1:-1:-1;;;;;;19515:23:0;;;;;;:15;:23;;;;;;;;19489:49;:68;;;-1:-1:-1;19543:14:0;;;;19542:15;19489:68;19467:135;;;;-1:-1:-1;;;19467:135:0;;10363:2:1;19467:135:0;;;10345:21:1;10402:2;10382:18;;;10375:30;-1:-1:-1;;;10421:18:1;;;10414:47;10478:18;;19467:135:0;10161:341:1;19467:135:0;-1:-1:-1;;;;;19634:14:0;;;;;;:6;:14;;;;;;;;19633:15;:49;;;;-1:-1:-1;19666:16:0;;;;19665:17;19633:49;:87;;;;-1:-1:-1;19699:21:0;;;;;;;19633:87;:145;;;;-1:-1:-1;19765:13:0;;19755:4;19737:24;;;;:9;:24;;;;;;:41;;19633:145;19615:212;;;19805:10;:8;:10::i;:::-;19886:90;;;;;;;;;;;-1:-1:-1;;;19886:90:0;;;;;;;;-1:-1:-1;;;;;19886:17:0;;-1:-1:-1;19886:17:0;;;:9;:17;;;;;;;;:90;;19922:6;;19886:21;:90::i;:::-;-1:-1:-1;;;;;19866:17:0;;;;;;;:9;:17;;;;;;;;:110;;;;19994:26;;;;;:15;:26;;;;;;;19993:27;:45;;;;-1:-1:-1;20024:14:0;;;;19993:45;19989:133;;;20099:10;;-1:-1:-1;;;;;20063:20:0;;;;;;:9;:20;;;;;;:32;;20088:6;20063:24;:32::i;:::-;:46;;20055:55;;;;;;-1:-1:-1;;;;;20157:19:0;;20134;20157;;;:11;:19;;;;;;;;20156:20;:47;;;;-1:-1:-1;;;;;;20181:22:0;;;;;;:11;:22;;;;;;;;20180:23;20156:47;:119;;20269:6;20156:119;;;20219:34;20227:6;20235:9;20246:6;20219:7;:34::i;:::-;-1:-1:-1;;;;;20309:20:0;;;;;;:9;:20;;;;;;20134:141;;-1:-1:-1;20309:37:0;;20134:141;20309:24;:37::i;:::-;-1:-1:-1;;;;;20286:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;20393:24;;;;;:16;:24;;;;;;;20388:158;;20455:19;;-1:-1:-1;;;;;20492:17:0;;;20455:19;20492:17;;;:9;:17;;;;;;;;20455:55;;-1:-1:-1;;;20455:55:0;;;;;7972:51:1;;;;8039:18;;;8032:34;20455:19:0;;;:28;;7945:18:1;;20455:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20434:101;;-1:-1:-1;;;;;20563:27:0;;;;;;:16;:27;;;;;;;;20558:167;;20628:19;;-1:-1:-1;;;;;20668:20:0;;;20628:19;20668:20;;;:9;:20;;;;;;;;20628:61;;-1:-1:-1;;;20628:61:0;;;;;7972:51:1;;;;8039:18;;;8032:34;20628:19:0;;;:28;;7945:18:1;;20628:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20607:107;;20741:19;;20769:14;;20741:43;;-1:-1:-1;;;;;;20741:43:0;;-1:-1:-1;;;;;20741:19:0;;;;:27;;:43;;;;160:25:1;;;148:2;133:18;;14:177;20741:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20737:59;20830:9;-1:-1:-1;;;;;20813:40:0;20822:6;-1:-1:-1;;;;;20813:40:0;;20841:11;20813:40;;;;160:25:1;;148:2;133:18;;14:177;20813:40:0;;;;;;;;-1:-1:-1;20873:4:0;;19106:1779;-1:-1:-1;;;;19106:1779:0:o;2058:98::-;2116:7;2143:5;2147:1;2143;:5;:::i;13631:191::-;13705:16;13724:6;;-1:-1:-1;;;;;13741:17:0;;;-1:-1:-1;;;;;;13741:17:0;;;;;;13774:40;;13724:6;;;;;;;13774:40;;13705:16;13774:40;13694:128;13631:191;:::o;20893:401::-;21057:90;;;;;;;;;;;-1:-1:-1;;;21057:90:0;;;;;;;;-1:-1:-1;;;;;21057:17:0;;21020:4;21057:17;;;:9;:17;;;;;;;:90;;21093:6;;21057:21;:90::i;:::-;-1:-1:-1;;;;;21037:17:0;;;;;;;:9;:17;;;;;;:110;;;;21181:20;;;;;;;:32;;21206:6;21181:24;:32::i;:::-;-1:-1:-1;;;;;21158:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21229:35;;;;;;;;;;21257:6;160:25:1;;148:2;133:18;;14:177;21229:35:0;;;;;;;;-1:-1:-1;21282:4:0;20893:401;;;;;:::o;22160:1765::-;15452:16;:23;;-1:-1:-1;;15452:23:0;15471:4;15452:23;;;22256:4:::1;15452:16:::0;22238:24;;;:9:::1;:24;::::0;;;;;22365:8:::1;::::0;22333:12:::1;::::0;22238:24;;15452:16;22299:96:::1;::::0;22393:1:::1;::::0;22299:75:::1;::::0;22365:8;22299:75;;22238:24;;22299:33:::1;:47::i;:::-;:65:::0;::::1;:75::i;:96::-;22273:122:::0;-1:-1:-1;22406:20:0::1;22429:36;:15:::0;22273:122;22429:19:::1;:36::i;:::-;22502:16;::::0;;22516:1:::1;22502:16:::0;;;;;::::1;::::0;;22406:59;;-1:-1:-1;22478:21:0::1;::::0;22502:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22502:16:0::1;22478:40;;22547:4;22529;22534:1;22529:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22529:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22573:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;22573:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;22529:7;;22573:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22563:4;22568:1;22563:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22563:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22599:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22599:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22671:12;;22599:6:::1;::::0;22714:4;;22741::::1;::::0;22761:15:::1;::::0;22599:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22889:12:0::1;::::0;22820:21:::1;::::0;-1:-1:-1;22800:17:0::1;::::0;-1:-1:-1;22876:33:0::1;::::0;22889:19:::1;::::0;22906:1:::1;22889:16;:19::i;:::-;22876:8;::::0;;:12:::1;:33::i;:::-;22854:55;;22922:26;22951:93;23042:1;22951:72;23011:11;22951:41;22979:12;;22951:9;:27;;:41;;;;:::i;:93::-;22922:122;;23055:27;23085:66;23129:11;23085:25;23099:10;;23085:9;:13;;:25;;;;:::i;:66::-;23055:96;;23162:26;23191:68;23237:11;23191:27;23205:12;;23191:9;:13;;:27;;;;:::i;:68::-;23162:97;;23289:19;;;;;;;;;-1:-1:-1::0;;;;;23289:19:0::1;-1:-1:-1::0;;;;;23289:27:0::1;;23324:19;23289:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;23409:15:0::1;::::0;23401:109:::1;::::0;23380:15:::1;::::0;-1:-1:-1;;;;;23409:15:0::1;::::0;23490:5:::1;::::0;23452:18;;23380:15;23401:109;23380:15;23401:109;23452:18;23409:15;23490:5;23401:109:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23536:5:0::1;::::0;-1:-1:-1;;23558:19:0;;;-1:-1:-1;23554:364:0::1;;23594:6;::::0;23768:21:::1;::::0;23594:244:::1;::::0;-1:-1:-1;;;23594:244:0;;23670:4:::1;23594:244;::::0;::::1;12307:34:1::0;12357:18;;;12350:34;;;23594:6:0::1;12400:18:1::0;;;12393:34;;;12443:18;;;12436:34;-1:-1:-1;;;;;23768:21:0;;::::1;12486:19:1::0;;;12479:44;23808:15:0::1;12539:19:1::0;;;12532:35;23594:6:0;::::1;::::0;:22:::1;::::0;23624:18;;12241:19:1;;23594:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23858:48:0::1;::::0;;9326:25:1;;;9382:2;9367:18;;9360:34;;;23858:48:0::1;::::0;-1:-1:-1;9299:18:1;23858:48:0::1;;;;;;;23554:364;-1:-1:-1::0;;15498:16:0;:24;;-1:-1:-1;;15498:24:0;;;-1:-1:-1;;;;;;;;22160:1765:0:o;21302:850::-;-1:-1:-1;;;;;21484:17:0;;21422:7;21484:17;;;:6;:17;;;;;;21422:7;;21484:17;;:32;;;;-1:-1:-1;21505:11:0;;;;;;;21484:32;21480:98;;;-1:-1:-1;21549:17:0;;21480:98;-1:-1:-1;;;;;21592:14:0;;;;;;:6;:14;;;;;;;;:28;;;;-1:-1:-1;21610:10:0;;;;21592:28;21588:85;;;-1:-1:-1;21653:8:0;;21588:85;-1:-1:-1;;;;;21688:14:0;;;;;;:6;:14;;;;;;;;21687:15;:37;;;;-1:-1:-1;;;;;;21707:17:0;;;;;;:6;:17;;;;;;;;21706:18;21687:37;21683:216;;;21745:15;;;;;;;21741:147;;;-1:-1:-1;21797:17:0;;21741:147;;;-1:-1:-1;21871:1:0;21741:147;21911:17;21931:35;21961:4;21931:25;:6;21942:13;21931:10;:25::i;:35::-;22024:4;22006:24;;;;:9;:24;;;;;;21911:55;;-1:-1:-1;22006:39:0;;21911:55;22006:28;:39::i;:::-;21997:4;21979:24;;;;:9;:24;;;;;;;:66;;;;22061:42;;-1:-1:-1;;;;;22061:42:0;;;;;;;22093:9;160:25:1;;148:2;133:18;;14:177;22061:42:0;;;;;;;;22123:21;:6;22134:9;22123:10;:21::i;:::-;22116:28;21302:850;-1:-1:-1;;;;;;21302:850:0:o;2270:98::-;2328:7;2355:5;2359:1;2355;:5;:::i;2376:98::-;2434:7;2461:5;2465:1;2461;:5;:::i;2164:98::-;2222:7;2249:5;2253:1;2249;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:118::-;1483:5;1476:13;1469:21;1462:5;1459:32;1449:60;;1505:1;1502;1495:12;1520:241;1576:6;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1684:9;1671:23;1703:28;1725:5;1703:28;:::i;1766:388::-;1834:6;1842;1895:2;1883:9;1874:7;1870:23;1866:32;1863:52;;;1911:1;1908;1901:12;1863:52;1950:9;1937:23;1969:31;1994:5;1969:31;:::i;:::-;2019:5;-1:-1:-1;2076:2:1;2061:18;;2048:32;2089:33;2048:32;2089:33;:::i;:::-;2141:7;2131:17;;;1766:388;;;;;:::o;2159:456::-;2236:6;2244;2252;2305:2;2293:9;2284:7;2280:23;2276:32;2273:52;;;2321:1;2318;2311:12;2273:52;2360:9;2347:23;2379:31;2404:5;2379:31;:::i;:::-;2429:5;-1:-1:-1;2486:2:1;2471:18;;2458:32;2499:33;2458:32;2499:33;:::i;:::-;2159:456;;2551:7;;-1:-1:-1;;;2605:2:1;2590:18;;;;2577:32;;2159:456::o;2620:247::-;2679:6;2732:2;2720:9;2711:7;2707:23;2703:32;2700:52;;;2748:1;2745;2738:12;2700:52;2787:9;2774:23;2806:31;2831:5;2806:31;:::i;3061:444::-;3132:6;3140;3148;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;3256:9;3243:23;3275:28;3297:5;3275:28;:::i;:::-;3322:5;-1:-1:-1;3374:2:1;3359:18;;3346:32;;-1:-1:-1;3430:2:1;3415:18;;3402:32;3443:30;3402:32;3443:30;:::i;:::-;3492:7;3482:17;;;3061:444;;;;;:::o;3510:382::-;3575:6;3583;3636:2;3624:9;3615:7;3611:23;3607:32;3604:52;;;3652:1;3649;3642:12;3604:52;3691:9;3678:23;3710:31;3735:5;3710:31;:::i;:::-;3760:5;-1:-1:-1;3817:2:1;3802:18;;3789:32;3830:30;3789:32;3830:30;:::i;3897:180::-;3956:6;4009:2;3997:9;3988:7;3984:23;3980:32;3977:52;;;4025:1;4022;4015:12;3977:52;-1:-1:-1;4048:23:1;;3897:180;-1:-1:-1;3897:180:1:o;4082:385::-;4168:6;4176;4184;4192;4245:3;4233:9;4224:7;4220:23;4216:33;4213:53;;;4262:1;4259;4252:12;4213:53;-1:-1:-1;;4285:23:1;;;4355:2;4340:18;;4327:32;;-1:-1:-1;4406:2:1;4391:18;;4378:32;;4457:2;4442:18;4429:32;;-1:-1:-1;4082:385:1;-1:-1:-1;4082:385:1:o;4680:248::-;4748:6;4756;4809:2;4797:9;4788:7;4784:23;4780:32;4777:52;;;4825:1;4822;4815:12;4777:52;-1:-1:-1;;4848:23:1;;;4918:2;4903:18;;;4890:32;;-1:-1:-1;4680:248:1:o;5395:356::-;5597:2;5579:21;;;5616:18;;;5609:30;5675:34;5670:2;5655:18;;5648:62;5742:2;5727:18;;5395:356::o;5756:127::-;5817:10;5812:3;5808:20;5805:1;5798:31;5848:4;5845:1;5838:15;5872:4;5869:1;5862:15;5888:168;5961:9;;;5992;;6009:15;;;6003:22;;5989:37;5979:71;;6030:18;;:::i;6061:217::-;6101:1;6127;6117:132;;6171:10;6166:3;6162:20;6159:1;6152:31;6206:4;6203:1;6196:15;6234:4;6231:1;6224:15;6117:132;-1:-1:-1;6263:9:1;;6061:217::o;6283:251::-;6353:6;6406:2;6394:9;6385:7;6381:23;6377:32;6374:52;;;6422:1;6419;6412:12;6374:52;6454:9;6448:16;6473:31;6498:5;6473:31;:::i;6848:402::-;7050:2;7032:21;;;7089:2;7069:18;;;7062:30;7128:34;7123:2;7108:18;;7101:62;-1:-1:-1;;;7194:2:1;7179:18;;7172:36;7240:3;7225:19;;6848:402::o;7255:125::-;7320:9;;;7341:10;;;7338:36;;;7354:18;;:::i;8713:245::-;8780:6;8833:2;8821:9;8812:7;8808:23;8804:32;8801:52;;;8849:1;8846;8839:12;8801:52;8881:9;8875:16;8900:28;8922:5;8900:28;:::i;8963:184::-;9033:6;9086:2;9074:9;9065:7;9061:23;9057:32;9054:52;;;9102:1;9099;9092:12;9054:52;-1:-1:-1;9125:16:1;;8963:184;-1:-1:-1;8963:184:1:o;10639:127::-;10700:10;10695:3;10691:20;10688:1;10681:31;10731:4;10728:1;10721:15;10755:4;10752:1;10745:15;10771:980;11033:4;11081:3;11070:9;11066:19;11112:6;11101:9;11094:25;11138:2;11176:6;11171:2;11160:9;11156:18;11149:34;11219:3;11214:2;11203:9;11199:18;11192:31;11243:6;11278;11272:13;11309:6;11301;11294:22;11347:3;11336:9;11332:19;11325:26;;11386:2;11378:6;11374:15;11360:29;;11407:1;11417:195;11431:6;11428:1;11425:13;11417:195;;;11496:13;;-1:-1:-1;;;;;11492:39:1;11480:52;;11587:15;;;;11552:12;;;;11528:1;11446:9;11417:195;;;-1:-1:-1;;;;;;;11668:32:1;;;;11663:2;11648:18;;11641:60;-1:-1:-1;;;11732:3:1;11717:19;11710:35;11629:3;10771:980;-1:-1:-1;;;10771:980:1:o;12578:306::-;12666:6;12674;12682;12735:2;12723:9;12714:7;12710:23;12706:32;12703:52;;;12751:1;12748;12741:12;12703:52;12780:9;12774:16;12764:26;;12830:2;12819:9;12815:18;12809:25;12799:35;;12874:2;12863:9;12859:18;12853:25;12843:35;;12578:306;;;;;:::o;12889:128::-;12956:9;;;12977:11;;;12974:37;;;12991:18;;:::i

Swarm Source

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