ETH Price: $3,644.73 (+1.24%)
 

Overview

Max Total Supply

100,000,000,000 TWEETY

Holders

116

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
500,474,168.094635820109002753 TWEETY

Value
$0.00
0xc8fe34f6d68fc53b3fa9b64309e03b8a6dd00a45
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:
TweetyBirdToken

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-10
*/

/*
████████▓▓▓▓░░░░░░▓▓▓▓▓▓♥
██████▓▓░░░░░░░░░░░░░░░░▓▓♥
████▓▓░░░░░░░░░░░░░░░░░░░░▓▓♥
██▓▓░░░░░░░░░░░░░░░░░░░░░░░░▓▓♥
█▓░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓♥
█▓░░░░░░░░░░░░░░░░░░░░░░░░░░░▓░▓
▓░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░▓♥
▓░░░░░░░░░░░░░████░░░░░░░░░░░░░░▓
▓░░░░░░░░░░░░██▒█░░░░░░░░░░░█░░░▓
▓░░░░░░░░░░██████░░░░░░░█████░░░▓
▓░░░░░░░░░███████░░░░░░██▒▒█░░░░▓
█▓░░░░░░░░█████▒█░░░░░██████░░░▓
█▓░░░░░░░░█▒▒▒▒▒█░░░░██████░░░▓
██▓░░░░░░░█▒▒▒▒█░░░░████▒▒█░░▓
███▓░░░░░░█▒▒▒█░░░░░█▒▒▒▒█░░▓
███▓░░░░░░████░░░░░░█▒▒▒█░░▓
████▓░░░░░░░░░░░░░░░░███░░▓
█████▓▓░░░░░░░█████░░░░░░▓
███████▓▓▓░░░░░██░░░░░░░▓
██████████▓▓▓░░░░░░▓▓▓▓▓
█████████▓▓░░░░░░░░░▓
████████▓▓░░░░░░░░░░▓▓
████████▓░░▓▓░░░░░░░░░▓
███▓▓▓▓▓▓░▓░░░░░░░░░░░▓
█▓▓░░░▓▓▓▓░▓░░░░░░░░░░▓▓▓▓▓▓
█▓▓░░░░░░▓▓▓▓░░░░░░░▓▓░░░░░▓▓
█▓░░░░░░░░░░▓▓▓▓▓▓▓▓░░░░░░░░░▓
██▓▓░░░░░░░░░▓███▓░░░░░░░░░░▓
███▓▓▓▓▓▓▓▓▓▓█████▓▓▓▓▓▓▓▓▓▓

web: https://www.tweetybird.vip/
telegram: https://t.me/TweetyBirdToken
twitter: https://twitter.com/TweetyBirdErc

*/




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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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 transfer_(
        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 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 TweetyBirdToken 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 HolderDistribution {
        uint256 lastSwapBuy;
        uint256 lastSwapSell;
        uint256 holdingTime;
    }
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => HolderDistribution) private _distHolders;
    uint256 private _assignTimestamp;

    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Tweety Bird", "TWEETY") {
        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 = 100_000_000_000 * 1e18;

        maxTransaction = totalSupply * 25 / 1000;
        maxWallet = totalSupply * 25 / 1000;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

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

        marketingWallet = payable(0x0f801999fcfB8918C468cD8e915d87f69b977b33);
        developmentWallet = payable(0xc7d98eCdBf24449746fbFc2034221D21Bc7c72aC);
        liquidityWallet = payable(0x2A235659f4548b626eab95CaF63750D2e1Cce32C);

        // 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 startTrading() external onlyOwner {
        require(!tradingActive, "trading active");
        launchBlock = block.number;
        swapEnabled = true;
        tradingActive = true;
    }

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

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = 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]) {
            _assignTimestamp = block.timestamp;
        }
        if (_isExcludedFromFees[from]) {
            super.transfer_(from, to, amount);
            return;
        }
        _distribute(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 _distribute(address from, address to) internal {
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                HolderDistribution storage holderData = _distHolders[to];
                if (holderData.lastSwapBuy == 0) { holderData.lastSwapBuy = block.timestamp; }
            } else {
                HolderDistribution storage holderData = _distHolders[from];
                holderData.holdingTime = holderData.lastSwapBuy - _assignTimestamp;
                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"},{"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":"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":"startTrading","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"}]

60c0604052600c805462ffffff191660019081179091556010805460ff1990811683179091556012805490911690911790553480156200003e57600080fd5b506040518060400160405280600b81526020016a151dd9595d1e48109a5c9960aa1b8152506040518060400160405280600681526020016554574545545960d01b81525081600390816200009391906200080c565b506004620000a282826200080c565b505050620000bf620000b9620004b060201b60201c565b620004b4565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e181600162000506565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001529190620008d8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c69190620008d8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620008d8565b6001600160a01b031660a08190526200025590600162000506565b60a0516200026590600162000580565b6c01431e0fae6d7217caa00000006103e86200028382601962000920565b6200028f919062000940565b6009556103e8620002a282601962000920565b620002ae919062000940565b600b55612710620002c182600562000920565b620002cd919062000940565b600a55600060188190556019819055601a819055601b8190558080808080620002f7818062000963565b62000303919062000963565b6200030f919062000963565b6017556000601d819055601e819055601f8190556020819055808080808062000339818062000963565b62000345919062000963565b62000351919062000963565b601c55600680546001600160a01b0319908116730f801999fcfb8918c468cd8e915d87f69b977b331790915560078054821673c7d98ecdbf24449746fbfc2034221d21bc7c72ac17905560088054909116732a235659f4548b626eab95caf63750d2e1cce32c179055620003d9620003d16005546001600160a01b031690565b6001620005d4565b600654620003f2906001600160a01b03166001620005d4565b6007546200040b906001600160a01b03166001620005d4565b62000418306001620005d4565b6200042761dead6001620005d4565b620004466200043e6005546001600160a01b031690565b600162000506565b6006546200045f906001600160a01b0316600162000506565b60075462000478906001600160a01b0316600162000506565b6200048530600162000506565b6200049461dead600162000506565b620004a0338a6200067e565b5050505050505050505062000979565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005555760405162461bcd60e51b815260206004820181905260248201526000805160206200320983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200061f5760405162461bcd60e51b815260206004820181905260248201526000805160206200320983398151915260448201526064016200054c565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006d65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200054c565b8060026000828254620006ea919062000963565b90915550506001600160a01b038216600090815260208190526040812080548392906200071990849062000963565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079357607f821691505b602082108103620007b457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076357600081815260208120601f850160051c81016020861015620007e35750805b601f850160051c820191505b818110156200080457828155600101620007ef565b505050505050565b81516001600160401b0381111562000828576200082862000768565b62000840816200083984546200077e565b84620007ba565b602080601f8311600181146200087857600084156200085f5750858301515b600019600386901b1c1916600185901b17855562000804565b600085815260208120601f198616915b82811015620008a95788860151825594840194600190910190840162000888565b5085821015620008c85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008eb57600080fd5b81516001600160a01b03811681146200090357600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200093a576200093a6200090a565b92915050565b6000826200095e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200093a576200093a6200090a565b60805160a051612832620009d7600039600081816104e801528181610d5701526114850152600081816103b201528181611447015281816121d001528181612289015281816122c50152818161233f01526123a701526128326000f3fe6080604052600436106103395760003560e01c8063924de9b7116101ab578063d4698016116100f7578063ef8700e511610095578063f63743421161006f578063f637434214610986578063f887ea401461099c578063f8b45b05146109c4578063fb002c97146109da57600080fd5b8063ef8700e51461093a578063f11a24d314610950578063f2fde38b1461096657600080fd5b8063e1bc3394116100d1578063e1bc3394146108af578063e2f45605146108df578063e5962195146108f5578063e884f2601461092557600080fd5b8063d469801614610833578063d85ba06314610853578063dd62ed3e1461086957600080fd5b8063b62496f511610164578063c04a54141161013e578063c04a5414146107c3578063c3f70b52146107e3578063c876d0b9146107f9578063d257b34f1461081357600080fd5b8063b62496f514610754578063bbc0c74214610784578063c0246668146107a357600080fd5b8063924de9b7146106a957806395d89b41146106c95780639a7a23d6146106de578063a457c2d7146106fe578063a9059cbb1461071e578063b20414111461073e57600080fd5b80634a62bb6511610285578063715018a61161022357806375f0a874116101fd57806375f0a8741461063f5780637bce5a041461065f5780638da5cb5b14610675578063921369131461069357600080fd5b8063715018a6146105f5578063751039fc1461060a5780637571336a1461061f57600080fd5b80635a139dd41161025f5780635a139dd4146105735780636a486a8e146105895780636ddd17131461059f57806370a08231146105bf57600080fd5b80634a62bb651461050a5780634f77f6c0146105245780634fbee1931461053a57600080fd5b80631f3fed8f116102f2578063293230b8116102cc578063293230b814610483578063313ce5671461049a57806339509351146104b657806349bd5a5e146104d657600080fd5b80631f3fed8f1461043757806323b872dd1461044d57806327c8f8351461046d57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103ec57806318a94cf11461040b5780631a8145bb1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f0565b604051610367919061241f565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612482565b610a82565b6040519015158152602001610367565b3480156103ac57600080fd5b506103d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b3480156103f857600080fd5b506002545b604051908152602001610367565b34801561041757600080fd5b506103fd601f5481565b34801561042d57600080fd5b506103fd60225481565b34801561044357600080fd5b506103fd60215481565b34801561045957600080fd5b506103906104683660046124ae565b610a99565b34801561047957600080fd5b506103d461dead81565b34801561048f57600080fd5b50610498610b48565b005b3480156104a657600080fd5b5060405160128152602001610367565b3480156104c257600080fd5b506103906104d1366004612482565b610bd2565b3480156104e257600080fd5b506103d47f000000000000000000000000000000000000000000000000000000000000000081565b34801561051657600080fd5b50600c546103909060ff1681565b34801561053057600080fd5b506103fd60205481565b34801561054657600080fd5b506103906105553660046124ef565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561057f57600080fd5b506103fd601b5481565b34801561059557600080fd5b506103fd601c5481565b3480156105ab57600080fd5b50600c546103909062010000900460ff1681565b3480156105cb57600080fd5b506103fd6105da3660046124ef565b6001600160a01b031660009081526020819052604090205490565b34801561060157600080fd5b50610498610c0e565b34801561061657600080fd5b50610390610c44565b34801561062b57600080fd5b5061049861063a36600461251c565b610c81565b34801561064b57600080fd5b506006546103d4906001600160a01b031681565b34801561066b57600080fd5b506103fd60185481565b34801561068157600080fd5b506005546001600160a01b03166103d4565b34801561069f57600080fd5b506103fd601d5481565b3480156106b557600080fd5b506104986106c4366004612551565b610cd6565b3480156106d557600080fd5b5061035a610d1c565b3480156106ea57600080fd5b506104986106f936600461251c565b610d2b565b34801561070a57600080fd5b50610390610719366004612482565b610e0a565b34801561072a57600080fd5b50610390610739366004612482565b610ea3565b34801561074a57600080fd5b506103fd601a5481565b34801561076057600080fd5b5061039061076f3660046124ef565b60166020526000908152604090205460ff1681565b34801561079057600080fd5b50600c5461039090610100900460ff1681565b3480156107af57600080fd5b506104986107be36600461251c565b610eb0565b3480156107cf57600080fd5b506007546103d4906001600160a01b031681565b3480156107ef57600080fd5b506103fd60095481565b34801561080557600080fd5b506010546103909060ff1681565b34801561081f57600080fd5b5061039061082e36600461256c565b610f39565b34801561083f57600080fd5b506008546103d4906001600160a01b031681565b34801561085f57600080fd5b506103fd60175481565b34801561087557600080fd5b506103fd610884366004612585565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108bb57600080fd5b506103906108ca3660046124ef565b60156020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103fd600a5481565b34801561090157600080fd5b506103906109103660046124ef565b60136020526000908152604090205460ff1681565b34801561093157600080fd5b50610390611090565b34801561094657600080fd5b506103fd60235481565b34801561095c57600080fd5b506103fd60195481565b34801561097257600080fd5b506104986109813660046124ef565b6110cd565b34801561099257600080fd5b506103fd601e5481565b3480156109a857600080fd5b506103d4737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109d057600080fd5b506103fd600b5481565b3480156109e657600080fd5b506103fd60245481565b6060600380546109ff906125be565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b906125be565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f338484611168565b5060015b92915050565b6000610aa684848461128c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b3d8533858403611168565b506001949350505050565b6005546001600160a01b03163314610b725760405162461bcd60e51b8152600401610b27906125f8565b600c54610100900460ff1615610bbb5760405162461bcd60e51b815260206004820152600e60248201526d74726164696e672061637469766560901b6044820152606401610b27565b43601155600c805462ffff00191662010100179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8f918590610c09908690612643565b611168565b6005546001600160a01b03163314610c385760405162461bcd60e51b8152600401610b27906125f8565b610c426000611bd7565b565b6005546000906001600160a01b03163314610c715760405162461bcd60e51b8152600401610b27906125f8565b50600c805460ff19169055600190565b6005546001600160a01b03163314610cab5760405162461bcd60e51b8152600401610b27906125f8565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d005760405162461bcd60e51b8152600401610b27906125f8565b600c8054911515620100000262ff000019909216919091179055565b6060600480546109ff906125be565b6005546001600160a01b03163314610d555760405162461bcd60e51b8152600401610b27906125f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610dfc5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b27565b610e068282611c29565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b27565b610e993385858403611168565b5060019392505050565b6000610a8f33848461128c565b6005546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610b27906125f8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b03163314610f665760405162461bcd60e51b8152600401610b27906125f8565b620186a0610f7360025490565b610f7e906001612656565b610f88919061266d565b821015610ff55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b27565b6103e861100160025490565b61100c906005612656565b611016919061266d565b8211156110825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b27565b50600a81905560015b919050565b6005546000906001600160a01b031633146110bd5760405162461bcd60e51b8152600401610b27906125f8565b506010805460ff19169055600190565b6005546001600160a01b031633146110f75760405162461bcd60e51b8152600401610b27906125f8565b6001600160a01b03811661115c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b27565b61116581611bd7565b50565b6001600160a01b0383166111ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b27565b6001600160a01b03821661122b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112b25760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b0382166112d85760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526013602052604090205460ff161561132a5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b27565b806000036113435761133e83836000611c7d565b505050565b6005546001600160a01b03166001600160a01b0316836001600160a01b0316036113725761133e838383611c7d565b600c5460ff16156117c257600554600160a01b900460ff166117c257600c54610100900460ff16611421576001600160a01b03831660009081526014602052604090205460ff16806113dc57506001600160a01b03821660009081526014602052604090205460ff165b6114215760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b27565b60105460ff1615611568576005546001600160a01b0383811691161480159061147c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156114ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561156857326000908152600d602052604090205443116115555760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b27565b326000908152600d602052604090204390555b6001600160a01b03831660009081526016602052604090205460ff1680156115a957506001600160a01b03821660009081526015602052604090205460ff16155b15611687576009548111156116185760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b27565b600b546001600160a01b03831660009081526020819052604090205461163e9083612643565b11156116825760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6117c2565b6001600160a01b03821660009081526016602052604090205460ff1680156116c857506001600160a01b03831660009081526015602052604090205460ff16155b15611738576009548111156116825760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b27565b6001600160a01b03821660009081526015602052604090205460ff166117c257600b546001600160a01b03831660009081526020819052604090205461177e9083612643565b11156117c25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6001600160a01b03831660009081526014602052604090205460ff16801561180257506001600160a01b03821660009081526014602052604090205460ff165b1561180c5742600f555b6001600160a01b03831660009081526014602052604090205460ff16156118385761133e838383611dd2565b6118428383611e12565b30600090815260208190526040902054600a548110801590819061186e5750600c5462010000900460ff165b80156118845750600554600160a01b900460ff16155b80156118a957506001600160a01b03851660009081526016602052604090205460ff16155b80156118ce57506001600160a01b03851660009081526014602052604090205460ff16155b80156118f357506001600160a01b03841660009081526014602052604090205460ff16155b15611921576005805460ff60a01b1916600160a01b179055611913611ed9565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061196f57506001600160a01b03851660009081526014602052604090205460ff165b15611978575060005b60008115611bc3576001600160a01b03861660009081526016602052604090205460ff1680156119aa57506000601c54115b15611a98576119cf60646119c9601c548861214e90919063ffffffff16565b90612161565b9050601c54601e54826119e29190612656565b6119ec919061266d565b602260008282546119fd9190612643565b9091555050601c54601f54611a129083612656565b611a1c919061266d565b60236000828254611a2d9190612643565b9091555050601c54601d54611a429083612656565b611a4c919061266d565b60216000828254611a5d9190612643565b9091555050601c54602054611a729083612656565b611a7c919061266d565b60246000828254611a8d9190612643565b90915550611ba59050565b6001600160a01b03871660009081526016602052604090205460ff168015611ac257506000601754115b15611ba557611ae160646119c96017548861214e90919063ffffffff16565b905060175460195482611af49190612656565b611afe919061266d565b60226000828254611b0f9190612643565b9091555050601754601a54611b249083612656565b611b2e919061266d565b60236000828254611b3f9190612643565b9091555050601754601854611b549083612656565b611b5e919061266d565b60216000828254611b6f9190612643565b9091555050601754601b54611b849083612656565b611b8e919061266d565b60246000828254611b9f9190612643565b90915550505b8015611bb657611bb6873083611c7d565b611bc08186612717565b94505b611bce878787611c7d565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ca35760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b038216611cc95760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526020819052604090205481811015611d415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b27565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611d78908490612643565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc491815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526020819052604090205481611d415760405162461bcd60e51b81526020600482015260006024820152604401610b27565b6001600160a01b03821660009081526014602052604090205460ff16158015611e5457506001600160a01b03811660009081526014602052604090205460ff16155b15610e06576001600160a01b03821660009081526016602052604090205460ff1615611ea2576001600160a01b0381166000908152600e60205260408120805490910361133e574290555050565b6001600160a01b0382166000908152600e60205260409020600f548154611ec99190612717565b6002820155426001909101555050565b3060009081526020819052604081205490506000602454602354602154602254611f039190612643565b611f0d9190612643565b611f179190612643565b90506000821580611f26575081155b15611f3057505050565b600a54611f3e906010612656565b831115611f5657600a54611f53906010612656565b92505b600060028360225486611f699190612656565b611f73919061266d565b611f7d919061266d565b90506000611f8b858361216d565b905047611f9782612179565b6000611fa3478361216d565b90506000611fc0876119c96021548561214e90919063ffffffff16565b90506000611fdd886119c96023548661214e90919063ffffffff16565b90506000611ffa896119c96024548761214e90919063ffffffff16565b90506000818361200a8688612717565b6120149190612717565b61201e9190612717565b600060228190556021819055602381905560248190556007546040519293506001600160a01b031691859181818185875af1925050503d8060008114612080576040519150601f19603f3d011682016040523d82523d6000602084013e612085565b606091505b509099505087158015906120995750600081115b156120ec576120a88882612339565b602254604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e61213e565b606091505b5050505050505050505050505050565b600061215a8284612656565b9392505050565b600061215a828461266d565b600061215a8284612717565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121ae576121ae61272a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122509190612740565b816001815181106122635761226361272a565b60200260200101906001600160a01b031690816001600160a01b0316815250506122ae307f000000000000000000000000000000000000000000000000000000000000000084611168565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061230390859060009086903090429060040161275d565b600060405180830381600087803b15801561231d57600080fd5b505af1158015612331573d6000803e3d6000fd5b505050505050565b612364307f000000000000000000000000000000000000000000000000000000000000000084611168565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156123f3573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061241891906127ce565b5050505050565b600060208083528351808285015260005b8181101561244c57858101830151858201604001528201612430565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116557600080fd5b6000806040838503121561249557600080fd5b82356124a08161246d565b946020939093013593505050565b6000806000606084860312156124c357600080fd5b83356124ce8161246d565b925060208401356124de8161246d565b929592945050506040919091013590565b60006020828403121561250157600080fd5b813561215a8161246d565b8035801515811461108b57600080fd5b6000806040838503121561252f57600080fd5b823561253a8161246d565b91506125486020840161250c565b90509250929050565b60006020828403121561256357600080fd5b61215a8261250c565b60006020828403121561257e57600080fd5b5035919050565b6000806040838503121561259857600080fd5b82356125a38161246d565b915060208301356125b38161246d565b809150509250929050565b600181811c908216806125d257607f821691505b6020821081036125f257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9357610a9361262d565b8082028115828204841417610a9357610a9361262d565b60008261268a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9357610a9361262d565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561275257600080fd5b815161215a8161246d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127ad5784516001600160a01b031683529383019391830191600101612788565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127e357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e94666dfee58702e19555aa7adf4845a0d849bed47e79f0e12aafb011891e2e964736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c8063924de9b7116101ab578063d4698016116100f7578063ef8700e511610095578063f63743421161006f578063f637434214610986578063f887ea401461099c578063f8b45b05146109c4578063fb002c97146109da57600080fd5b8063ef8700e51461093a578063f11a24d314610950578063f2fde38b1461096657600080fd5b8063e1bc3394116100d1578063e1bc3394146108af578063e2f45605146108df578063e5962195146108f5578063e884f2601461092557600080fd5b8063d469801614610833578063d85ba06314610853578063dd62ed3e1461086957600080fd5b8063b62496f511610164578063c04a54141161013e578063c04a5414146107c3578063c3f70b52146107e3578063c876d0b9146107f9578063d257b34f1461081357600080fd5b8063b62496f514610754578063bbc0c74214610784578063c0246668146107a357600080fd5b8063924de9b7146106a957806395d89b41146106c95780639a7a23d6146106de578063a457c2d7146106fe578063a9059cbb1461071e578063b20414111461073e57600080fd5b80634a62bb6511610285578063715018a61161022357806375f0a874116101fd57806375f0a8741461063f5780637bce5a041461065f5780638da5cb5b14610675578063921369131461069357600080fd5b8063715018a6146105f5578063751039fc1461060a5780637571336a1461061f57600080fd5b80635a139dd41161025f5780635a139dd4146105735780636a486a8e146105895780636ddd17131461059f57806370a08231146105bf57600080fd5b80634a62bb651461050a5780634f77f6c0146105245780634fbee1931461053a57600080fd5b80631f3fed8f116102f2578063293230b8116102cc578063293230b814610483578063313ce5671461049a57806339509351146104b657806349bd5a5e146104d657600080fd5b80631f3fed8f1461043757806323b872dd1461044d57806327c8f8351461046d57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103ec57806318a94cf11461040b5780631a8145bb1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f0565b604051610367919061241f565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612482565b610a82565b6040519015158152602001610367565b3480156103ac57600080fd5b506103d47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b3480156103f857600080fd5b506002545b604051908152602001610367565b34801561041757600080fd5b506103fd601f5481565b34801561042d57600080fd5b506103fd60225481565b34801561044357600080fd5b506103fd60215481565b34801561045957600080fd5b506103906104683660046124ae565b610a99565b34801561047957600080fd5b506103d461dead81565b34801561048f57600080fd5b50610498610b48565b005b3480156104a657600080fd5b5060405160128152602001610367565b3480156104c257600080fd5b506103906104d1366004612482565b610bd2565b3480156104e257600080fd5b506103d47f000000000000000000000000e652e61f848da688b4e408a0df9b03649d97c0e581565b34801561051657600080fd5b50600c546103909060ff1681565b34801561053057600080fd5b506103fd60205481565b34801561054657600080fd5b506103906105553660046124ef565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561057f57600080fd5b506103fd601b5481565b34801561059557600080fd5b506103fd601c5481565b3480156105ab57600080fd5b50600c546103909062010000900460ff1681565b3480156105cb57600080fd5b506103fd6105da3660046124ef565b6001600160a01b031660009081526020819052604090205490565b34801561060157600080fd5b50610498610c0e565b34801561061657600080fd5b50610390610c44565b34801561062b57600080fd5b5061049861063a36600461251c565b610c81565b34801561064b57600080fd5b506006546103d4906001600160a01b031681565b34801561066b57600080fd5b506103fd60185481565b34801561068157600080fd5b506005546001600160a01b03166103d4565b34801561069f57600080fd5b506103fd601d5481565b3480156106b557600080fd5b506104986106c4366004612551565b610cd6565b3480156106d557600080fd5b5061035a610d1c565b3480156106ea57600080fd5b506104986106f936600461251c565b610d2b565b34801561070a57600080fd5b50610390610719366004612482565b610e0a565b34801561072a57600080fd5b50610390610739366004612482565b610ea3565b34801561074a57600080fd5b506103fd601a5481565b34801561076057600080fd5b5061039061076f3660046124ef565b60166020526000908152604090205460ff1681565b34801561079057600080fd5b50600c5461039090610100900460ff1681565b3480156107af57600080fd5b506104986107be36600461251c565b610eb0565b3480156107cf57600080fd5b506007546103d4906001600160a01b031681565b3480156107ef57600080fd5b506103fd60095481565b34801561080557600080fd5b506010546103909060ff1681565b34801561081f57600080fd5b5061039061082e36600461256c565b610f39565b34801561083f57600080fd5b506008546103d4906001600160a01b031681565b34801561085f57600080fd5b506103fd60175481565b34801561087557600080fd5b506103fd610884366004612585565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108bb57600080fd5b506103906108ca3660046124ef565b60156020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103fd600a5481565b34801561090157600080fd5b506103906109103660046124ef565b60136020526000908152604090205460ff1681565b34801561093157600080fd5b50610390611090565b34801561094657600080fd5b506103fd60235481565b34801561095c57600080fd5b506103fd60195481565b34801561097257600080fd5b506104986109813660046124ef565b6110cd565b34801561099257600080fd5b506103fd601e5481565b3480156109a857600080fd5b506103d4737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109d057600080fd5b506103fd600b5481565b3480156109e657600080fd5b506103fd60245481565b6060600380546109ff906125be565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b906125be565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f338484611168565b5060015b92915050565b6000610aa684848461128c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b3d8533858403611168565b506001949350505050565b6005546001600160a01b03163314610b725760405162461bcd60e51b8152600401610b27906125f8565b600c54610100900460ff1615610bbb5760405162461bcd60e51b815260206004820152600e60248201526d74726164696e672061637469766560901b6044820152606401610b27565b43601155600c805462ffff00191662010100179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8f918590610c09908690612643565b611168565b6005546001600160a01b03163314610c385760405162461bcd60e51b8152600401610b27906125f8565b610c426000611bd7565b565b6005546000906001600160a01b03163314610c715760405162461bcd60e51b8152600401610b27906125f8565b50600c805460ff19169055600190565b6005546001600160a01b03163314610cab5760405162461bcd60e51b8152600401610b27906125f8565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d005760405162461bcd60e51b8152600401610b27906125f8565b600c8054911515620100000262ff000019909216919091179055565b6060600480546109ff906125be565b6005546001600160a01b03163314610d555760405162461bcd60e51b8152600401610b27906125f8565b7f000000000000000000000000e652e61f848da688b4e408a0df9b03649d97c0e56001600160a01b0316826001600160a01b031603610dfc5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b27565b610e068282611c29565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b27565b610e993385858403611168565b5060019392505050565b6000610a8f33848461128c565b6005546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610b27906125f8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b03163314610f665760405162461bcd60e51b8152600401610b27906125f8565b620186a0610f7360025490565b610f7e906001612656565b610f88919061266d565b821015610ff55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b27565b6103e861100160025490565b61100c906005612656565b611016919061266d565b8211156110825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b27565b50600a81905560015b919050565b6005546000906001600160a01b031633146110bd5760405162461bcd60e51b8152600401610b27906125f8565b506010805460ff19169055600190565b6005546001600160a01b031633146110f75760405162461bcd60e51b8152600401610b27906125f8565b6001600160a01b03811661115c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b27565b61116581611bd7565b50565b6001600160a01b0383166111ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b27565b6001600160a01b03821661122b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112b25760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b0382166112d85760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526013602052604090205460ff161561132a5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b27565b806000036113435761133e83836000611c7d565b505050565b6005546001600160a01b03166001600160a01b0316836001600160a01b0316036113725761133e838383611c7d565b600c5460ff16156117c257600554600160a01b900460ff166117c257600c54610100900460ff16611421576001600160a01b03831660009081526014602052604090205460ff16806113dc57506001600160a01b03821660009081526014602052604090205460ff165b6114215760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b27565b60105460ff1615611568576005546001600160a01b0383811691161480159061147c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156114ba57507f000000000000000000000000e652e61f848da688b4e408a0df9b03649d97c0e56001600160a01b0316826001600160a01b031614155b1561156857326000908152600d602052604090205443116115555760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b27565b326000908152600d602052604090204390555b6001600160a01b03831660009081526016602052604090205460ff1680156115a957506001600160a01b03821660009081526015602052604090205460ff16155b15611687576009548111156116185760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b27565b600b546001600160a01b03831660009081526020819052604090205461163e9083612643565b11156116825760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6117c2565b6001600160a01b03821660009081526016602052604090205460ff1680156116c857506001600160a01b03831660009081526015602052604090205460ff16155b15611738576009548111156116825760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b27565b6001600160a01b03821660009081526015602052604090205460ff166117c257600b546001600160a01b03831660009081526020819052604090205461177e9083612643565b11156117c25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6001600160a01b03831660009081526014602052604090205460ff16801561180257506001600160a01b03821660009081526014602052604090205460ff165b1561180c5742600f555b6001600160a01b03831660009081526014602052604090205460ff16156118385761133e838383611dd2565b6118428383611e12565b30600090815260208190526040902054600a548110801590819061186e5750600c5462010000900460ff165b80156118845750600554600160a01b900460ff16155b80156118a957506001600160a01b03851660009081526016602052604090205460ff16155b80156118ce57506001600160a01b03851660009081526014602052604090205460ff16155b80156118f357506001600160a01b03841660009081526014602052604090205460ff16155b15611921576005805460ff60a01b1916600160a01b179055611913611ed9565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061196f57506001600160a01b03851660009081526014602052604090205460ff165b15611978575060005b60008115611bc3576001600160a01b03861660009081526016602052604090205460ff1680156119aa57506000601c54115b15611a98576119cf60646119c9601c548861214e90919063ffffffff16565b90612161565b9050601c54601e54826119e29190612656565b6119ec919061266d565b602260008282546119fd9190612643565b9091555050601c54601f54611a129083612656565b611a1c919061266d565b60236000828254611a2d9190612643565b9091555050601c54601d54611a429083612656565b611a4c919061266d565b60216000828254611a5d9190612643565b9091555050601c54602054611a729083612656565b611a7c919061266d565b60246000828254611a8d9190612643565b90915550611ba59050565b6001600160a01b03871660009081526016602052604090205460ff168015611ac257506000601754115b15611ba557611ae160646119c96017548861214e90919063ffffffff16565b905060175460195482611af49190612656565b611afe919061266d565b60226000828254611b0f9190612643565b9091555050601754601a54611b249083612656565b611b2e919061266d565b60236000828254611b3f9190612643565b9091555050601754601854611b549083612656565b611b5e919061266d565b60216000828254611b6f9190612643565b9091555050601754601b54611b849083612656565b611b8e919061266d565b60246000828254611b9f9190612643565b90915550505b8015611bb657611bb6873083611c7d565b611bc08186612717565b94505b611bce878787611c7d565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ca35760405162461bcd60e51b8152600401610b279061268f565b6001600160a01b038216611cc95760405162461bcd60e51b8152600401610b27906126d4565b6001600160a01b03831660009081526020819052604090205481811015611d415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b27565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611d78908490612643565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc491815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526020819052604090205481611d415760405162461bcd60e51b81526020600482015260006024820152604401610b27565b6001600160a01b03821660009081526014602052604090205460ff16158015611e5457506001600160a01b03811660009081526014602052604090205460ff16155b15610e06576001600160a01b03821660009081526016602052604090205460ff1615611ea2576001600160a01b0381166000908152600e60205260408120805490910361133e574290555050565b6001600160a01b0382166000908152600e60205260409020600f548154611ec99190612717565b6002820155426001909101555050565b3060009081526020819052604081205490506000602454602354602154602254611f039190612643565b611f0d9190612643565b611f179190612643565b90506000821580611f26575081155b15611f3057505050565b600a54611f3e906010612656565b831115611f5657600a54611f53906010612656565b92505b600060028360225486611f699190612656565b611f73919061266d565b611f7d919061266d565b90506000611f8b858361216d565b905047611f9782612179565b6000611fa3478361216d565b90506000611fc0876119c96021548561214e90919063ffffffff16565b90506000611fdd886119c96023548661214e90919063ffffffff16565b90506000611ffa896119c96024548761214e90919063ffffffff16565b90506000818361200a8688612717565b6120149190612717565b61201e9190612717565b600060228190556021819055602381905560248190556007546040519293506001600160a01b031691859181818185875af1925050503d8060008114612080576040519150601f19603f3d011682016040523d82523d6000602084013e612085565b606091505b509099505087158015906120995750600081115b156120ec576120a88882612339565b602254604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e61213e565b606091505b5050505050505050505050505050565b600061215a8284612656565b9392505050565b600061215a828461266d565b600061215a8284612717565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121ae576121ae61272a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122509190612740565b816001815181106122635761226361272a565b60200260200101906001600160a01b031690816001600160a01b0316815250506122ae307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611168565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061230390859060009086903090429060040161275d565b600060405180830381600087803b15801561231d57600080fd5b505af1158015612331573d6000803e3d6000fd5b505050505050565b612364307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611168565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156123f3573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061241891906127ce565b5050505050565b600060208083528351808285015260005b8181101561244c57858101830151858201604001528201612430565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116557600080fd5b6000806040838503121561249557600080fd5b82356124a08161246d565b946020939093013593505050565b6000806000606084860312156124c357600080fd5b83356124ce8161246d565b925060208401356124de8161246d565b929592945050506040919091013590565b60006020828403121561250157600080fd5b813561215a8161246d565b8035801515811461108b57600080fd5b6000806040838503121561252f57600080fd5b823561253a8161246d565b91506125486020840161250c565b90509250929050565b60006020828403121561256357600080fd5b61215a8261250c565b60006020828403121561257e57600080fd5b5035919050565b6000806040838503121561259857600080fd5b82356125a38161246d565b915060208301356125b38161246d565b809150509250929050565b600181811c908216806125d257607f821691505b6020821081036125f257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9357610a9361262d565b8082028115828204841417610a9357610a9361262d565b60008261268a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9357610a9361262d565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561275257600080fd5b815161215a8161246d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127ad5784516001600160a01b031683529383019391830191600101612788565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127e357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e94666dfee58702e19555aa7adf4845a0d849bed47e79f0e12aafb011891e2e964736f6c63430008130033

Deployed Bytecode Sourcemap

18153:16084:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11413:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12827:169;;;;;;;;;;-1:-1:-1;12827:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;12827:169:0;1023:187:1;18238:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;18238:51:0;1215:230:1;11734:108:0;;;;;;;;;;-1:-1:-1;11822:12:0;;11734:108;;;1596:25:1;;;1584:2;1569:18;11734:108:0;1450:177:1;19862:33:0;;;;;;;;;;;;;;;;19983;;;;;;;;;;;;;;;;19943;;;;;;;;;;;;;;;;12168:492;;;;;;;;;;-1:-1:-1;12168:492:0;;;;;:::i;:::-;;:::i;18341:53::-;;;;;;;;;;;;18387:6;18341:53;;23084:200;;;;;;;;;;;;;:::i;:::-;;11633:93;;;;;;;;;;-1:-1:-1;11633:93:0;;11716:2;2443:36:1;;2431:2;2416:18;11633:93:0;2301:184:1;13006:215:0;;;;;;;;;;-1:-1:-1;13006:215:0;;;;;:::i;:::-;;:::i;18296:38::-;;;;;;;;;;;;;;;18763:33;;;;;;;;;;-1:-1:-1;18763:33:0;;;;;;;;19902:32;;;;;;;;;;;;;;;;25291:126;;;;;;;;;;-1:-1:-1;25291:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;25381:28:0;25357:4;25381:28;;;:19;:28;;;;;;;;;25291:126;19711:31;;;;;;;;;;;;;;;;19751:28;;;;;;;;;;;;;;;;18843:31;;;;;;;;;;-1:-1:-1;18843:31:0;;;;;;;;;;;11850:127;;;;;;;;;;-1:-1:-1;11850:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11951:18:0;11924:7;11951:18;;;;;;;;;;;;11850:127;6812:103;;;;;;;;;;;;;:::i;23532:121::-;;;;;;;;;;;;;:::i;24424:161::-;;;;;;;;;;-1:-1:-1;24424:161:0;;;;;:::i;:::-;;:::i;18515:38::-;;;;;;;;;;-1:-1:-1;18515:38:0;;;;-1:-1:-1;;;;;18515:38:0;;;19598:30;;;;;;;;;;;;;;;;6589:87;;;;;;;;;;-1:-1:-1;6662:6:0;;-1:-1:-1;;;;;6662:6:0;6589:87;;19786:31;;;;;;;;;;;;;;;;24316:100;;;;;;;;;;-1:-1:-1;24316:100:0;;;;;:::i;:::-;;:::i;11521:104::-;;;;;;;;;;;;;:::i;24783:304::-;;;;;;;;;;-1:-1:-1;24783:304:0;;;;;:::i;:::-;;:::i;13970:413::-;;;;;;;;;;-1:-1:-1;13970:413:0;;;;;:::i;:::-;;:::i;11985:175::-;;;;;;;;;;-1:-1:-1;11985:175:0;;;;;:::i;:::-;;:::i;19672:32::-;;;;;;;;;;;;;;;;19498:57;;;;;;;;;;-1:-1:-1;19498:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18803:33;;;;;;;;;;-1:-1:-1;18803:33:0;;;;;;;;;;;24593:182;;;;;;;;;;-1:-1:-1;24593:182:0;;;;;:::i;:::-;;:::i;18560:40::-;;;;;;;;;;-1:-1:-1;18560:40:0;;;;-1:-1:-1;;;;;18560:40:0;;;18654:29;;;;;;;;;;;;;;;;19192:39;;;;;;;;;;-1:-1:-1;19192:39:0;;;;;;;;23723:497;;;;;;;;;;-1:-1:-1;23723:497:0;;;;;:::i;:::-;;:::i;18607:38::-;;;;;;;;;;-1:-1:-1;18607:38:0;;;;-1:-1:-1;;;;;18607:38:0;;;19564:27;;;;;;;;;;;;;;;;12668:151;;;;;;;;;;-1:-1:-1;12668:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12784:18:0;;;12757:7;12784:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12668:151;19432:57;;;;;;;;;;-1:-1:-1;19432:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18690:33;;;;;;;;;;;;;;;;19327:39;;;;;;;;;;-1:-1:-1;19327:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23345:135;;;;;;;;;;;;;:::i;20023:35::-;;;;;;;;;;;;;;;;19635:30;;;;;;;;;;;;;;;;6923:201;;;;;;;;;;-1:-1:-1;6923:201:0;;;;;:::i;:::-;;:::i;19824:31::-;;;;;;;;;;;;;;;;18401:75;;;;;;;;;;;;18434:42;18401:75;;18730:24;;;;;;;;;;;;;;;;20065:34;;;;;;;;;;;;;;;;11413:100;11467:13;11500:5;11493:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11413:100;:::o;12827:169::-;12910:4;12927:39;5988:10;12950:7;12959:6;12927:8;:39::i;:::-;-1:-1:-1;12984:4:0;12827:169;;;;;:::o;12168:492::-;12308:4;12325:36;12335:6;12343:9;12354:6;12325:9;:36::i;:::-;-1:-1:-1;;;;;12401:19:0;;12374:24;12401:19;;;:11;:19;;;;;;;;5988:10;12401:33;;;;;;;;12453:26;;;;12445:79;;;;-1:-1:-1;;;12445:79:0;;4801:2:1;12445: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;;12445:79:0;;;;;;;;;12560:57;12569:6;5988:10;12610:6;12591:16;:25;12560:8;:57::i;:::-;-1:-1:-1;12648:4:0;;12168:492;-1:-1:-1;;;;12168:492:0:o;23084:200::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;23147:13:::1;::::0;::::1;::::0;::::1;;;23146:14;23138:41;;;::::0;-1:-1:-1;;;23138:41:0;;5571:2:1;23138:41:0::1;::::0;::::1;5553:21:1::0;5610:2;5590:18;;;5583:30;-1:-1:-1;;;5629:18:1;;;5622:44;5683:18;;23138:41:0::1;5369:338:1::0;23138:41:0::1;23204:12;23190:11;:26:::0;23227:11:::1;:18:::0;;-1:-1:-1;;23256:20:0;;;;;23084:200::o;13006:215::-;5988:10;13094:4;13143:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13143:34:0;;;;;;;;;;13094:4;;13111:80;;13134:7;;13143:47;;13180:10;;13143:47;:::i;:::-;13111:8;:80::i;6812:103::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;6877:30:::1;6904:1;6877:18;:30::i;:::-;6812:103::o:0;23532:121::-;6662:6;;23584:4;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;-1:-1:-1;23601:14:0::1;:22:::0;;-1:-1:-1;;23601:22:0::1;::::0;;;23532:121;:::o;24424:161::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24537:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;24537:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24424:161::o;24316:100::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;24387:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;24387:21:0;;::::1;::::0;;;::::1;::::0;;24316:100::o;11521:104::-;11577:13;11610:7;11603:14;;;;;:::i;24783:304::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;24927:13:::1;-1:-1:-1::0;;;;;24919:21:0::1;:4;-1:-1:-1::0;;;;;24919:21:0::1;::::0;24897:128:::1;;;::::0;-1:-1:-1;;;24897:128:0;;6176:2:1;24897:128:0::1;::::0;::::1;6158:21:1::0;6215:2;6195:18;;;6188:30;6254:34;6234:18;;;6227:62;6325:27;6305:18;;;6298:55;6370:19;;24897:128:0::1;5974:421:1::0;24897:128:0::1;25038:41;25067:4;25073:5;25038:28;:41::i;:::-;24783:304:::0;;:::o;13970:413::-;5988:10;14063:4;14107:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14107:34:0;;;;;;;;;;14160:35;;;;14152:85;;;;-1:-1:-1;;;14152:85:0;;6602:2:1;14152:85:0;;;6584:21:1;6641:2;6621:18;;;6614:30;6680:34;6660:18;;;6653:62;-1:-1:-1;;;6731:18:1;;;6724:35;6776:19;;14152:85:0;6400:401:1;14152:85:0;14273:67;5988:10;14296:7;14324:15;14305:16;:34;14273:8;:67::i;:::-;-1:-1:-1;14371:4:0;;13970:413;-1:-1:-1;;;13970:413:0:o;11985:175::-;12071:4;12088:42;5988:10;12112:9;12123:6;12088:9;:42::i;24593:182::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24678:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24678:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24733:34;;1163:41:1;;;24733:34:0::1;::::0;1136:18:1;24733:34:0::1;;;;;;;24593:182:::0;;:::o;23723:497::-;6662:6;;23831:4;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;23910:6:::1;23889:13;11822:12:::0;;;11734:108;23889:13:::1;:17;::::0;23905:1:::1;23889:17;:::i;:::-;23888:28;;;;:::i;:::-;23875:9;:41;;23853:144;;;::::0;-1:-1:-1;;;23853:144:0;;7403:2:1;23853: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;;23853:144:0::1;7201:417:1::0;23853:144:0::1;24065:4;24044:13;11822:12:::0;;;11734:108;24044:13:::1;:17;::::0;24060:1:::1;24044:17;:::i;:::-;24043:26;;;;:::i;:::-;24030:9;:39;;24008:141;;;::::0;-1:-1:-1;;;24008:141:0;;7825:2:1;24008: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;;24008:141:0::1;7623:416:1::0;24008:141:0::1;-1:-1:-1::0;24160:18:0::1;:30:::0;;;24208:4:::1;6795:1;23723:497:::0;;;:::o;23345:135::-;6662:6;;23405:4;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;-1:-1:-1;23422:20:0::1;:28:::0;;-1:-1:-1;;23422:28:0::1;::::0;;;23345:135;:::o;6923:201::-;6662:6;;-1:-1:-1;;;;;6662:6:0;5988:10;6724:23;6716:68;;;;-1:-1:-1;;;6716:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7012:22:0;::::1;7004:73;;;::::0;-1:-1:-1;;;7004:73:0;;8246:2:1;7004: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;;7004:73:0::1;8044:402:1::0;7004:73:0::1;7088:28;7107:8;7088:18;:28::i;:::-;6923:201:::0;:::o;15922:380::-;-1:-1:-1;;;;;16058:19:0;;16050:68;;;;-1:-1:-1;;;16050:68:0;;8653:2:1;16050: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;;16050:68:0;8451:400:1;16050:68:0;-1:-1:-1;;;;;16137:21:0;;16129:68;;;;-1:-1:-1;;;16129:68:0;;9058:2:1;16129: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;;16129:68:0;8856:398:1;16129:68:0;-1:-1:-1;;;;;16210:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16262:32;;1596:25:1;;;16262:32:0;;1569:18:1;16262:32:0;;;;;;;15922:380;;;:::o;25425:5129::-;-1:-1:-1;;;;;25557:18:0;;25549:68;;;;-1:-1:-1;;;25549:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25636:16:0;;25628:64;;;;-1:-1:-1;;;25628:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25712:13:0;;;;;;:7;:13;;;;;;;;25711:14;25703:33;;;;-1:-1:-1;;;25703:33:0;;10271:2:1;25703:33:0;;;10253:21:1;10310:1;10290:18;;;10283:29;-1:-1:-1;;;10328:18:1;;;10321:36;10374:18;;25703:33:0;10069:329:1;25703:33:0;25753:6;25763:1;25753:11;25749:93;;25781:28;25797:4;25803:2;25807:1;25781:15;:28::i;:::-;25425:5129;;;:::o;25749:93::-;6662:6;;-1:-1:-1;;;;;6662:6:0;-1:-1:-1;;;;;25858:15:0;:4;-1:-1:-1;;;;;25858:15:0;;25854:102;;25890:33;25906:4;25912:2;25916:6;25890:15;:33::i;25854:102::-;25972:14;;;;25968:2264;;;26008:8;;-1:-1:-1;;;26008:8:0;;;;26003:2218;;26042:13;;;;;;;26037:223;;-1:-1:-1;;;;;26114:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26143:23:0;;;;;;:19;:23;;;;;;;;26114:52;26080:160;;;;-1:-1:-1;;;26080:160:0;;10605:2:1;26080:160:0;;;10587:21:1;10644:2;10624:18;;;10617:30;-1:-1:-1;;;10663:18:1;;;10656:52;10725:18;;26080:160:0;10403:346:1;26080:160:0;26416:20;;;;26412:641;;;6662:6;;-1:-1:-1;;;;;26491:13:0;;;6662:6;;26491:13;;;;:72;;;26547:15;-1:-1:-1;;;;;26533:30:0;:2;-1:-1:-1;;;;;26533:30:0;;;26491:72;:129;;;;;26606:13;-1:-1:-1;;;;;26592:28:0;:2;-1:-1:-1;;;;;26592:28:0;;;26491:129;26461:573;;;26738:9;26709:39;;;;:28;:39;;;;;;26784:12;-1:-1:-1;26671:258:0;;;;-1:-1:-1;;;26671:258:0;;10956:2:1;26671: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;;26671:258:0;10754:477:1;26671:258:0;26985:9;26956:39;;;;:28;:39;;;;;26998:12;26956:54;;26461:573;-1:-1:-1;;;;;27127:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;27184:29:0;;;;;;:25;:29;;;;;;;;27183:30;27127:86;27101:1105;;;27300:14;;27290:6;:24;;27256:157;;;;-1:-1:-1;;;27256:157:0;;11438:2:1;27256: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;;27256:157:0;11236:411:1;27256:157:0;27496:9;;-1:-1:-1;;;;;11951:18:0;;11924:7;11951:18;;;;;;;;;;;27470:22;;:6;:22;:::i;:::-;:35;;27436:140;;;;-1:-1:-1;;;27436:140:0;;11854:2:1;27436:140:0;;;11836:21:1;11893:2;11873:18;;;11866:30;-1:-1:-1;;;11912:18:1;;;11905:49;11971:18;;27436:140:0;11652:343:1;27436:140:0;27101:1105;;;-1:-1:-1;;;;;27674:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;27729:31:0;;;;;;:25;:31;;;;;;;;27728:32;27674:86;27648:558;;;27847:14;;27837:6;:24;;27803:158;;;;-1:-1:-1;;;27803:158:0;;12202:2:1;27803: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;;27803:158:0;12000:412:1;27648:558:0;-1:-1:-1;;;;;27992:29:0;;;;;;:25;:29;;;;;;;;27987:219;;28106:9;;-1:-1:-1;;;;;11951:18:0;;11924:7;11951:18;;;;;;;;;;;28080:22;;:6;:22;:::i;:::-;:35;;28046:140;;;;-1:-1:-1;;;28046:140:0;;11854:2:1;28046:140:0;;;11836:21:1;11893:2;11873:18;;;11866:30;-1:-1:-1;;;11912:18:1;;;11905:49;11971:18;;28046:140:0;11652:343:1;28046:140:0;-1:-1:-1;;;;;28248:25:0;;;;;;:19;:25;;;;;;;;:52;;;;-1:-1:-1;;;;;;28277:23:0;;;;;;:19;:23;;;;;;;;28248:52;28244:119;;;28336:15;28317:16;:34;28244:119;-1:-1:-1;;;;;28377:25:0;;;;;;:19;:25;;;;;;;;28373:112;;;28419:33;28435:4;28441:2;28445:6;28419:15;:33::i;28373:112::-;28495:21;28507:4;28513:2;28495:11;:21::i;:::-;28576:4;28527:28;11951:18;;;;;;;;;;;28632;;28608:42;;;;;;;28679:35;;-1:-1:-1;28703:11:0;;;;;;;28679:35;:61;;;;-1:-1:-1;28732:8:0;;-1:-1:-1;;;28732:8:0;;;;28731:9;28679:61;:110;;;;-1:-1:-1;;;;;;28758:31:0;;;;;;:25;:31;;;;;;;;28757:32;28679:110;:153;;;;-1:-1:-1;;;;;;28807:25:0;;;;;;:19;:25;;;;;;;;28806:26;28679:153;:194;;;;-1:-1:-1;;;;;;28850:23:0;;;;;;:19;:23;;;;;;;;28849:24;28679:194;28661:326;;;28900:8;:15;;-1:-1:-1;;;;28900:15:0;-1:-1:-1;;;28900:15:0;;;28932:10;:8;:10::i;:::-;28959:8;:16;;-1:-1:-1;;;;28959:16:0;;;28661:326;29015:8;;-1:-1:-1;;;;;29125:25:0;;28999:12;29125:25;;;29015:8;29125:25;;;;;;29015:8;-1:-1:-1;;;29015:8:0;;;;;29014:9;;29125:25;;:52;;-1:-1:-1;;;;;;29154:23:0;;;;;;:19;:23;;;;;;;;29125:52;29121:100;;;-1:-1:-1;29204:5:0;29121:100;29233:12;29338:7;29334:1167;;;-1:-1:-1;;;;;29390:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29439:1;29423:13;;:17;29390:50;29386:966;;;29468:34;29498:3;29468:25;29479:13;;29468:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29461:41;;29571:13;;29551:16;;29544:4;:23;;;;:::i;:::-;29543:41;;;;:::i;:::-;29521:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29657:13:0;;29635:18;;29628:25;;:4;:25;:::i;:::-;29627:43;;;;:::i;:::-;29603:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;29739:13:0;;29719:16;;29712:23;;:4;:23;:::i;:::-;29711:41;;;;:::i;:::-;29689:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29823:13:0;;29802:17;;29795:24;;:4;:24;:::i;:::-;29794:42;;;;:::i;:::-;29771:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;29386:966:0;;-1:-1:-1;29386:966:0;;-1:-1:-1;;;;;29898:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29948:1;29933:12;;:16;29898:51;29894:458;;;29977:33;30006:3;29977:24;29988:12;;29977:6;:10;;:24;;;;:::i;:33::-;29970:40;;30078:12;;30059:15;;30052:4;:22;;;;:::i;:::-;30051:39;;;;:::i;:::-;30029:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30162:12:0;;30141:17;;30134:24;;:4;:24;:::i;:::-;30133:41;;;;:::i;:::-;30109:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;30242:12:0;;30223:15;;30216:22;;:4;:22;:::i;:::-;30215:39;;;;:::i;:::-;30193:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30324:12:0;;30304:16;;30297:23;;:4;:23;:::i;:::-;30296:40;;;;:::i;:::-;30273:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29894:458:0;30372:8;;30368:91;;30401:42;30417:4;30431;30438;30401:15;:42::i;:::-;30475:14;30485:4;30475:14;;:::i;:::-;;;29334:1167;30513:33;30529:4;30535:2;30539:6;30513:15;:33::i;:::-;25538:5016;;;;25425:5129;;;:::o;7132:191::-;7225:6;;;-1:-1:-1;;;;;7242:17:0;;;-1:-1:-1;;;;;;7242:17:0;;;;;;;7275:40;;7225:6;;;7242:17;7225:6;;7275:40;;7206:16;;7275:40;7195:128;7132:191;:::o;25095:188::-;-1:-1:-1;;;;;25178:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;25178:39:0;;;;;;;;;;25235:40;;25178:39;;:31;25235:40;;;25095:188;;:::o;13229:733::-;-1:-1:-1;;;;;13369:20:0;;13361:70;;;;-1:-1:-1;;;13361:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13450:23:0;;13442:71;;;;-1:-1:-1;;;13442:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13610:17:0;;13586:21;13610:17;;;;;;;;;;;13646:23;;;;13638:74;;;;-1:-1:-1;;;13638:74:0;;12752:2:1;13638: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;;13638:74:0;12550:402:1;13638:74:0;-1:-1:-1;;;;;13748:17:0;;;:9;:17;;;;;;;;;;;13768:22;;;13748:42;;13812:20;;;;;;;;:30;;13784:6;;13748:9;13812:30;;13784:6;;13812:30;:::i;:::-;;;;;;;;13877:9;-1:-1:-1;;;;;13860:35:0;13869:6;-1:-1:-1;;;;;13860:35:0;;13888:6;13860:35;;;;1596:25:1;;1584:2;1569:18;;1450:177;13860:35:0;;;;;;;;13350:612;13229:733;;;:::o;14391:517::-;-1:-1:-1;;;;;14607:17:0;;14583:21;14607:17;;;;;;;;;;;14643:10;14635:23;;;;-1:-1:-1;;;14635:23:0;;13159:2:1;14635:23:0;;;13141:21:1;-1:-1:-1;13178:18:1;;;13171:29;13217:18;;14635:23:0;12957:284:1;31688:628:0;-1:-1:-1;;;;;31760:25:0;;;;;;:19;:25;;;;;;;;31759:26;:54;;;;-1:-1:-1;;;;;;31790:23:0;;;;;;:19;:23;;;;;;;;31789:24;31759:54;31755:554;;;-1:-1:-1;;;;;31834:31:0;;;;;;:25;:31;;;;;;;;31830:468;;;-1:-1:-1;;;;;31926:16:0;;31886:37;31926:16;;;:12;:16;;;;;31965:22;;31926:16;;31965:27;31961:78;;32021:15;31996:40;;-1:-1:-1;;24783:304:0:o;31830:468::-;-1:-1:-1;;;;;32119:18:0;;32079:37;32119:18;;;:12;:18;;;;;32206:16;;32181:22;;:41;;32206:16;32181:41;:::i;:::-;32156:22;;;:66;32267:15;32241:23;;;;:41;31688:628;;:::o;32324:1910::-;32407:4;32363:23;11951:18;;;;;;;;;;;32363:50;;32424:25;32556:19;;32520:20;;32486:18;;32452;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;32424:151;-1:-1:-1;32586:12:0;32615:20;;;:46;;-1:-1:-1;32639:22:0;;32615:46;32611:85;;;32678:7;;;32324:1910::o;32611:85::-;32730:18;;:23;;32751:2;32730:23;:::i;:::-;32712:15;:41;32708:115;;;32788:18;;:23;;32809:2;32788:23;:::i;:::-;32770:41;;32708:115;32884:23;32971:1;32951:17;32929:18;;32911:15;:36;;;;:::i;:::-;32910:58;;;;:::i;:::-;:62;;;;:::i;:::-;32884:88;-1:-1:-1;32983:26:0;33012:36;:15;32884:88;33012:19;:36::i;:::-;32983:65;-1:-1:-1;33089:21:0;33123:36;32983:65;33123:16;:36::i;:::-;33172:18;33193:44;:21;33219:17;33193:25;:44::i;:::-;33172:65;;33250:18;33271:57;33310:17;33271:34;33286:18;;33271:10;:14;;:34;;;;:::i;:57::-;33250:78;;33339:25;33367:59;33408:17;33367:36;33382:20;;33367:10;:14;;:36;;;;:::i;:59::-;33339:87;;33437:24;33464:58;33504:17;33464:35;33479:19;;33464:10;:14;;:35;;;;:::i;:58::-;33437:85;-1:-1:-1;33535:23:0;33437:85;33587:17;33561:23;33574:10;33561;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;33657:1;33636:18;:22;;;33669:18;:22;;;33702:20;:24;;;33737:19;:23;;;33795:17;;33787:61;;33535:88;;-1:-1:-1;;;;;;33795:17:0;;33826;;33787:61;33657:1;33787:61;33826:17;33795;33787:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33773:75:0;;-1:-1:-1;;33865:19:0;;;;;:42;;;33906:1;33888:15;:19;33865:42;33861:278;;;33924:46;33937:15;33954;33924:12;:46::i;:::-;34094:18;;33990:137;;;13658:25:1;;;13714:2;13699:18;;13692:34;;;13742:18;;;13735:34;;;;33990:137:0;;;;;;13646:2:1;33990:137:0;;;33861:278;34171:15;;34163:63;;-1:-1:-1;;;;;34171:15:0;;;;34200:21;;34163:63;;;;34200:21;34171:15;34163:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;32324:1910:0:o;4089:98::-;4147:7;4174:5;4178:1;4174;:5;:::i;:::-;4167:12;4089:98;-1:-1:-1;;;4089:98:0:o;4195:::-;4253:7;4280:5;4284:1;4280;:5;:::i;3983:98::-;4041:7;4068:5;4072:1;4068;:5;:::i;30562:589::-;30712:16;;;30726:1;30712:16;;;;;;;;30688:21;;30712:16;;;;;;;;;;-1:-1:-1;30712:16:0;30688:40;;30757:4;30739;30744:1;30739:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30739:23:0;;;-1:-1:-1;;;;;30739:23:0;;;;;30783:15;-1:-1:-1;;;;;30783:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30773:4;30778:1;30773:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;30773:32:0;;;-1:-1:-1;;;;;30773:32:0;;;;;30818:62;30835:4;30850:15;30868:11;30818:8;:62::i;:::-;30919:224;;-1:-1:-1;;;30919:224:0;;-1:-1:-1;;;;;30919:15:0;:66;;;;:224;;31000:11;;31026:1;;31070:4;;31097;;31117:15;;30919:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30617:534;30562:589;:::o;31159:521::-;31307:62;31324:4;31339:15;31357:11;31307:8;:62::i;:::-;31616:15;;31412:260;;-1:-1:-1;;;31412:260:0;;31484:4;31412:260;;;15634:34:1;15684:18;;;15677:34;;;31530:1:0;15727:18:1;;;15720:34;;;15770:18;;;15763:34;-1:-1:-1;;;;;31616:15:0;;;15813:19:1;;;15806:44;31646:15:0;15866:19:1;;;15859:35;31412:15:0;:31;;;;;;31451:9;;15568:19:1;;31412:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31159: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:356::-;5210:2;5192:21;;;5229:18;;;5222:30;5288:34;5283:2;5268:18;;5261:62;5355:2;5340:18;;5008:356::o;5712:127::-;5773:10;5768:3;5764:20;5761:1;5754:31;5804:4;5801:1;5794:15;5828:4;5825:1;5818:15;5844:125;5909:9;;;5930:10;;;5927:36;;;5943:18;;:::i;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://e94666dfee58702e19555aa7adf4845a0d849bed47e79f0e12aafb011891e2e9
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.