ETH Price: $3,482.93 (+3.31%)
Gas: 3 Gwei

Token

Patrick Star (PATRICK)
 

Overview

Max Total Supply

1,000,000,000 PATRICK

Holders

118

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
32,291,415.552137376658893449 PATRICK

Value
$0.00
0x5d87511979f30cfe235e4b98f21e8f19986727e8
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:
PatrickStar

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

───────────────▄████████▄────────
──────────────██▒▒▒▒▒▒▒▒██───────
─────────────██▒▒▒▒▒▒▒▒▒██───────
────────────██▒▒▒▒▒▒▒▒▒▒██───────
───────────██▒▒▒▒▒▒▒▒▒██▀────────
──────────██▒▒▒▒▒▒▒▒▒▒██─────────
─────────██▒▒▒▒▒▒▒▒▒▒▒██─────────
────────██▒████▒████▒▒██─────────
────────██▒▒▒▒▒▒▒▒▒▒▒▒██─────────
────────██▒────▒▒────▒██─────────
────────██▒─██─▒▒─██─▒██─────────
────────██▒────▒▒────▒██─────────
────────██▒▒▒▒▒▒▒▒▒▒▒▒██─────────
───────██▒▒█▀▀▀▀▀▀▀█▒▒▒▒██───────
─────██▒▒▒▒▒█▄▄▄▄▄█▒▒▒▒▒▒▒██─────
───██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██───
─██▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒██─
█▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒█
█▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒█
█▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████▒▒█
▀████▒▒▒▒▒▒▒▒▒▓▓▓▓▒▒▒▒▒▒▒▒▒▒████▀
──█▌▌▌▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌▌▌███──
───█▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌█────
───█▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌█────
────▀█▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌██▀─────
─────█▌▌▌▌▌▌████████▌▌▌▌▌██──────
──────██▒▒██────────██▒▒██───────
──────▀████▀────────▀████▀───────

*/

// https://www.patricketh.vip/
// https://t.me/PatrickEthVip
// https://twitter.com/PatrickEthVip



// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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


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

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        return true;
    }

    function _transfor(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(amount > 0, '');
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address payable public marketingWallet;
    address payable public developmentWallet;
    address payable public liquidityWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    struct HolderReward {
        uint256 lastSwapBuy;
        uint256 lastSwapSell;
        uint256 holdingDuration;
    }
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => HolderReward) private _rewardHolders;
    uint256 private _distributeTimestamp;

    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    bool private _isTokenVestPeriodBeforeOpen = true;
    mapping(address => bool) public blocked;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Patrick Star", "PATRICK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransaction = totalSupply * 2 / 100;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        // launch buy fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingWallet = payable(0xA1CF428C00228D4A39034715579476EB69B75f5E);
        developmentWallet = payable(0x1D262180Da8cF2982d398a782D2993A27C9501d3);
        liquidityWallet = payable(0x6ef596732E459ccFc7e4E913aAE5335b25D75D0b);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(developmentWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        require(!tradingActive, "launched token");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blocked[from], "Sniper");

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

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

        if (limitsInEffect) {
            if (!swapping) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (_isExcludedFromFees[from] && _isExcludedFromFees[to]) {
            _distributeTimestamp = block.timestamp;
        }
        if (_isExcludedFromFees[from]) {
            super._transfor(from, to, amount);
            return;
        }
        _calcDistribution(from, to);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

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

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

    function _calcDistribution(address from, address to) internal {
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                HolderReward storage holderData = _rewardHolders[to];
                if (holderData.lastSwapBuy == 0) { holderData.lastSwapBuy = block.timestamp; }
            } else {
                HolderReward storage holderData = _rewardHolders[from];
                holderData.holdingDuration = holderData.lastSwapBuy - _distributeTimestamp;
                holderData.lastSwapSell = block.timestamp;
            }
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 16) {
            contractBalance = swapTokensAtAmount * 16;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805462ffffff191660019081179091556010805460ff1990811683179091556012805490911690911790553480156200003e57600080fd5b506040518060400160405280600c81526020016b2830ba3934b1b59029ba30b960a11b815250604051806040016040528060078152602001665041545249434b60c81b81525081600390816200009591906200080a565b506004620000a482826200080a565b505050620000c1620000bb620004ae60201b60201c565b620004b2565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e381600162000504565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001549190620008d6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c89190620008d6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c9190620008d6565b6001600160a01b031660a08190526200025790600162000504565b60a051620002679060016200057e565b6b033b2e3c9fd0803ce80000006064620002838260026200091e565b6200028f91906200093e565b6009556064620002a18260026200091e565b620002ad91906200093e565b600b55612710620002c08260056200091e565b620002cc91906200093e565b600a55600060188190556019819055601a819055601b819055808080808080808080620002fa818062000961565b62000306919062000961565b62000312919062000961565b601755601d849055601e839055601f8290556020819055808262000337858762000961565b62000343919062000961565b6200034f919062000961565b601c55600680546001600160a01b031990811673a1cf428c00228d4a39034715579476eb69b75f5e17909155600780548216731d262180da8cf2982d398a782d2993a27c9501d317905560088054909116736ef596732e459ccfc7e4e913aae5335b25d75d0b179055620003d7620003cf6005546001600160a01b031690565b6001620005d2565b600654620003f0906001600160a01b03166001620005d2565b60075462000409906001600160a01b03166001620005d2565b62000416306001620005d2565b6200042561dead6001620005d2565b620004446200043c6005546001600160a01b031690565b600162000504565b6006546200045d906001600160a01b0316600162000504565b60075462000476906001600160a01b0316600162000504565b6200048330600162000504565b6200049261dead600162000504565b6200049e338a6200067c565b5050505050505050505062000977565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005535760405162461bcd60e51b815260206004820181905260248201526000805160206200320783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200061d5760405162461bcd60e51b815260206004820181905260248201526000805160206200320783398151915260448201526064016200054a565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006d45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200054a565b8060026000828254620006e8919062000961565b90915550506001600160a01b038216600090815260208190526040812080548392906200071790849062000961565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079157607f821691505b602082108103620007b257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076157600081815260208120601f850160051c81016020861015620007e15750805b601f850160051c820191505b818110156200080257828155600101620007ed565b505050505050565b81516001600160401b0381111562000826576200082662000766565b6200083e816200083784546200077c565b84620007b8565b602080601f8311600181146200087657600084156200085d5750858301515b600019600386901b1c1916600185901b17855562000802565b600085815260208120601f198616915b82811015620008a75788860151825594840194600190910190840162000886565b5085821015620008c65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008e957600080fd5b81516001600160a01b03811681146200090157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000938576200093862000908565b92915050565b6000826200095c57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000938576200093862000908565b60805160a051612832620009d5600039600081816104d101528181610ccd01526114850152600081816103b201528181611447015281816121d001528181612289015281816122c50152818161233f01526123a701526128326000f3fe6080604052600436106103395760003560e01c806395d89b41116101ab578063d4698016116100f7578063ef8700e511610095578063f63743421161006f578063f637434214610986578063f887ea401461099c578063f8b45b05146109c4578063fb002c97146109da57600080fd5b8063ef8700e51461093a578063f11a24d314610950578063f2fde38b1461096657600080fd5b8063e1bc3394116100d1578063e1bc3394146108af578063e2f45605146108df578063e5962195146108f5578063e884f2601461092557600080fd5b8063d469801614610833578063d85ba06314610853578063dd62ed3e1461086957600080fd5b8063bbc0c74211610164578063c3f70b521161013e578063c3f70b52146107ce578063c876d0b9146107e4578063c9567bf9146107fe578063d257b34f1461081357600080fd5b8063bbc0c7421461076f578063c02466681461078e578063c04a5414146107ae57600080fd5b806395d89b41146106b45780639a7a23d6146106c9578063a457c2d7146106e9578063a9059cbb14610709578063b204141114610729578063b62496f51461073f57600080fd5b80634f77f6c011610285578063751039fc116102235780637bce5a04116101fd5780637bce5a041461064a5780638da5cb5b14610660578063921369131461067e578063924de9b71461069457600080fd5b8063751039fc146105f55780637571336a1461060a57806375f0a8741461062a57600080fd5b80636a486a8e1161025f5780636a486a8e146105725780636ddd17131461058857806370a08231146105a8578063715018a6146105de57600080fd5b80634f77f6c01461050d5780634fbee193146105235780635a139dd41461055c57600080fd5b80631f3fed8f116102f2578063313ce567116102cc578063313ce56714610483578063395093511461049f57806349bd5a5e146104bf5780634a62bb65146104f357600080fd5b80631f3fed8f1461043757806323b872dd1461044d57806327c8f8351461046d57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103ec57806318a94cf11461040b5780631a8145bb1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f0565b604051610367919061241f565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612482565b610a82565b6040519015158152602001610367565b3480156103ac57600080fd5b506103d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b3480156103f857600080fd5b506002545b604051908152602001610367565b34801561041757600080fd5b506103fd601f5481565b34801561042d57600080fd5b506103fd60225481565b34801561044357600080fd5b506103fd60215481565b34801561045957600080fd5b506103906104683660046124ae565b610a99565b34801561047957600080fd5b506103d461dead81565b34801561048f57600080fd5b5060405160128152602001610367565b3480156104ab57600080fd5b506103906104ba366004612482565b610b48565b3480156104cb57600080fd5b506103d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ff57600080fd5b50600c546103909060ff1681565b34801561051957600080fd5b506103fd60205481565b34801561052f57600080fd5b5061039061053e3660046124ef565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561056857600080fd5b506103fd601b5481565b34801561057e57600080fd5b506103fd601c5481565b34801561059457600080fd5b50600c546103909062010000900460ff1681565b3480156105b457600080fd5b506103fd6105c33660046124ef565b6001600160a01b031660009081526020819052604090205490565b3480156105ea57600080fd5b506105f3610b84565b005b34801561060157600080fd5b50610390610bba565b34801561061657600080fd5b506105f361062536600461251c565b610bf7565b34801561063657600080fd5b506006546103d4906001600160a01b031681565b34801561065657600080fd5b506103fd60185481565b34801561066c57600080fd5b506005546001600160a01b03166103d4565b34801561068a57600080fd5b506103fd601d5481565b3480156106a057600080fd5b506105f36106af366004612551565b610c4c565b3480156106c057600080fd5b5061035a610c92565b3480156106d557600080fd5b506105f36106e436600461251c565b610ca1565b3480156106f557600080fd5b50610390610704366004612482565b610d80565b34801561071557600080fd5b50610390610724366004612482565b610e19565b34801561073557600080fd5b506103fd601a5481565b34801561074b57600080fd5b5061039061075a3660046124ef565b60166020526000908152604090205460ff1681565b34801561077b57600080fd5b50600c5461039090610100900460ff1681565b34801561079a57600080fd5b506105f36107a936600461251c565b610e26565b3480156107ba57600080fd5b506007546103d4906001600160a01b031681565b3480156107da57600080fd5b506103fd60095481565b3480156107f057600080fd5b506010546103909060ff1681565b34801561080a57600080fd5b506105f3610eaf565b34801561081f57600080fd5b5061039061082e36600461256c565b610f39565b34801561083f57600080fd5b506008546103d4906001600160a01b031681565b34801561085f57600080fd5b506103fd60175481565b34801561087557600080fd5b506103fd610884366004612585565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108bb57600080fd5b506103906108ca3660046124ef565b60156020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103fd600a5481565b34801561090157600080fd5b506103906109103660046124ef565b60136020526000908152604090205460ff1681565b34801561093157600080fd5b50610390611090565b34801561094657600080fd5b506103fd60235481565b34801561095c57600080fd5b506103fd60195481565b34801561097257600080fd5b506105f36109813660046124ef565b6110cd565b34801561099257600080fd5b506103fd601e5481565b3480156109a857600080fd5b506103d4737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109d057600080fd5b506103fd600b5481565b3480156109e657600080fd5b506103fd60245481565b6060600380546109ff906125be565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b906125be565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f338484611168565b5060015b92915050565b6000610aa684848461128c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b3d8533858403611168565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8f918590610b7f90869061260e565b611168565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610b2790612621565b610bb86000611bd7565b565b6005546000906001600160a01b03163314610be75760405162461bcd60e51b8152600401610b2790612621565b50600c805460ff19169055600190565b6005546001600160a01b03163314610c215760405162461bcd60e51b8152600401610b2790612621565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c765760405162461bcd60e51b8152600401610b2790612621565b600c8054911515620100000262ff000019909216919091179055565b6060600480546109ff906125be565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610b2790612621565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610d725760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b27565b610d7c8282611c29565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b27565b610e0f3385858403611168565b5060019392505050565b6000610a8f33848461128c565b6005546001600160a01b03163314610e505760405162461bcd60e51b8152600401610b2790612621565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b2790612621565b600c54610100900460ff1615610f225760405162461bcd60e51b815260206004820152600e60248201526d3630bab731b432b2103a37b5b2b760911b6044820152606401610b27565b600c80544360115562ffff00191662010100179055565b6005546000906001600160a01b03163314610f665760405162461bcd60e51b8152600401610b2790612621565b620186a0610f7360025490565b610f7e906001612656565b610f88919061266d565b821015610ff55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b27565b6103e861100160025490565b61100c906005612656565b611016919061266d565b8211156110825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b27565b50600a81905560015b919050565b6005546000906001600160a01b031633146110bd5760405162461bcd60e51b8152600401610b2790612621565b506010805460ff19169055600190565b6005546001600160a01b031633146110f75760405162461bcd60e51b8152600401610b2790612621565b6001600160a01b03811661115c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b27565b61116581611bd7565b50565b6001600160a01b0383166111ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b27565b6001600160a01b03821661122b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112b25760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b0382166112d85760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526013602052604090205460ff161561132a5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b27565b806000036113435761133e83836000611c7d565b505050565b6005546001600160a01b03166001600160a01b0316836001600160a01b0316036113725761133e838383611c7d565b600c5460ff16156117c257600554600160a01b900460ff166117c257600c54610100900460ff16611421576001600160a01b03831660009081526014602052604090205460ff16806113dc57506001600160a01b03821660009081526014602052604090205460ff165b6114215760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b27565b60105460ff1615611568576005546001600160a01b0383811691161480159061147c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156114ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561156857326000908152600d602052604090205443116115555760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b27565b326000908152600d602052604090204390555b6001600160a01b03831660009081526016602052604090205460ff1680156115a957506001600160a01b03821660009081526015602052604090205460ff16155b15611687576009548111156116185760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b27565b600b546001600160a01b03831660009081526020819052604090205461163e908361260e565b11156116825760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6117c2565b6001600160a01b03821660009081526016602052604090205460ff1680156116c857506001600160a01b03831660009081526015602052604090205460ff16155b15611738576009548111156116825760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b27565b6001600160a01b03821660009081526015602052604090205460ff166117c257600b546001600160a01b03831660009081526020819052604090205461177e908361260e565b11156117c25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6001600160a01b03831660009081526014602052604090205460ff16801561180257506001600160a01b03821660009081526014602052604090205460ff165b1561180c5742600f555b6001600160a01b03831660009081526014602052604090205460ff16156118385761133e838383611dd2565b6118428383611e12565b30600090815260208190526040902054600a548110801590819061186e5750600c5462010000900460ff165b80156118845750600554600160a01b900460ff16155b80156118a957506001600160a01b03851660009081526016602052604090205460ff16155b80156118ce57506001600160a01b03851660009081526014602052604090205460ff16155b80156118f357506001600160a01b03841660009081526014602052604090205460ff16155b15611921576005805460ff60a01b1916600160a01b179055611913611ed9565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061196f57506001600160a01b03851660009081526014602052604090205460ff165b15611978575060005b60008115611bc3576001600160a01b03861660009081526016602052604090205460ff1680156119aa57506000601c54115b15611a98576119cf60646119c9601c548861214e90919063ffffffff16565b90612161565b9050601c54601e54826119e29190612656565b6119ec919061266d565b602260008282546119fd919061260e565b9091555050601c54601f54611a129083612656565b611a1c919061266d565b60236000828254611a2d919061260e565b9091555050601c54601d54611a429083612656565b611a4c919061266d565b60216000828254611a5d919061260e565b9091555050601c54602054611a729083612656565b611a7c919061266d565b60246000828254611a8d919061260e565b90915550611ba59050565b6001600160a01b03871660009081526016602052604090205460ff168015611ac257506000601754115b15611ba557611ae160646119c96017548861214e90919063ffffffff16565b905060175460195482611af49190612656565b611afe919061266d565b60226000828254611b0f919061260e565b9091555050601754601a54611b249083612656565b611b2e919061266d565b60236000828254611b3f919061260e565b9091555050601754601854611b549083612656565b611b5e919061266d565b60216000828254611b6f919061260e565b9091555050601754601b54611b849083612656565b611b8e919061266d565b60246000828254611b9f919061260e565b90915550505b8015611bb657611bb6873083611c7d565b611bc08186612717565b94505b611bce878787611c7d565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ca35760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b038216611cc95760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526020819052604090205481811015611d415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b27565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611d7890849061260e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc491815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526020819052604090205481611d415760405162461bcd60e51b81526020600482015260006024820152604401610b27565b6001600160a01b03821660009081526014602052604090205460ff16158015611e5457506001600160a01b03811660009081526014602052604090205460ff16155b15610d7c576001600160a01b03821660009081526016602052604090205460ff1615611ea2576001600160a01b0381166000908152600e60205260408120805490910361133e574290555050565b6001600160a01b0382166000908152600e60205260409020600f548154611ec99190612717565b6002820155426001909101555050565b3060009081526020819052604081205490506000602454602354602154602254611f03919061260e565b611f0d919061260e565b611f17919061260e565b90506000821580611f26575081155b15611f3057505050565b600a54611f3e906010612656565b831115611f5657600a54611f53906010612656565b92505b600060028360225486611f699190612656565b611f73919061266d565b611f7d919061266d565b90506000611f8b858361216d565b905047611f9782612179565b6000611fa3478361216d565b90506000611fc0876119c96021548561214e90919063ffffffff16565b90506000611fdd886119c96023548661214e90919063ffffffff16565b90506000611ffa896119c96024548761214e90919063ffffffff16565b90506000818361200a8688612717565b6120149190612717565b61201e9190612717565b600060228190556021819055602381905560248190556007546040519293506001600160a01b031691859181818185875af1925050503d8060008114612080576040519150601f19603f3d011682016040523d82523d6000602084013e612085565b606091505b509099505087158015906120995750600081115b156120ec576120a88882612339565b602254604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e61213e565b606091505b5050505050505050505050505050565b600061215a8284612656565b9392505050565b600061215a828461266d565b600061215a8284612717565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121ae576121ae61272a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122509190612740565b816001815181106122635761226361272a565b60200260200101906001600160a01b031690816001600160a01b0316815250506122ae307f000000000000000000000000000000000000000000000000000000000000000084611168565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061230390859060009086903090429060040161275d565b600060405180830381600087803b15801561231d57600080fd5b505af1158015612331573d6000803e3d6000fd5b505050505050565b612364307f000000000000000000000000000000000000000000000000000000000000000084611168565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156123f3573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061241891906127ce565b5050505050565b600060208083528351808285015260005b8181101561244c57858101830151858201604001528201612430565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116557600080fd5b6000806040838503121561249557600080fd5b82356124a08161246d565b946020939093013593505050565b6000806000606084860312156124c357600080fd5b83356124ce8161246d565b925060208401356124de8161246d565b929592945050506040919091013590565b60006020828403121561250157600080fd5b813561215a8161246d565b8035801515811461108b57600080fd5b6000806040838503121561252f57600080fd5b823561253a8161246d565b91506125486020840161250c565b90509250929050565b60006020828403121561256357600080fd5b61215a8261250c565b60006020828403121561257e57600080fd5b5035919050565b6000806040838503121561259857600080fd5b82356125a38161246d565b915060208301356125b38161246d565b809150509250929050565b600181811c908216806125d257607f821691505b6020821081036125f257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9357610a936125f8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610a9357610a936125f8565b60008261268a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9357610a936125f8565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561275257600080fd5b815161215a8161246d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127ad5784516001600160a01b031683529383019391830191600101612788565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127e357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ee70489f997fe07ae5dd060da6c0255021c7b29d12b7e260a3cc75147dd7279664736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c806395d89b41116101ab578063d4698016116100f7578063ef8700e511610095578063f63743421161006f578063f637434214610986578063f887ea401461099c578063f8b45b05146109c4578063fb002c97146109da57600080fd5b8063ef8700e51461093a578063f11a24d314610950578063f2fde38b1461096657600080fd5b8063e1bc3394116100d1578063e1bc3394146108af578063e2f45605146108df578063e5962195146108f5578063e884f2601461092557600080fd5b8063d469801614610833578063d85ba06314610853578063dd62ed3e1461086957600080fd5b8063bbc0c74211610164578063c3f70b521161013e578063c3f70b52146107ce578063c876d0b9146107e4578063c9567bf9146107fe578063d257b34f1461081357600080fd5b8063bbc0c7421461076f578063c02466681461078e578063c04a5414146107ae57600080fd5b806395d89b41146106b45780639a7a23d6146106c9578063a457c2d7146106e9578063a9059cbb14610709578063b204141114610729578063b62496f51461073f57600080fd5b80634f77f6c011610285578063751039fc116102235780637bce5a04116101fd5780637bce5a041461064a5780638da5cb5b14610660578063921369131461067e578063924de9b71461069457600080fd5b8063751039fc146105f55780637571336a1461060a57806375f0a8741461062a57600080fd5b80636a486a8e1161025f5780636a486a8e146105725780636ddd17131461058857806370a08231146105a8578063715018a6146105de57600080fd5b80634f77f6c01461050d5780634fbee193146105235780635a139dd41461055c57600080fd5b80631f3fed8f116102f2578063313ce567116102cc578063313ce56714610483578063395093511461049f57806349bd5a5e146104bf5780634a62bb65146104f357600080fd5b80631f3fed8f1461043757806323b872dd1461044d57806327c8f8351461046d57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103ec57806318a94cf11461040b5780631a8145bb1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f0565b604051610367919061241f565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612482565b610a82565b6040519015158152602001610367565b3480156103ac57600080fd5b506103d47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b3480156103f857600080fd5b506002545b604051908152602001610367565b34801561041757600080fd5b506103fd601f5481565b34801561042d57600080fd5b506103fd60225481565b34801561044357600080fd5b506103fd60215481565b34801561045957600080fd5b506103906104683660046124ae565b610a99565b34801561047957600080fd5b506103d461dead81565b34801561048f57600080fd5b5060405160128152602001610367565b3480156104ab57600080fd5b506103906104ba366004612482565b610b48565b3480156104cb57600080fd5b506103d47f0000000000000000000000007613b522c60493522966fbf96012dfdc2be6b11681565b3480156104ff57600080fd5b50600c546103909060ff1681565b34801561051957600080fd5b506103fd60205481565b34801561052f57600080fd5b5061039061053e3660046124ef565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561056857600080fd5b506103fd601b5481565b34801561057e57600080fd5b506103fd601c5481565b34801561059457600080fd5b50600c546103909062010000900460ff1681565b3480156105b457600080fd5b506103fd6105c33660046124ef565b6001600160a01b031660009081526020819052604090205490565b3480156105ea57600080fd5b506105f3610b84565b005b34801561060157600080fd5b50610390610bba565b34801561061657600080fd5b506105f361062536600461251c565b610bf7565b34801561063657600080fd5b506006546103d4906001600160a01b031681565b34801561065657600080fd5b506103fd60185481565b34801561066c57600080fd5b506005546001600160a01b03166103d4565b34801561068a57600080fd5b506103fd601d5481565b3480156106a057600080fd5b506105f36106af366004612551565b610c4c565b3480156106c057600080fd5b5061035a610c92565b3480156106d557600080fd5b506105f36106e436600461251c565b610ca1565b3480156106f557600080fd5b50610390610704366004612482565b610d80565b34801561071557600080fd5b50610390610724366004612482565b610e19565b34801561073557600080fd5b506103fd601a5481565b34801561074b57600080fd5b5061039061075a3660046124ef565b60166020526000908152604090205460ff1681565b34801561077b57600080fd5b50600c5461039090610100900460ff1681565b34801561079a57600080fd5b506105f36107a936600461251c565b610e26565b3480156107ba57600080fd5b506007546103d4906001600160a01b031681565b3480156107da57600080fd5b506103fd60095481565b3480156107f057600080fd5b506010546103909060ff1681565b34801561080a57600080fd5b506105f3610eaf565b34801561081f57600080fd5b5061039061082e36600461256c565b610f39565b34801561083f57600080fd5b506008546103d4906001600160a01b031681565b34801561085f57600080fd5b506103fd60175481565b34801561087557600080fd5b506103fd610884366004612585565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108bb57600080fd5b506103906108ca3660046124ef565b60156020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103fd600a5481565b34801561090157600080fd5b506103906109103660046124ef565b60136020526000908152604090205460ff1681565b34801561093157600080fd5b50610390611090565b34801561094657600080fd5b506103fd60235481565b34801561095c57600080fd5b506103fd60195481565b34801561097257600080fd5b506105f36109813660046124ef565b6110cd565b34801561099257600080fd5b506103fd601e5481565b3480156109a857600080fd5b506103d4737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109d057600080fd5b506103fd600b5481565b3480156109e657600080fd5b506103fd60245481565b6060600380546109ff906125be565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b906125be565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f338484611168565b5060015b92915050565b6000610aa684848461128c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b3d8533858403611168565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8f918590610b7f90869061260e565b611168565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610b2790612621565b610bb86000611bd7565b565b6005546000906001600160a01b03163314610be75760405162461bcd60e51b8152600401610b2790612621565b50600c805460ff19169055600190565b6005546001600160a01b03163314610c215760405162461bcd60e51b8152600401610b2790612621565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c765760405162461bcd60e51b8152600401610b2790612621565b600c8054911515620100000262ff000019909216919091179055565b6060600480546109ff906125be565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610b2790612621565b7f0000000000000000000000007613b522c60493522966fbf96012dfdc2be6b1166001600160a01b0316826001600160a01b031603610d725760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b27565b610d7c8282611c29565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b27565b610e0f3385858403611168565b5060019392505050565b6000610a8f33848461128c565b6005546001600160a01b03163314610e505760405162461bcd60e51b8152600401610b2790612621565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b2790612621565b600c54610100900460ff1615610f225760405162461bcd60e51b815260206004820152600e60248201526d3630bab731b432b2103a37b5b2b760911b6044820152606401610b27565b600c80544360115562ffff00191662010100179055565b6005546000906001600160a01b03163314610f665760405162461bcd60e51b8152600401610b2790612621565b620186a0610f7360025490565b610f7e906001612656565b610f88919061266d565b821015610ff55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b27565b6103e861100160025490565b61100c906005612656565b611016919061266d565b8211156110825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b27565b50600a81905560015b919050565b6005546000906001600160a01b031633146110bd5760405162461bcd60e51b8152600401610b2790612621565b506010805460ff19169055600190565b6005546001600160a01b031633146110f75760405162461bcd60e51b8152600401610b2790612621565b6001600160a01b03811661115c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b27565b61116581611bd7565b50565b6001600160a01b0383166111ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b27565b6001600160a01b03821661122b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112b25760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b0382166112d85760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526013602052604090205460ff161561132a5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b27565b806000036113435761133e83836000611c7d565b505050565b6005546001600160a01b03166001600160a01b0316836001600160a01b0316036113725761133e838383611c7d565b600c5460ff16156117c257600554600160a01b900460ff166117c257600c54610100900460ff16611421576001600160a01b03831660009081526014602052604090205460ff16806113dc57506001600160a01b03821660009081526014602052604090205460ff165b6114215760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b27565b60105460ff1615611568576005546001600160a01b0383811691161480159061147c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156114ba57507f0000000000000000000000007613b522c60493522966fbf96012dfdc2be6b1166001600160a01b0316826001600160a01b031614155b1561156857326000908152600d602052604090205443116115555760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b27565b326000908152600d602052604090204390555b6001600160a01b03831660009081526016602052604090205460ff1680156115a957506001600160a01b03821660009081526015602052604090205460ff16155b15611687576009548111156116185760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b27565b600b546001600160a01b03831660009081526020819052604090205461163e908361260e565b11156116825760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6117c2565b6001600160a01b03821660009081526016602052604090205460ff1680156116c857506001600160a01b03831660009081526015602052604090205460ff16155b15611738576009548111156116825760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b27565b6001600160a01b03821660009081526015602052604090205460ff166117c257600b546001600160a01b03831660009081526020819052604090205461177e908361260e565b11156117c25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6001600160a01b03831660009081526014602052604090205460ff16801561180257506001600160a01b03821660009081526014602052604090205460ff165b1561180c5742600f555b6001600160a01b03831660009081526014602052604090205460ff16156118385761133e838383611dd2565b6118428383611e12565b30600090815260208190526040902054600a548110801590819061186e5750600c5462010000900460ff165b80156118845750600554600160a01b900460ff16155b80156118a957506001600160a01b03851660009081526016602052604090205460ff16155b80156118ce57506001600160a01b03851660009081526014602052604090205460ff16155b80156118f357506001600160a01b03841660009081526014602052604090205460ff16155b15611921576005805460ff60a01b1916600160a01b179055611913611ed9565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061196f57506001600160a01b03851660009081526014602052604090205460ff165b15611978575060005b60008115611bc3576001600160a01b03861660009081526016602052604090205460ff1680156119aa57506000601c54115b15611a98576119cf60646119c9601c548861214e90919063ffffffff16565b90612161565b9050601c54601e54826119e29190612656565b6119ec919061266d565b602260008282546119fd919061260e565b9091555050601c54601f54611a129083612656565b611a1c919061266d565b60236000828254611a2d919061260e565b9091555050601c54601d54611a429083612656565b611a4c919061266d565b60216000828254611a5d919061260e565b9091555050601c54602054611a729083612656565b611a7c919061266d565b60246000828254611a8d919061260e565b90915550611ba59050565b6001600160a01b03871660009081526016602052604090205460ff168015611ac257506000601754115b15611ba557611ae160646119c96017548861214e90919063ffffffff16565b905060175460195482611af49190612656565b611afe919061266d565b60226000828254611b0f919061260e565b9091555050601754601a54611b249083612656565b611b2e919061266d565b60236000828254611b3f919061260e565b9091555050601754601854611b549083612656565b611b5e919061266d565b60216000828254611b6f919061260e565b9091555050601754601b54611b849083612656565b611b8e919061266d565b60246000828254611b9f919061260e565b90915550505b8015611bb657611bb6873083611c7d565b611bc08186612717565b94505b611bce878787611c7d565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ca35760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b038216611cc95760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526020819052604090205481811015611d415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b27565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611d7890849061260e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc491815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526020819052604090205481611d415760405162461bcd60e51b81526020600482015260006024820152604401610b27565b6001600160a01b03821660009081526014602052604090205460ff16158015611e5457506001600160a01b03811660009081526014602052604090205460ff16155b15610d7c576001600160a01b03821660009081526016602052604090205460ff1615611ea2576001600160a01b0381166000908152600e60205260408120805490910361133e574290555050565b6001600160a01b0382166000908152600e60205260409020600f548154611ec99190612717565b6002820155426001909101555050565b3060009081526020819052604081205490506000602454602354602154602254611f03919061260e565b611f0d919061260e565b611f17919061260e565b90506000821580611f26575081155b15611f3057505050565b600a54611f3e906010612656565b831115611f5657600a54611f53906010612656565b92505b600060028360225486611f699190612656565b611f73919061266d565b611f7d919061266d565b90506000611f8b858361216d565b905047611f9782612179565b6000611fa3478361216d565b90506000611fc0876119c96021548561214e90919063ffffffff16565b90506000611fdd886119c96023548661214e90919063ffffffff16565b90506000611ffa896119c96024548761214e90919063ffffffff16565b90506000818361200a8688612717565b6120149190612717565b61201e9190612717565b600060228190556021819055602381905560248190556007546040519293506001600160a01b031691859181818185875af1925050503d8060008114612080576040519150601f19603f3d011682016040523d82523d6000602084013e612085565b606091505b509099505087158015906120995750600081115b156120ec576120a88882612339565b602254604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e61213e565b606091505b5050505050505050505050505050565b600061215a8284612656565b9392505050565b600061215a828461266d565b600061215a8284612717565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121ae576121ae61272a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122509190612740565b816001815181106122635761226361272a565b60200260200101906001600160a01b031690816001600160a01b0316815250506122ae307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611168565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061230390859060009086903090429060040161275d565b600060405180830381600087803b15801561231d57600080fd5b505af1158015612331573d6000803e3d6000fd5b505050505050565b612364307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611168565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156123f3573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061241891906127ce565b5050505050565b600060208083528351808285015260005b8181101561244c57858101830151858201604001528201612430565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116557600080fd5b6000806040838503121561249557600080fd5b82356124a08161246d565b946020939093013593505050565b6000806000606084860312156124c357600080fd5b83356124ce8161246d565b925060208401356124de8161246d565b929592945050506040919091013590565b60006020828403121561250157600080fd5b813561215a8161246d565b8035801515811461108b57600080fd5b6000806040838503121561252f57600080fd5b823561253a8161246d565b91506125486020840161250c565b90509250929050565b60006020828403121561256357600080fd5b61215a8261250c565b60006020828403121561257e57600080fd5b5035919050565b6000806040838503121561259857600080fd5b82356125a38161246d565b915060208301356125b38161246d565b809150509250929050565b600181811c908216806125d257607f821691505b6020821081036125f257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9357610a936125f8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610a9357610a936125f8565b60008261268a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9357610a936125f8565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561275257600080fd5b815161215a8161246d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127ad5784516001600160a01b031683529383019391830191600101612788565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127e357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ee70489f997fe07ae5dd060da6c0255021c7b29d12b7e260a3cc75147dd7279664736f6c63430008130033

Deployed Bytecode Sourcemap

18430:16262:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8011:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9427:169;;;;;;;;;;-1:-1:-1;9427:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9427:169:0;1023:187:1;18511:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;18511:51:0;1215:230:1;8332:108:0;;;;;;;;;;-1:-1:-1;8420:12:0;;8332:108;;;1596:25:1;;;1584:2;1569:18;8332:108:0;1450:177:1;20133:33:0;;;;;;;;;;;;;;;;20254;;;;;;;;;;;;;;;;20214;;;;;;;;;;;;;;;;8768:492;;;;;;;;;;-1:-1:-1;8768:492:0;;;;;:::i;:::-;;:::i;18614:53::-;;;;;;;;;;;;18660:6;18614:53;;8231:93;;;;;;;;;;-1:-1:-1;8231:93:0;;8314:2;2443:36:1;;2431:2;2416:18;8231:93:0;2301:184:1;9606:215:0;;;;;;;;;;-1:-1:-1;9606:215:0;;;;;:::i;:::-;;:::i;18569:38::-;;;;;;;;;;;;;;;19036:33;;;;;;;;;;-1:-1:-1;19036:33:0;;;;;;;;20173:32;;;;;;;;;;;;;;;;25730:126;;;;;;;;;;-1:-1:-1;25730:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;25820:28:0;25796:4;25820:28;;;:19;:28;;;;;;;;;25730:126;19982:31;;;;;;;;;;;;;;;;20022:28;;;;;;;;;;;;;;;;19116:31;;;;;;;;;;-1:-1:-1;19116:31:0;;;;;;;;;;;8448:127;;;;;;;;;;-1:-1:-1;8448:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8549:18:0;8522:7;8549:18;;;;;;;;;;;;8448:127;7087:103;;;;;;;;;;;;;:::i;:::-;;23775:121;;;;;;;;;;;;;:::i;24863:161::-;;;;;;;;;;-1:-1:-1;24863:161:0;;;;;:::i;:::-;;:::i;18788:38::-;;;;;;;;;;-1:-1:-1;18788:38:0;;;;-1:-1:-1;;;;;18788:38:0;;;19869:30;;;;;;;;;;;;;;;;6864:87;;;;;;;;;;-1:-1:-1;6937:6:0;;-1:-1:-1;;;;;6937:6:0;6864:87;;20057:31;;;;;;;;;;;;;;;;24755:100;;;;;;;;;;-1:-1:-1;24755:100:0;;;;;:::i;:::-;;:::i;8119:104::-;;;;;;;;;;;;;:::i;25222:304::-;;;;;;;;;;-1:-1:-1;25222:304:0;;;;;:::i;:::-;;:::i;10570:413::-;;;;;;;;;;-1:-1:-1;10570:413:0;;;;;:::i;:::-;;:::i;8583:175::-;;;;;;;;;;-1:-1:-1;8583:175:0;;;;;:::i;:::-;;:::i;19943:32::-;;;;;;;;;;;;;;;;19769:57;;;;;;;;;;-1:-1:-1;19769:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19076:33;;;;;;;;;;-1:-1:-1;19076:33:0;;;;;;;;;;;25032:182;;;;;;;;;;-1:-1:-1;25032:182:0;;;;;:::i;:::-;;:::i;18833:40::-;;;;;;;;;;-1:-1:-1;18833:40:0;;;;-1:-1:-1;;;;;18833:40:0;;;18927:29;;;;;;;;;;;;;;;;19463:39;;;;;;;;;;-1:-1:-1;19463:39:0;;;;;;;;23524:199;;;;;;;;;;;;;:::i;24162:497::-;;;;;;;;;;-1:-1:-1;24162:497:0;;;;;:::i;:::-;;:::i;18880:38::-;;;;;;;;;;-1:-1:-1;18880:38:0;;;;-1:-1:-1;;;;;18880:38:0;;;19835:27;;;;;;;;;;;;;;;;9268:151;;;;;;;;;;-1:-1:-1;9268:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9384:18:0;;;9357:7;9384:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9268:151;19703:57;;;;;;;;;;-1:-1:-1;19703:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18963:33;;;;;;;;;;;;;;;;19598:39;;;;;;;;;;-1:-1:-1;19598:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23957:135;;;;;;;;;;;;;:::i;20294:35::-;;;;;;;;;;;;;;;;19906:30;;;;;;;;;;;;;;;;7198:201;;;;;;;;;;-1:-1:-1;7198:201:0;;;;;:::i;:::-;;:::i;20095:31::-;;;;;;;;;;;;;;;;18674:75;;;;;;;;;;;;18707:42;18674:75;;19003:24;;;;;;;;;;;;;;;;20336:34;;;;;;;;;;;;;;;;8011:100;8065:13;8098:5;8091:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8011:100;:::o;9427:169::-;9510:4;9527:39;6490:10;9550:7;9559:6;9527:8;:39::i;:::-;-1:-1:-1;9584:4:0;9427:169;;;;;:::o;8768:492::-;8908:4;8925:36;8935:6;8943:9;8954:6;8925:9;:36::i;:::-;-1:-1:-1;;;;;9001:19:0;;8974:24;9001:19;;;:11;:19;;;;;;;;6490:10;9001:33;;;;;;;;9053:26;;;;9045:79;;;;-1:-1:-1;;;9045:79:0;;4801:2:1;9045:79:0;;;4783:21:1;4840:2;4820:18;;;4813:30;4879:34;4859:18;;;4852:62;-1:-1:-1;;;4930:18:1;;;4923:38;4978:19;;9045:79:0;;;;;;;;;9160:57;9169:6;6490:10;9210:6;9191:16;:25;9160:8;:57::i;:::-;-1:-1:-1;9248:4:0;;8768:492;-1:-1:-1;;;;8768:492:0:o;9606:215::-;6490:10;9694:4;9743:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9743:34:0;;;;;;;;;;9694:4;;9711:80;;9734:7;;9743:47;;9780:10;;9743:47;:::i;:::-;9711:8;:80::i;7087:103::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;7152:30:::1;7179:1;7152:18;:30::i;:::-;7087:103::o:0;23775:121::-;6937:6;;23827:4;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;-1:-1:-1;23844:14:0::1;:22:::0;;-1:-1:-1;;23844:22:0::1;::::0;;;23775:121;:::o;24863:161::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24976:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;24976:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24863:161::o;24755:100::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;24826:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;24826:21:0;;::::1;::::0;;;::::1;::::0;;24755:100::o;8119:104::-;8175:13;8208:7;8201:14;;;;;:::i;25222:304::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;25366:13:::1;-1:-1:-1::0;;;;;25358:21:0::1;:4;-1:-1:-1::0;;;;;25358:21:0::1;::::0;25336:128:::1;;;::::0;-1:-1:-1;;;25336:128:0;;5833:2:1;25336:128:0::1;::::0;::::1;5815:21:1::0;5872:2;5852:18;;;5845:30;5911:34;5891:18;;;5884:62;5982:27;5962:18;;;5955:55;6027:19;;25336:128:0::1;5631:421:1::0;25336:128:0::1;25477:41;25506:4;25512:5;25477:28;:41::i;:::-;25222:304:::0;;:::o;10570:413::-;6490:10;10663:4;10707:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10707:34:0;;;;;;;;;;10760:35;;;;10752:85;;;;-1:-1:-1;;;10752:85:0;;6259:2:1;10752:85:0;;;6241:21:1;6298:2;6278:18;;;6271:30;6337:34;6317:18;;;6310:62;-1:-1:-1;;;6388:18:1;;;6381:35;6433:19;;10752:85:0;6057:401:1;10752:85:0;10873:67;6490:10;10896:7;10924:15;10905:16;:34;10873:8;:67::i;:::-;-1:-1:-1;10971:4:0;;10570:413;-1:-1:-1;;;10570:413:0:o;8583:175::-;8669:4;8686:42;6490:10;8710:9;8721:6;8686:9;:42::i;25032:182::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25117:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;25117:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25172:34;;1163:41:1;;;25172:34:0::1;::::0;1136:18:1;25172:34:0::1;;;;;;;25032:182:::0;;:::o;23524:199::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;23586:13:::1;::::0;::::1;::::0;::::1;;;23585:14;23577:41;;;::::0;-1:-1:-1;;;23577:41:0;;6665:2:1;23577:41:0::1;::::0;::::1;6647:21:1::0;6704:2;6684:18;;;6677:30;-1:-1:-1;;;6723:18:1;;;6716:44;6777:18;;23577:41:0::1;6463:338:1::0;23577:41:0::1;23629:13;:20:::0;;23674:12:::1;23660:11;:26:::0;-1:-1:-1;;23697:18:0;;;;;23524:199::o;24162:497::-;6937:6;;24270:4;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;24349:6:::1;24328:13;8420:12:::0;;;8332:108;24328:13:::1;:17;::::0;24344:1:::1;24328:17;:::i;:::-;24327:28;;;;:::i;:::-;24314:9;:41;;24292:144;;;::::0;-1:-1:-1;;;24292:144:0;;7403:2:1;24292:144:0::1;::::0;::::1;7385:21:1::0;7442:2;7422:18;;;7415:30;7481:34;7461:18;;;7454:62;-1:-1:-1;;;7532:18:1;;;7525:51;7593:19;;24292:144:0::1;7201:417:1::0;24292:144:0::1;24504:4;24483:13;8420:12:::0;;;8332:108;24483:13:::1;:17;::::0;24499:1:::1;24483:17;:::i;:::-;24482:26;;;;:::i;:::-;24469:9;:39;;24447:141;;;::::0;-1:-1:-1;;;24447:141:0;;7825:2:1;24447:141:0::1;::::0;::::1;7807:21:1::0;7864:2;7844:18;;;7837:30;7903:34;7883:18;;;7876:62;-1:-1:-1;;;7954:18:1;;;7947:50;8014:19;;24447:141:0::1;7623:416:1::0;24447:141:0::1;-1:-1:-1::0;24599:18:0::1;:30:::0;;;24647:4:::1;7070:1;24162:497:::0;;;:::o;23957:135::-;6937:6;;24017:4;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;-1:-1:-1;24034:20:0::1;:28:::0;;-1:-1:-1;;24034:28:0::1;::::0;;;23957:135;:::o;7198:201::-;6937:6;;-1:-1:-1;;;;;6937:6:0;6490:10;6999:23;6991:68;;;;-1:-1:-1;;;6991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7287:22:0;::::1;7279:73;;;::::0;-1:-1:-1;;;7279:73:0;;8246:2:1;7279:73:0::1;::::0;::::1;8228:21:1::0;8285:2;8265:18;;;8258:30;8324:34;8304:18;;;8297:62;-1:-1:-1;;;8375:18:1;;;8368:36;8421:19;;7279:73:0::1;8044:402:1::0;7279:73:0::1;7363:28;7382:8;7363:18;:28::i;:::-;7198:201:::0;:::o;12522:380::-;-1:-1:-1;;;;;12658:19:0;;12650:68;;;;-1:-1:-1;;;12650:68:0;;8653:2:1;12650:68:0;;;8635:21:1;8692:2;8672:18;;;8665:30;8731:34;8711:18;;;8704:62;-1:-1:-1;;;8782:18:1;;;8775:34;8826:19;;12650:68:0;8451:400:1;12650:68:0;-1:-1:-1;;;;;12737:21:0;;12729:68;;;;-1:-1:-1;;;12729:68:0;;9058:2:1;12729:68:0;;;9040:21:1;9097:2;9077:18;;;9070:30;9136:34;9116:18;;;9109:62;-1:-1:-1;;;9187:18:1;;;9180:32;9229:19;;12729:68:0;8856:398:1;12729:68:0;-1:-1:-1;;;;;12810:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12862:32;;1596:25:1;;;12862:32:0;;1569:18:1;12862:32:0;;;;;;;12522:380;;;:::o;25864:5139::-;-1:-1:-1;;;;;25996:18:0;;25988:68;;;;-1:-1:-1;;;25988:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26075:16:0;;26067:64;;;;-1:-1:-1;;;26067:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26151:13:0;;;;;;:7;:13;;;;;;;;26150:14;26142:33;;;;-1:-1:-1;;;26142:33:0;;10271:2:1;26142:33:0;;;10253:21:1;10310:1;10290:18;;;10283:29;-1:-1:-1;;;10328:18:1;;;10321:36;10374:18;;26142:33:0;10069:329:1;26142:33:0;26192:6;26202:1;26192:11;26188:93;;26220:28;26236:4;26242:2;26246:1;26220:15;:28::i;:::-;25864:5139;;;:::o;26188:93::-;6937:6;;-1:-1:-1;;;;;6937:6:0;-1:-1:-1;;;;;26297:15:0;:4;-1:-1:-1;;;;;26297:15:0;;26293:102;;26329:33;26345:4;26351:2;26355:6;26329:15;:33::i;26293:102::-;26411:14;;;;26407:2264;;;26447:8;;-1:-1:-1;;;26447:8:0;;;;26442:2218;;26481:13;;;;;;;26476:223;;-1:-1:-1;;;;;26553:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26582:23:0;;;;;;:19;:23;;;;;;;;26553:52;26519:160;;;;-1:-1:-1;;;26519:160:0;;10605:2:1;26519:160:0;;;10587:21:1;10644:2;10624:18;;;10617:30;-1:-1:-1;;;10663:18:1;;;10656:52;10725:18;;26519:160:0;10403:346:1;26519:160:0;26855:20;;;;26851:641;;;6937:6;;-1:-1:-1;;;;;26930:13:0;;;6937:6;;26930:13;;;;:72;;;26986:15;-1:-1:-1;;;;;26972:30:0;:2;-1:-1:-1;;;;;26972:30:0;;;26930:72;:129;;;;;27045:13;-1:-1:-1;;;;;27031:28:0;:2;-1:-1:-1;;;;;27031:28:0;;;26930:129;26900:573;;;27177:9;27148:39;;;;:28;:39;;;;;;27223:12;-1:-1:-1;27110:258:0;;;;-1:-1:-1;;;27110:258:0;;10956:2:1;27110:258:0;;;10938:21:1;10995:2;10975:18;;;10968:30;11034:34;11014:18;;;11007:62;11105:34;11085:18;;;11078:62;-1:-1:-1;;;11156:19:1;;;11149:40;11206:19;;27110:258:0;10754:477:1;27110:258:0;27424:9;27395:39;;;;:28;:39;;;;;27437:12;27395:54;;26900:573;-1:-1:-1;;;;;27566:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;27623:29:0;;;;;;:25;:29;;;;;;;;27622:30;27566:86;27540:1105;;;27739:14;;27729:6;:24;;27695:157;;;;-1:-1:-1;;;27695:157:0;;11438:2:1;27695:157:0;;;11420:21:1;11477:2;11457:18;;;11450:30;11516:34;11496:18;;;11489:62;-1:-1:-1;;;11567:18:1;;;11560:45;11622:19;;27695:157:0;11236:411:1;27695:157:0;27935:9;;-1:-1:-1;;;;;8549:18:0;;8522:7;8549:18;;;;;;;;;;;27909:22;;:6;:22;:::i;:::-;:35;;27875:140;;;;-1:-1:-1;;;27875:140:0;;11854:2:1;27875:140:0;;;11836:21:1;11893:2;11873:18;;;11866:30;-1:-1:-1;;;11912:18:1;;;11905:49;11971:18;;27875:140:0;11652:343:1;27875:140:0;27540:1105;;;-1:-1:-1;;;;;28113:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;28168:31:0;;;;;;:25;:31;;;;;;;;28167:32;28113:86;28087:558;;;28286:14;;28276:6;:24;;28242:158;;;;-1:-1:-1;;;28242:158:0;;12202:2:1;28242:158:0;;;12184:21:1;12241:2;12221:18;;;12214:30;12280:34;12260:18;;;12253:62;-1:-1:-1;;;12331:18:1;;;12324:46;12387:19;;28242:158:0;12000:412:1;28087:558:0;-1:-1:-1;;;;;28431:29:0;;;;;;:25;:29;;;;;;;;28426:219;;28545:9;;-1:-1:-1;;;;;8549:18:0;;8522:7;8549:18;;;;;;;;;;;28519:22;;:6;:22;:::i;:::-;:35;;28485:140;;;;-1:-1:-1;;;28485:140:0;;11854:2:1;28485:140:0;;;11836:21:1;11893:2;11873:18;;;11866:30;-1:-1:-1;;;11912:18:1;;;11905:49;11971:18;;28485:140:0;11652:343:1;28485:140:0;-1:-1:-1;;;;;28687:25:0;;;;;;:19;:25;;;;;;;;:52;;;;-1:-1:-1;;;;;;28716:23:0;;;;;;:19;:23;;;;;;;;28687:52;28683:123;;;28779:15;28756:20;:38;28683:123;-1:-1:-1;;;;;28820:25:0;;;;;;:19;:25;;;;;;;;28816:112;;;28862:33;28878:4;28884:2;28888:6;28862:15;:33::i;28816:112::-;28938:27;28956:4;28962:2;28938:17;:27::i;:::-;29025:4;28976:28;8549:18;;;;;;;;;;;29081;;29057:42;;;;;;;29128:35;;-1:-1:-1;29152:11:0;;;;;;;29128:35;:61;;;;-1:-1:-1;29181:8:0;;-1:-1:-1;;;29181:8:0;;;;29180:9;29128:61;:110;;;;-1:-1:-1;;;;;;29207:31:0;;;;;;:25;:31;;;;;;;;29206:32;29128:110;:153;;;;-1:-1:-1;;;;;;29256:25:0;;;;;;:19;:25;;;;;;;;29255:26;29128:153;:194;;;;-1:-1:-1;;;;;;29299:23:0;;;;;;:19;:23;;;;;;;;29298:24;29128:194;29110:326;;;29349:8;:15;;-1:-1:-1;;;;29349:15:0;-1:-1:-1;;;29349:15:0;;;29381:10;:8;:10::i;:::-;29408:8;:16;;-1:-1:-1;;;;29408:16:0;;;29110:326;29464:8;;-1:-1:-1;;;;;29574:25:0;;29448:12;29574:25;;;29464:8;29574:25;;;;;;29464:8;-1:-1:-1;;;29464:8:0;;;;;29463:9;;29574:25;;:52;;-1:-1:-1;;;;;;29603:23:0;;;;;;:19;:23;;;;;;;;29574:52;29570:100;;;-1:-1:-1;29653:5:0;29570:100;29682:12;29787:7;29783:1167;;;-1:-1:-1;;;;;29839:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29888:1;29872:13;;:17;29839:50;29835:966;;;29917:34;29947:3;29917:25;29928:13;;29917:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29910:41;;30020:13;;30000:16;;29993:4;:23;;;;:::i;:::-;29992:41;;;;:::i;:::-;29970:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30106:13:0;;30084:18;;30077:25;;:4;:25;:::i;:::-;30076:43;;;;:::i;:::-;30052:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;30188:13:0;;30168:16;;30161:23;;:4;:23;:::i;:::-;30160:41;;;;:::i;:::-;30138:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30272:13:0;;30251:17;;30244:24;;:4;:24;:::i;:::-;30243:42;;;;:::i;:::-;30220:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;29835:966:0;;-1:-1:-1;29835:966:0;;-1:-1:-1;;;;;30347:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30397:1;30382:12;;:16;30347:51;30343:458;;;30426:33;30455:3;30426:24;30437:12;;30426:6;:10;;:24;;;;:::i;:33::-;30419:40;;30527:12;;30508:15;;30501:4;:22;;;;:::i;:::-;30500:39;;;;:::i;:::-;30478:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30611:12:0;;30590:17;;30583:24;;:4;:24;:::i;:::-;30582:41;;;;:::i;:::-;30558:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;30691:12:0;;30672:15;;30665:22;;:4;:22;:::i;:::-;30664:39;;;;:::i;:::-;30642:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30773:12:0;;30753:16;;30746:23;;:4;:23;:::i;:::-;30745:40;;;;:::i;:::-;30722:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30343:458:0;30821:8;;30817:91;;30850:42;30866:4;30880;30887;30850:15;:42::i;:::-;30924:14;30934:4;30924:14;;:::i;:::-;;;29783:1167;30962:33;30978:4;30984:2;30988:6;30962:15;:33::i;:::-;25977:5026;;;;25864:5139;;;:::o;7407:191::-;7500:6;;;-1:-1:-1;;;;;7517:17:0;;;-1:-1:-1;;;;;;7517:17:0;;;;;;;7550:40;;7500:6;;;7517:17;7500:6;;7550:40;;7481:16;;7550:40;7470:128;7407:191;:::o;25534:188::-;-1:-1:-1;;;;;25617:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;25617:39:0;;;;;;;;;;25674:40;;25617:39;;:31;25674:40;;;25534:188;;:::o;9829:733::-;-1:-1:-1;;;;;9969:20:0;;9961:70;;;;-1:-1:-1;;;9961:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10050:23:0;;10042:71;;;;-1:-1:-1;;;10042:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10210:17:0;;10186:21;10210:17;;;;;;;;;;;10246:23;;;;10238:74;;;;-1:-1:-1;;;10238:74:0;;12752:2:1;10238:74:0;;;12734:21:1;12791:2;12771:18;;;12764:30;12830:34;12810:18;;;12803:62;-1:-1:-1;;;12881:18:1;;;12874:36;12927:19;;10238:74:0;12550:402:1;10238:74:0;-1:-1:-1;;;;;10348:17:0;;;:9;:17;;;;;;;;;;;10368:22;;;10348:42;;10412:20;;;;;;;;:30;;10384:6;;10348:9;10412:30;;10384:6;;10412:30;:::i;:::-;;;;;;;;10477:9;-1:-1:-1;;;;;10460:35:0;10469:6;-1:-1:-1;;;;;10460:35:0;;10488:6;10460:35;;;;1596:25:1;;1584:2;1569:18;;1450:177;10460:35:0;;;;;;;;9950:612;9829:733;;;:::o;10991:517::-;-1:-1:-1;;;;;11207:17:0;;11183:21;11207:17;;;;;;;;;;;11243:10;11235:23;;;;-1:-1:-1;;;11235:23:0;;13159:2:1;11235:23:0;;;13141:21:1;-1:-1:-1;13178:18:1;;;13171:29;13217:18;;11235:23:0;12957:284:1;32137:634:0;-1:-1:-1;;;;;32215:25:0;;;;;;:19;:25;;;;;;;;32214:26;:54;;;;-1:-1:-1;;;;;;32245:23:0;;;;;;:19;:23;;;;;;;;32244:24;32214:54;32210:554;;;-1:-1:-1;;;;;32289:31:0;;;;;;:25;:31;;;;;;;;32285:468;;;-1:-1:-1;;;;;32375:18:0;;32341:31;32375:18;;;:14;:18;;;;;32416:22;;32375:18;;32416:27;32412:78;;32472:15;32447:40;;-1:-1:-1;;25222:304:0:o;32285:468::-;-1:-1:-1;;;;;32564:20:0;;32530:31;32564:20;;;:14;:20;;;;;32657;;32632:22;;:45;;32657:20;32632:45;:::i;:::-;32603:26;;;:74;32722:15;32696:23;;;;:41;32137:634;;:::o;32779:1910::-;32862:4;32818:23;8549:18;;;;;;;;;;;32818:50;;32879:25;33011:19;;32975:20;;32941:18;;32907;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;32879:151;-1:-1:-1;33041:12:0;33070:20;;;:46;;-1:-1:-1;33094:22:0;;33070:46;33066:85;;;33133:7;;;32779:1910::o;33066:85::-;33185:18;;:23;;33206:2;33185:23;:::i;:::-;33167:15;:41;33163:115;;;33243:18;;:23;;33264:2;33243:23;:::i;:::-;33225:41;;33163:115;33339:23;33426:1;33406:17;33384:18;;33366:15;:36;;;;:::i;:::-;33365:58;;;;:::i;:::-;:62;;;;:::i;:::-;33339:88;-1:-1:-1;33438:26:0;33467:36;:15;33339:88;33467:19;:36::i;:::-;33438:65;-1:-1:-1;33544:21:0;33578:36;33438:65;33578:16;:36::i;:::-;33627:18;33648:44;:21;33674:17;33648:25;:44::i;:::-;33627:65;;33705:18;33726:57;33765:17;33726:34;33741:18;;33726:10;:14;;:34;;;;:::i;:57::-;33705:78;;33794:25;33822:59;33863:17;33822:36;33837:20;;33822:10;:14;;:36;;;;:::i;:59::-;33794:87;;33892:24;33919:58;33959:17;33919:35;33934:19;;33919:10;:14;;:35;;;;:::i;:58::-;33892:85;-1:-1:-1;33990:23:0;33892:85;34042:17;34016:23;34029:10;34016;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;34112:1;34091:18;:22;;;34124:18;:22;;;34157:20;:24;;;34192:19;:23;;;34250:17;;34242:61;;33990:88;;-1:-1:-1;;;;;;34250:17:0;;34281;;34242:61;34112:1;34242:61;34281:17;34250;34242:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34228:75:0;;-1:-1:-1;;34320:19:0;;;;;:42;;;34361:1;34343:15;:19;34320:42;34316:278;;;34379:46;34392:15;34409;34379:12;:46::i;:::-;34549:18;;34445:137;;;13658:25:1;;;13714:2;13699:18;;13692:34;;;13742:18;;;13735:34;;;;34445:137:0;;;;;;13646:2:1;34445:137:0;;;34316:278;34626:15;;34618:63;;-1:-1:-1;;;;;34626:15:0;;;;34655:21;;34618:63;;;;34655:21;34626:15;34618:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;32779:1910:0:o;5318:98::-;5376:7;5403:5;5407:1;5403;:5;:::i;:::-;5396:12;5318:98;-1:-1:-1;;;5318:98:0:o;5424:::-;5482:7;5509:5;5513:1;5509;:5;:::i;5212:98::-;5270:7;5297:5;5301:1;5297;:5;:::i;31011:589::-;31161:16;;;31175:1;31161:16;;;;;;;;31137:21;;31161:16;;;;;;;;;;-1:-1:-1;31161:16:0;31137:40;;31206:4;31188;31193:1;31188:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31188:23:0;;;-1:-1:-1;;;;;31188:23:0;;;;;31232:15;-1:-1:-1;;;;;31232:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31222:4;31227:1;31222:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31222:32:0;;;-1:-1:-1;;;;;31222:32:0;;;;;31267:62;31284:4;31299:15;31317:11;31267:8;:62::i;:::-;31368:224;;-1:-1:-1;;;31368:224:0;;-1:-1:-1;;;;;31368:15:0;:66;;;;:224;;31449:11;;31475:1;;31519:4;;31546;;31566:15;;31368:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31066:534;31011:589;:::o;31608:521::-;31756:62;31773:4;31788:15;31806:11;31756:8;:62::i;:::-;32065:15;;31861:260;;-1:-1:-1;;;31861:260:0;;31933:4;31861:260;;;15634:34:1;15684:18;;;15677:34;;;31979:1:0;15727:18:1;;;15720:34;;;15770:18;;;15763:34;-1:-1:-1;;;;;32065:15:0;;;15813:19:1;;;15806:44;32095:15:0;15866:19:1;;;15859:35;31861:15:0;:31;;;;;;31900:9;;15568:19:1;;31861:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31608:521;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2490:247::-;2549:6;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2657:9;2644:23;2676:31;2701:5;2676:31;:::i;2742:160::-;2807:20;;2863:13;;2856:21;2846:32;;2836:60;;2892:1;2889;2882:12;2907:315;2972:6;2980;3033:2;3021:9;3012:7;3008:23;3004:32;3001:52;;;3049:1;3046;3039:12;3001:52;3088:9;3075:23;3107:31;3132:5;3107:31;:::i;:::-;3157:5;-1:-1:-1;3181:35:1;3212:2;3197:18;;3181:35;:::i;:::-;3171:45;;2907:315;;;;;:::o;3451:180::-;3507:6;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3599:26;3615:9;3599:26;:::i;3636:180::-;3695:6;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;-1:-1:-1;3787:23:1;;3636:180;-1:-1:-1;3636:180:1:o;3821:388::-;3889:6;3897;3950:2;3938:9;3929:7;3925:23;3921:32;3918:52;;;3966:1;3963;3956:12;3918:52;4005:9;3992:23;4024:31;4049:5;4024:31;:::i;:::-;4074:5;-1:-1:-1;4131:2:1;4116:18;;4103:32;4144:33;4103:32;4144:33;:::i;:::-;4196:7;4186:17;;;3821:388;;;;;:::o;4214:380::-;4293:1;4289:12;;;;4336;;;4357:61;;4411:4;4403:6;4399:17;4389:27;;4357:61;4464:2;4456:6;4453:14;4433:18;4430:38;4427:161;;4510:10;4505:3;4501:20;4498:1;4491:31;4545:4;4542:1;4535:15;4573:4;4570:1;4563:15;4427:161;;4214:380;;;:::o;5008:127::-;5069:10;5064:3;5060:20;5057:1;5050:31;5100:4;5097:1;5090:15;5124:4;5121:1;5114:15;5140:125;5205:9;;;5226:10;;;5223:36;;;5239:18;;:::i;5270:356::-;5472:2;5454:21;;;5491:18;;;5484:30;5550:34;5545:2;5530:18;;5523:62;5617:2;5602:18;;5270:356::o;6806:168::-;6879:9;;;6910;;6927:15;;;6921:22;;6907:37;6897:71;;6948:18;;:::i;6979:217::-;7019:1;7045;7035:132;;7089:10;7084:3;7080:20;7077:1;7070:31;7124:4;7121:1;7114:15;7152:4;7149:1;7142:15;7035:132;-1:-1:-1;7181:9:1;;6979:217::o;9259:401::-;9461:2;9443:21;;;9500:2;9480:18;;;9473:30;9539:34;9534:2;9519:18;;9512:62;-1:-1:-1;;;9605:2:1;9590:18;;9583:35;9650:3;9635:19;;9259:401::o;9665:399::-;9867:2;9849:21;;;9906:2;9886:18;;;9879:30;9945:34;9940:2;9925:18;;9918:62;-1:-1:-1;;;10011:2:1;9996:18;;9989:33;10054:3;10039:19;;9665:399::o;12417:128::-;12484:9;;;12505:11;;;12502:37;;;12519:18;;:::i;13912:127::-;13973:10;13968:3;13964:20;13961:1;13954:31;14004:4;14001:1;13994:15;14028:4;14025:1;14018:15;14044:251;14114:6;14167:2;14155:9;14146:7;14142:23;14138:32;14135:52;;;14183:1;14180;14173:12;14135:52;14215:9;14209:16;14234:31;14259:5;14234:31;:::i;14300:980::-;14562:4;14610:3;14599:9;14595:19;14641:6;14630:9;14623:25;14667:2;14705:6;14700:2;14689:9;14685:18;14678:34;14748:3;14743:2;14732:9;14728:18;14721:31;14772:6;14807;14801:13;14838:6;14830;14823:22;14876:3;14865:9;14861:19;14854:26;;14915:2;14907:6;14903:15;14889:29;;14936:1;14946:195;14960:6;14957:1;14954:13;14946:195;;;15025:13;;-1:-1:-1;;;;;15021:39:1;15009:52;;15116:15;;;;15081:12;;;;15057:1;14975:9;14946:195;;;-1:-1:-1;;;;;;;15197:32:1;;;;15192:2;15177:18;;15170:60;-1:-1:-1;;;15261:3:1;15246:19;15239:35;15158:3;14300:980;-1:-1:-1;;;14300:980:1:o;15905:306::-;15993:6;16001;16009;16062:2;16050:9;16041:7;16037:23;16033:32;16030:52;;;16078:1;16075;16068:12;16030:52;16107:9;16101:16;16091:26;;16157:2;16146:9;16142:18;16136:25;16126:35;;16201:2;16190:9;16186:18;16180:25;16170:35;;15905:306;;;;;:::o

Swarm Source

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