ETH Price: $2,867.54 (-10.46%)
Gas: 13 Gwei

Token

Scarzy Token (SCARZY)
 

Overview

Max Total Supply

1,000,000,000 SCARZY

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,566,186.185594435221265968 SCARZY

Value
$0.00
0x4a982d4c5acd3d4bfbdd5a878dfe779ee11422cf
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:
Scarzy

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
//
//  Scarzy, the wolf of cryptocurrencies, is ready to howl its way into your wallet! 
//
//   https://scarzy.net/
//
//   https://t.me/scarzytoken
//

pragma solidity ^0.8.6;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        balanceseforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract Ownable is Context {
    address private _owner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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;
        }
    }
}

/*
 * @dev Contract starts here
 */

contract Scarzy is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private _swapping;
    address private _fw;
    address public burnAddress =
        address(0x000000000000000000000000000000000000dEaD);
    uint256 public bl;
    uint256 public sl;
    uint256 public mw;
    uint256 public swapTokensThreshold; 
    
    bool public feesDisabled = false;
    bool public tradingLive = false;
    
    uint256 private _fundingFee = 3;
    uint256 private  burnFee = 1;
    uint256 private _liquidityFee = 3;

    uint256 private _tokensForFunding;
    uint256 private _tokensForLiquidity;
    uint256 public totalFees = _fundingFee + _liquidityFee + burnFee;
    
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private _automatedMarketMakerPairs;
    mapping(address => uint256) private _holderLastTransferBlock;

    constructor() payable ERC20("Scarzy Token", "SCARZY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;
        uint256 totalSupply = 1000000000000000000000000000;
        setLimits(20000000 ether, 20000000 ether, 20000000 ether);
        swapTokensThreshold = (totalSupply * 2) / 1000;
        _fw = owner();
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _mint(address(this), totalSupply);
    }

    function addInitialLP() external onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            totalSupply(),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function enableTrading() external onlyOwner {
        tradingLive = true;
    }

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

    function setLimits(
        uint256 balancesl,
        uint256 _sl,
        uint256 _mw
    ) public onlyOwner {
        bl = balancesl;
        sl = _sl;
        mw = _mw;
    }

    function setFeeState(bool state) external onlyOwner {
        feesDisabled = state;
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        _fw = newWallet;
    }

    function isExcludedFromFees(address account) external 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");

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

        // burn
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 burnAmount = amount.div(100) * burnFee;
            _transfer(from, burnAddress, burnAmount);
            amount -= burnAmount;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !_swapping
        ) {
            if (!tradingLive)
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "_transfer:: Trading is not active."
                );
            // on buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= bl,
                    "_transfer:: Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= mw,
                    "_transfer:: Max wallet exceeded"
                );
            }
            // on sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= sl,
                    "_transfer:: Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= mw,
                    "_transfer:: Max wallet exceeded"
                );
            }
        }

        if (
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            feesDisabled ||
            _isExcludedFromFees[from] ||
            _isExcludedFromFees[to] ||
            (!_automatedMarketMakerPairs[from] &&
                !_automatedMarketMakerPairs[to])
        ) takeFee = false;

        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);

            _tokensForLiquidity += (fees * _liquidityFee) / totalFees;
            _tokensForFunding += (fees * _fundingFee) / totalFees;

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

            amount -= fees;
        }

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

    function _swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _fw,
            block.timestamp
        );
    }

    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForFunding;

        if (contractBalance == 0) return;
        if (contractBalance > swapTokensThreshold)
            contractBalance = swapTokensThreshold;

        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 ethForFunding = ethBalance.mul(_tokensForFunding).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForFunding;

        _tokensForFunding = 0;
        _tokensForLiquidity = 0;

        payable(_fw).transfer(ethForFunding);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    function withdrawContractFunds(address to, uint256 amountToTransfer)
        external
        onlyOwner
    {
        payable(to).transfer(amountToTransfer);
    }

    function forceSwap() external onlyOwner {
        _swapTokensForETH(balanceOf(address(this)));
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addInitialLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwap","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":"mw","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"balancesl","type":"uint256"},{"internalType":"uint256","name":"_sl","type":"uint256"},{"internalType":"uint256","name":"_mw","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensThreshold","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":"totalFees","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":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToTransfer","type":"uint256"}],"name":"withdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b03191661dead179055600f805461ffff1916905560036010819055600160118190556012829055906200004390806200050b565b6200004f91906200050b565b601555604080518082018252600c81526b29b1b0b93d3c902a37b5b2b760a11b602080830191825283518085019094526006845265534341525a5960d01b908401528151919291620000a49160039162000465565b508051620000ba90600490602084019062000465565b5050506000620000cf620002a960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d600081905260176020527f6ed4a2ad7fcc8c909e132e6944330e092422b135566df0c96615e85c6f709ad8805460ff19166001179055600780546001600160a01b031916821790556b033b2e3c9fd0803ce80000006200019f6a108b2a2c280290940000008080620002ad565b6103e8620001af82600262000549565b620001bb919062000526565b600e55600554600980546001600160a01b0319166001600160a01b039092169182179055620001ec9060016200030a565b620001f93060016200030a565b6200020861dead60016200030a565b600160176000620002216005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530808252601790935290812080548416600190811790915561dead9091527f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b0303805490931617909155620002a1908262000380565b5050620005be565b3390565b6005546001600160a01b03163314620002fc5760405162461bcd60e51b815260206004820181905260248201526000805160206200256783398151915260448201526064015b60405180910390fd5b600b92909255600c55600d55565b6005546001600160a01b03163314620003555760405162461bcd60e51b81526020600482018190526024820152600080516020620025678339815191526044820152606401620002f3565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b038216620003d85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620002f3565b8060026000828254620003ec91906200050b565b90915550506001600160a01b038216600090815260208190526040812080548392906200041b9084906200050b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000473906200056b565b90600052602060002090601f016020900481019282620004975760008555620004e2565b82601f10620004b257805160ff1916838001178555620004e2565b82800160010185558215620004e2579182015b82811115620004e2578251825591602001919060010190620004c5565b50620004f0929150620004f4565b5090565b5b80821115620004f05760008155600101620004f5565b60008219821115620005215762000521620005a8565b500190565b6000826200054457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620005665762000566620005a8565b500290565b600181811c908216806200058057607f821691505b60208210811415620005a257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b611f9980620005ce6000396000f3fe6080604052600436106101dc5760003560e01c8063715018a611610102578063a742d78c11610095578063cef8513911610064578063cef851391461054e578063dd62ed3e14610564578063df778d26146105aa578063f2fde38b146105bf57600080fd5b8063a742d78c146104d8578063a9059cbb146104ee578063bb5e048a1461050e578063c02466681461052e57600080fd5b80638a8c523c116100d15780638a8c523c146104705780638da5cb5b1461048557806395d89b41146104a3578063a457c2d7146104b857600080fd5b8063715018a61461040f5780637cb332bb146104245780637e95c6b414610444578063823571051461045a57600080fd5b80632e1888b81161017a578063572eeb2811610149578063572eeb281461037257806365cffb1e1461038757806370a08231146103a157806370d5ae05146103d757600080fd5b80632e1888b8146102dd578063313ce567146102fd57806339509351146103195780634fbee1931461033957600080fd5b806313114a9d116101b657806313114a9d1461026257806318160ddd14610286578063189ae5f21461029b57806323b872dd146102bd57600080fd5b806306fdde03146101e8578063095ea7b31461021357806311704f521461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6105df565b60405161020a9190611d36565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611c5a565b610671565b604051901515815260200161020a565b34801561024f57600080fd5b50600f5461023390610100900460ff1681565b34801561026e57600080fd5b5061027860155481565b60405190815260200161020a565b34801561029257600080fd5b50600254610278565b3480156102a757600080fd5b506102bb6102b6366004611ca1565b610689565b005b3480156102c957600080fd5b506102336102d8366004611be4565b6106ca565b3480156102e957600080fd5b506102bb6102f8366004611c5a565b6106ee565b34801561030957600080fd5b506040516012815260200161020a565b34801561032557600080fd5b50610233610334366004611c5a565b610753565b34801561034557600080fd5b50610233610354366004611b71565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561037e57600080fd5b506102bb610792565b34801561039357600080fd5b50600f546102339060ff1681565b3480156103ad57600080fd5b506102786103bc366004611b71565b6001600160a01b031660009081526020819052604090205490565b3480156103e357600080fd5b50600a546103f7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b34801561041b57600080fd5b506102bb610a64565b34801561043057600080fd5b506102bb61043f366004611b71565b610ad8565b34801561045057600080fd5b50610278600c5481565b34801561046657600080fd5b50610278600b5481565b34801561047c57600080fd5b506102bb610b24565b34801561049157600080fd5b506005546001600160a01b03166103f7565b3480156104af57600080fd5b506101fd610b5f565b3480156104c457600080fd5b506102336104d3366004611c5a565b610b6e565b3480156104e457600080fd5b50610278600d5481565b3480156104fa57600080fd5b50610233610509366004611c5a565b610c00565b34801561051a57600080fd5b506102bb610529366004611c86565b610c0e565b34801561053a57600080fd5b506102bb610549366004611c25565b610c4b565b34801561055a57600080fd5b50610278600e5481565b34801561057057600080fd5b5061027861057f366004611bab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105b657600080fd5b506102bb610ca0565b3480156105cb57600080fd5b506102bb6105da366004611b71565b610ce5565b6060600380546105ee90611ee4565b80601f016020809104026020016040519081016040528092919081815260200182805461061a90611ee4565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b60003361067f818585610dd0565b5060019392505050565b6005546001600160a01b031633146106bc5760405162461bcd60e51b81526004016106b390611dce565b60405180910390fd5b600b92909255600c55600d55565b6000336106d8858285610ef4565b6106e3858585610f86565b506001949350505050565b6005546001600160a01b031633146107185760405162461bcd60e51b81526004016106b390611dce565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561074e573d6000803e3d6000fd5b505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061067f908290869061078d908790611e74565b610dd0565b6005546001600160a01b031633146107bc5760405162461bcd60e51b81526004016106b390611dce565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561080a57600080fd5b505afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611b8e565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190611b8e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109579190611b8e565b600880546001600160a01b0319166001600160a01b0392831690811782556000908152601760209081526040808320805460ff199081166001908117909255945486168452601890925290912080549092161790556007546002546109bf9230921690610dd0565b6007546001600160a01b031663f305d71947306109db60025490565b6000806109f06005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610a1296959493929190611cfb565b6060604051808303818588803b158015610a2b57600080fd5b505af1158015610a3f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061074e9190611ccd565b6005546001600160a01b03163314610a8e5760405162461bcd60e51b81526004016106b390611dce565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b025760405162461bcd60e51b81526004016106b390611dce565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016106b390611dce565b600f805461ff001916610100179055565b6060600480546105ee90611ee4565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610bf35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106b3565b6106e38286868403610dd0565b60003361067f818585610f86565b6005546001600160a01b03163314610c385760405162461bcd60e51b81526004016106b390611dce565b600f805460ff1916911515919091179055565b6005546001600160a01b03163314610c755760405162461bcd60e51b81526004016106b390611dce565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cca5760405162461bcd60e51b81526004016106b390611dce565b30600090815260208190526040902054610ce390611673565b565b6005546001600160a01b03163314610d0f5760405162461bcd60e51b81526004016106b390611dce565b6001600160a01b038116610d745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b3565b6001600160a01b038216610e935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610f805781811015610f735760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b3565b610f808484848403610dd0565b50505050565b6001600160a01b038316610fea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b3565b6001600160a01b0382166110105760405162461bcd60e51b81526004016106b390611d8b565b806110215761074e838360006117dc565b6001600160a01b03831660009081526016602052604090205460ff1615801561106357506001600160a01b03821660009081526016602052604090205460ff16155b156110ac57601154600090611079836064611960565b6110839190611eae565b600a5490915061109e9085906001600160a01b031683610f86565b6110a88183611ecd565b9150505b6005546001600160a01b038481169116148015906110d857506005546001600160a01b03838116911614155b80156110ec57506001600160a01b03821615155b801561110357506001600160a01b03821661dead14155b80156111195750600854600160a01b900460ff16155b1561146157600f54610100900460ff166111c3576001600160a01b03831660009081526016602052604090205460ff168061116c57506001600160a01b03821660009081526016602052604090205460ff165b6111c35760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b60648201526084016106b3565b6001600160a01b03831660009081526018602052604090205460ff16801561120457506001600160a01b03821660009081526017602052604090205460ff16155b1561130457600b5481111561128b5760405162461bcd60e51b815260206004820152604160248201527f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060448201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e746064820152601760f91b608482015260a4016106b3565b600d546001600160a01b0383166000908152602081905260409020546112b19083611e74565b11156112ff5760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016106b3565b611461565b6001600160a01b03821660009081526018602052604090205460ff16801561134557506001600160a01b03831660009081526017602052604090205460ff16155b156113cd57600c548111156112ff5760405162461bcd60e51b815260206004820152604260248201527f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460448201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e6064820152613a1760f11b608482015260a4016106b3565b6001600160a01b03821660009081526017602052604090205460ff1661146157600d546001600160a01b0383166000908152602081905260409020546114139083611e74565b11156114615760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016106b3565b600854600160a01b900460ff1615801561149457506001600160a01b03831660009081526018602052604090205460ff16155b80156114b957506001600160a01b03831660009081526016602052604090205460ff16155b80156114de57506001600160a01b03821660009081526016602052604090205460ff16155b1561150c576008805460ff60a01b1916600160a01b1790556114fe611973565b6008805460ff60a01b191690555b600854600f5460ff600160a01b90920482161591168061154457506001600160a01b03841660009081526016602052604090205460ff165b8061156757506001600160a01b03831660009081526016602052604090205460ff165b806115af57506001600160a01b03841660009081526018602052604090205460ff161580156115af57506001600160a01b03831660009081526018602052604090205460ff16155b156115b8575060005b60008115611661576115e060646115da60155486611a9a90919063ffffffff16565b90611960565b9050601554601254826115f39190611eae565b6115fd9190611e8c565b6014600082825461160e9190611e74565b90915550506015546010546116239083611eae565b61162d9190611e8c565b6013600082825461163e9190611e74565b90915550508015611654576116548530836117dc565b61165e8184611ecd565b92505b61166c8585856117dc565b5050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106116a8576116a8611f35565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156116fc57600080fd5b505afa158015611710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117349190611b8e565b8160018151811061174757611747611f35565b6001600160a01b03928316602091820292909201015260075461176d9130911684610dd0565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906117a6908590600090869030904290600401611e03565b600060405180830381600087803b1580156117c057600080fd5b505af11580156117d4573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166118325760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20612066726f6d20746865207a65726f2061646472657373000060448201526064016106b3565b6001600160a01b0382166118585760405162461bcd60e51b81526004016106b390611d8b565b6001600160a01b038316600090815260208190526040902054818110156118d05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106b3565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611907908490611e74565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161195391815260200190565b60405180910390a3610f80565b600061196c8284611e8c565b9392505050565b30600090815260208190526040812054905060006013546014546119979190611e74565b9050816119a2575050565b600e548211156119b257600e5491505b6000600282601454856119c59190611eae565b6119cf9190611e8c565b6119d99190611e8c565b905060006119e78483611aa6565b9050476119f382611673565b60006119ff4783611aa6565b90506000611a1c866115da60135485611a9a90919063ffffffff16565b90506000611a2a8284611ecd565b6000601381905560148190556009546040519293506001600160a01b03169184156108fc0291859190818181858888f19350505050158015611a70573d6000803e3d6000fd5b50600086118015611a815750600081115b15611a9057611a908682611ab2565b5050505050505050565b600061196c8284611eae565b600061196c8284611ecd565b600754611aca9030906001600160a01b031684610dd0565b60075460095460405163f305d71960e01b81526001600160a01b039283169263f305d719928592611b0a9230928992600092839216904290600401611cfb565b6060604051808303818588803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061166c9190611ccd565b80358015158114611b6c57600080fd5b919050565b600060208284031215611b8357600080fd5b813561196c81611f4b565b600060208284031215611ba057600080fd5b815161196c81611f4b565b60008060408385031215611bbe57600080fd5b8235611bc981611f4b565b91506020830135611bd981611f4b565b809150509250929050565b600080600060608486031215611bf957600080fd5b8335611c0481611f4b565b92506020840135611c1481611f4b565b929592945050506040919091013590565b60008060408385031215611c3857600080fd5b8235611c4381611f4b565b9150611c5160208401611b5c565b90509250929050565b60008060408385031215611c6d57600080fd5b8235611c7881611f4b565b946020939093013593505050565b600060208284031215611c9857600080fd5b61196c82611b5c565b600080600060608486031215611cb657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611ce257600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b81811015611d6357858101830151858201604001528201611d47565b81811115611d75576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e535784516001600160a01b031683529383019391830191600101611e2e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611e8757611e87611f1f565b500190565b600082611ea957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611ec857611ec8611f1f565b500290565b600082821015611edf57611edf611f1f565b500390565b600181811c90821680611ef857607f821691505b60208210811415611f1957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611f6057600080fd5b5056fea26469706673582212202fbd529c9a2993e83fbeb8e53ef08288caaa91761ad75227b594b8da624da2b864736f6c634300080600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c8063715018a611610102578063a742d78c11610095578063cef8513911610064578063cef851391461054e578063dd62ed3e14610564578063df778d26146105aa578063f2fde38b146105bf57600080fd5b8063a742d78c146104d8578063a9059cbb146104ee578063bb5e048a1461050e578063c02466681461052e57600080fd5b80638a8c523c116100d15780638a8c523c146104705780638da5cb5b1461048557806395d89b41146104a3578063a457c2d7146104b857600080fd5b8063715018a61461040f5780637cb332bb146104245780637e95c6b414610444578063823571051461045a57600080fd5b80632e1888b81161017a578063572eeb2811610149578063572eeb281461037257806365cffb1e1461038757806370a08231146103a157806370d5ae05146103d757600080fd5b80632e1888b8146102dd578063313ce567146102fd57806339509351146103195780634fbee1931461033957600080fd5b806313114a9d116101b657806313114a9d1461026257806318160ddd14610286578063189ae5f21461029b57806323b872dd146102bd57600080fd5b806306fdde03146101e8578063095ea7b31461021357806311704f521461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6105df565b60405161020a9190611d36565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611c5a565b610671565b604051901515815260200161020a565b34801561024f57600080fd5b50600f5461023390610100900460ff1681565b34801561026e57600080fd5b5061027860155481565b60405190815260200161020a565b34801561029257600080fd5b50600254610278565b3480156102a757600080fd5b506102bb6102b6366004611ca1565b610689565b005b3480156102c957600080fd5b506102336102d8366004611be4565b6106ca565b3480156102e957600080fd5b506102bb6102f8366004611c5a565b6106ee565b34801561030957600080fd5b506040516012815260200161020a565b34801561032557600080fd5b50610233610334366004611c5a565b610753565b34801561034557600080fd5b50610233610354366004611b71565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561037e57600080fd5b506102bb610792565b34801561039357600080fd5b50600f546102339060ff1681565b3480156103ad57600080fd5b506102786103bc366004611b71565b6001600160a01b031660009081526020819052604090205490565b3480156103e357600080fd5b50600a546103f7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b34801561041b57600080fd5b506102bb610a64565b34801561043057600080fd5b506102bb61043f366004611b71565b610ad8565b34801561045057600080fd5b50610278600c5481565b34801561046657600080fd5b50610278600b5481565b34801561047c57600080fd5b506102bb610b24565b34801561049157600080fd5b506005546001600160a01b03166103f7565b3480156104af57600080fd5b506101fd610b5f565b3480156104c457600080fd5b506102336104d3366004611c5a565b610b6e565b3480156104e457600080fd5b50610278600d5481565b3480156104fa57600080fd5b50610233610509366004611c5a565b610c00565b34801561051a57600080fd5b506102bb610529366004611c86565b610c0e565b34801561053a57600080fd5b506102bb610549366004611c25565b610c4b565b34801561055a57600080fd5b50610278600e5481565b34801561057057600080fd5b5061027861057f366004611bab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105b657600080fd5b506102bb610ca0565b3480156105cb57600080fd5b506102bb6105da366004611b71565b610ce5565b6060600380546105ee90611ee4565b80601f016020809104026020016040519081016040528092919081815260200182805461061a90611ee4565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b60003361067f818585610dd0565b5060019392505050565b6005546001600160a01b031633146106bc5760405162461bcd60e51b81526004016106b390611dce565b60405180910390fd5b600b92909255600c55600d55565b6000336106d8858285610ef4565b6106e3858585610f86565b506001949350505050565b6005546001600160a01b031633146107185760405162461bcd60e51b81526004016106b390611dce565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561074e573d6000803e3d6000fd5b505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061067f908290869061078d908790611e74565b610dd0565b6005546001600160a01b031633146107bc5760405162461bcd60e51b81526004016106b390611dce565b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561080a57600080fd5b505afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611b8e565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190611b8e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109579190611b8e565b600880546001600160a01b0319166001600160a01b0392831690811782556000908152601760209081526040808320805460ff199081166001908117909255945486168452601890925290912080549092161790556007546002546109bf9230921690610dd0565b6007546001600160a01b031663f305d71947306109db60025490565b6000806109f06005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610a1296959493929190611cfb565b6060604051808303818588803b158015610a2b57600080fd5b505af1158015610a3f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061074e9190611ccd565b6005546001600160a01b03163314610a8e5760405162461bcd60e51b81526004016106b390611dce565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b025760405162461bcd60e51b81526004016106b390611dce565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b81526004016106b390611dce565b600f805461ff001916610100179055565b6060600480546105ee90611ee4565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610bf35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106b3565b6106e38286868403610dd0565b60003361067f818585610f86565b6005546001600160a01b03163314610c385760405162461bcd60e51b81526004016106b390611dce565b600f805460ff1916911515919091179055565b6005546001600160a01b03163314610c755760405162461bcd60e51b81526004016106b390611dce565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cca5760405162461bcd60e51b81526004016106b390611dce565b30600090815260208190526040902054610ce390611673565b565b6005546001600160a01b03163314610d0f5760405162461bcd60e51b81526004016106b390611dce565b6001600160a01b038116610d745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b3565b6001600160a01b038216610e935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610f805781811015610f735760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b3565b610f808484848403610dd0565b50505050565b6001600160a01b038316610fea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b3565b6001600160a01b0382166110105760405162461bcd60e51b81526004016106b390611d8b565b806110215761074e838360006117dc565b6001600160a01b03831660009081526016602052604090205460ff1615801561106357506001600160a01b03821660009081526016602052604090205460ff16155b156110ac57601154600090611079836064611960565b6110839190611eae565b600a5490915061109e9085906001600160a01b031683610f86565b6110a88183611ecd565b9150505b6005546001600160a01b038481169116148015906110d857506005546001600160a01b03838116911614155b80156110ec57506001600160a01b03821615155b801561110357506001600160a01b03821661dead14155b80156111195750600854600160a01b900460ff16155b1561146157600f54610100900460ff166111c3576001600160a01b03831660009081526016602052604090205460ff168061116c57506001600160a01b03821660009081526016602052604090205460ff165b6111c35760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b60648201526084016106b3565b6001600160a01b03831660009081526018602052604090205460ff16801561120457506001600160a01b03821660009081526017602052604090205460ff16155b1561130457600b5481111561128b5760405162461bcd60e51b815260206004820152604160248201527f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060448201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e746064820152601760f91b608482015260a4016106b3565b600d546001600160a01b0383166000908152602081905260409020546112b19083611e74565b11156112ff5760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016106b3565b611461565b6001600160a01b03821660009081526018602052604090205460ff16801561134557506001600160a01b03831660009081526017602052604090205460ff16155b156113cd57600c548111156112ff5760405162461bcd60e51b815260206004820152604260248201527f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460448201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e6064820152613a1760f11b608482015260a4016106b3565b6001600160a01b03821660009081526017602052604090205460ff1661146157600d546001600160a01b0383166000908152602081905260409020546114139083611e74565b11156114615760405162461bcd60e51b815260206004820152601f60248201527f5f7472616e736665723a3a204d61782077616c6c65742065786365656465640060448201526064016106b3565b600854600160a01b900460ff1615801561149457506001600160a01b03831660009081526018602052604090205460ff16155b80156114b957506001600160a01b03831660009081526016602052604090205460ff16155b80156114de57506001600160a01b03821660009081526016602052604090205460ff16155b1561150c576008805460ff60a01b1916600160a01b1790556114fe611973565b6008805460ff60a01b191690555b600854600f5460ff600160a01b90920482161591168061154457506001600160a01b03841660009081526016602052604090205460ff165b8061156757506001600160a01b03831660009081526016602052604090205460ff165b806115af57506001600160a01b03841660009081526018602052604090205460ff161580156115af57506001600160a01b03831660009081526018602052604090205460ff16155b156115b8575060005b60008115611661576115e060646115da60155486611a9a90919063ffffffff16565b90611960565b9050601554601254826115f39190611eae565b6115fd9190611e8c565b6014600082825461160e9190611e74565b90915550506015546010546116239083611eae565b61162d9190611e8c565b6013600082825461163e9190611e74565b90915550508015611654576116548530836117dc565b61165e8184611ecd565b92505b61166c8585856117dc565b5050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106116a8576116a8611f35565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156116fc57600080fd5b505afa158015611710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117349190611b8e565b8160018151811061174757611747611f35565b6001600160a01b03928316602091820292909201015260075461176d9130911684610dd0565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906117a6908590600090869030904290600401611e03565b600060405180830381600087803b1580156117c057600080fd5b505af11580156117d4573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166118325760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20612066726f6d20746865207a65726f2061646472657373000060448201526064016106b3565b6001600160a01b0382166118585760405162461bcd60e51b81526004016106b390611d8b565b6001600160a01b038316600090815260208190526040902054818110156118d05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106b3565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611907908490611e74565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161195391815260200190565b60405180910390a3610f80565b600061196c8284611e8c565b9392505050565b30600090815260208190526040812054905060006013546014546119979190611e74565b9050816119a2575050565b600e548211156119b257600e5491505b6000600282601454856119c59190611eae565b6119cf9190611e8c565b6119d99190611e8c565b905060006119e78483611aa6565b9050476119f382611673565b60006119ff4783611aa6565b90506000611a1c866115da60135485611a9a90919063ffffffff16565b90506000611a2a8284611ecd565b6000601381905560148190556009546040519293506001600160a01b03169184156108fc0291859190818181858888f19350505050158015611a70573d6000803e3d6000fd5b50600086118015611a815750600081115b15611a9057611a908682611ab2565b5050505050505050565b600061196c8284611eae565b600061196c8284611ecd565b600754611aca9030906001600160a01b031684610dd0565b60075460095460405163f305d71960e01b81526001600160a01b039283169263f305d719928592611b0a9230928992600092839216904290600401611cfb565b6060604051808303818588803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061166c9190611ccd565b80358015158114611b6c57600080fd5b919050565b600060208284031215611b8357600080fd5b813561196c81611f4b565b600060208284031215611ba057600080fd5b815161196c81611f4b565b60008060408385031215611bbe57600080fd5b8235611bc981611f4b565b91506020830135611bd981611f4b565b809150509250929050565b600080600060608486031215611bf957600080fd5b8335611c0481611f4b565b92506020840135611c1481611f4b565b929592945050506040919091013590565b60008060408385031215611c3857600080fd5b8235611c4381611f4b565b9150611c5160208401611b5c565b90509250929050565b60008060408385031215611c6d57600080fd5b8235611c7881611f4b565b946020939093013593505050565b600060208284031215611c9857600080fd5b61196c82611b5c565b600080600060608486031215611cb657600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611ce257600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b81811015611d6357858101830151858201604001528201611d47565b81811115611d75576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e535784516001600160a01b031683529383019391830191600101611e2e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611e8757611e87611f1f565b500190565b600082611ea957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611ec857611ec8611f1f565b500290565b600082821015611edf57611edf611f1f565b500390565b600181811c90821680611ef857607f821691505b60208210811415611f1957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611f6057600080fd5b5056fea26469706673582212202fbd529c9a2993e83fbeb8e53ef08288caaa91761ad75227b594b8da624da2b864736f6c63430008060033

Deployed Bytecode Sourcemap

21091:8975:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1868:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2940:242;;;;;;;;;;-1:-1:-1;2940:242:0;;;;;:::i;:::-;;:::i;:::-;;;4292:14:1;;4285:22;4267:41;;4255:2;4240:18;2940:242:0;4222:92:1;21560:31:0;;;;;;;;;;-1:-1:-1;21560:31:0;;;;;;;;;;;21801:64;;;;;;;;;;;;;;;;;;;10695:25:1;;;10683:2;10668:18;21801:64:0;10650:76:1;2189:108:0;;;;;;;;;;-1:-1:-1;2277:12:0;;2189:108;;23970:186;;;;;;;;;;-1:-1:-1;23970:186:0;;;;;:::i;:::-;;:::i;:::-;;3190:295;;;;;;;;;;-1:-1:-1;3190:295:0;;;;;:::i;:::-;;:::i;29748:168::-;;;;;;;;;;-1:-1:-1;29748:168:0;;;;;:::i;:::-;;:::i;2088:93::-;;;;;;;;;;-1:-1:-1;2088:93:0;;2171:2;11858:36:1;;11846:2;11831:18;2088:93:0;11813:87:1;3493:272:0;;;;;;;;;;-1:-1:-1;3493:272:0;;;;;:::i;:::-;;:::i;24369:128::-;;;;;;;;;;-1:-1:-1;24369:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;24461:28:0;24437:4;24461:28;;;:19;:28;;;;;;;;;24369:128;23048:662;;;;;;;;;;;;;:::i;21521:32::-;;;;;;;;;;-1:-1:-1;21521:32:0;;;;;;;;2305:176;;;;;;;;;;-1:-1:-1;2305:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2456:17:0;2424:7;2456:17;;;;;;;;;;;;2305:176;21305:89;;;;;;;;;;-1:-1:-1;21305:89:0;;;;-1:-1:-1;;;;;21305:89:0;;;;;;-1:-1:-1;;;;;3162:32:1;;;3144:51;;3132:2;3117:18;21305:89:0;3099:102:1;17692:148:0;;;;;;;;;;;;;:::i;24263:98::-;;;;;;;;;;-1:-1:-1;24263:98:0;;;;;:::i;:::-;;:::i;21425:17::-;;;;;;;;;;;;;;;;21401;;;;;;;;;;;;;;;;23718:81;;;;;;;;;;;;;:::i;17056:79::-;;;;;;;;;;-1:-1:-1;17121:6:0;;-1:-1:-1;;;;;17121:6:0;17056:79;;1976:104;;;;;;;;;;;;;:::i;3773:507::-;;;;;;;;;;-1:-1:-1;3773:507:0;;;;;:::i;:::-;;:::i;21449:17::-;;;;;;;;;;;;;;;;2489:234;;;;;;;;;;-1:-1:-1;2489:234:0;;;;;:::i;:::-;;:::i;24164:91::-;;;;;;;;;;-1:-1:-1;24164:91:0;;;;;:::i;:::-;;:::i;23807:155::-;;;;;;;;;;-1:-1:-1;23807:155:0;;;;;:::i;:::-;;:::i;21473:34::-;;;;;;;;;;;;;;;;2731:201;;;;;;;;;;-1:-1:-1;2731:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;2897:18:0;;;2865:7;2897:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2731:201;29924:102;;;;;;;;;;;;;:::i;17995:244::-;;;;;;;;;;-1:-1:-1;17995:244:0;;;;;:::i;:::-;;:::i;1868:100::-;1922:13;1955:5;1948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1868:100;:::o;2940:242::-;3059:4;1328:10;3120:32;1328:10;3136:7;3145:6;3120:8;:32::i;:::-;-1:-1:-1;3170:4:0;;2940:242;-1:-1:-1;;;2940:242:0:o;23970:186::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;;;;;;;;;24096:2:::1;:14:::0;;;;24121:2:::1;:8:::0;24140:2:::1;:8:::0;23970:186::o;3190:295::-;3321:4;1328:10;3379:38;3395:4;1328:10;3410:6;3379:15;:38::i;:::-;3428:27;3438:4;3444:2;3448:6;3428:9;:27::i;:::-;-1:-1:-1;3473:4:0;;3190:295;-1:-1:-1;;;;3190:295:0:o;29748:168::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;29870:38:::1;::::0;-1:-1:-1;;;;;29870:20:0;::::1;::::0;:38;::::1;;;::::0;29891:16;;29870:38:::1;::::0;;;29891:16;29870:20;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29748:168:::0;;:::o;3493:272::-;1328:10;3608:4;3694:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3694:27:0;;;;;;;;;;3608:4;;1328:10;3669:66;;1328:10;;3694:27;;:40;;3724:10;;3694:40;:::i;:::-;3669:8;:66::i;23048:662::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;23136:15:::1;;;;;;;;;-1:-1:-1::0;;;;;23136:15:0::1;-1:-1:-1::0;;;;;23136:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23118:55:0::1;;23200:4;23224:15;;;;;;;;;-1:-1:-1::0;;;;;23224:15:0::1;-1:-1:-1::0;;;;;23224:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23118:143;::::0;-1:-1:-1;;;;;;23118:143:0::1;::::0;;;;;;-1:-1:-1;;;;;3436:15:1;;;23118:143:0::1;::::0;::::1;3418:34:1::0;3488:15;;3468:18;;;3461:43;3353:18;;23118:143:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23102:13;:159:::0;;-1:-1:-1;;;;;;23102:159:0::1;-1:-1:-1::0;;;;;23102:159:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;23272:55:0;;;:31:::1;:55;::::0;;;;;;;:62;;-1:-1:-1;;23272:62:0;;::::1;-1:-1:-1::0;23272:62:0;;::::1;::::0;;;23380:13;;;::::1;23345:50:::0;;:26:::1;:50:::0;;;;;;:57;;;;::::1;;::::0;;23447:15:::1;::::0;2277:12;;23415:64:::1;::::0;23432:4:::1;::::0;23447:15:::1;::::0;3669:8;:66::i;23415:64::-:1;23490:15;::::0;-1:-1:-1;;;;;23490:15:0::1;:31;23529:21;23574:4;23594:13;2277:12:::0;;;2189:108;23594:13:::1;23622:1;23638::::0;23654:7:::1;17121:6:::0;;-1:-1:-1;;;;;17121:6:0;;17056:79;23654:7:::1;23676:15;23490:212;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17692:148::-:0;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;17783:6:::1;::::0;17762:40:::1;::::0;17799:1:::1;::::0;-1:-1:-1;;;;;17783:6:0::1;::::0;17762:40:::1;::::0;17799:1;;17762:40:::1;17813:6;:19:::0;;-1:-1:-1;;;;;;17813:19:0::1;::::0;;17692:148::o;24263:98::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;24338:3:::1;:15:::0;;-1:-1:-1;;;;;;24338:15:0::1;-1:-1:-1::0;;;;;24338:15:0;;;::::1;::::0;;;::::1;::::0;;24263:98::o;23718:81::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;23773:11:::1;:18:::0;;-1:-1:-1;;23773:18:0::1;;;::::0;;23718:81::o;1976:104::-;2032:13;2065:7;2058:14;;;;;:::i;3773:507::-;1328:10;3893:4;3981:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3981:27:0;;;;;;;;;;3893:4;;1328:10;4041:35;;;;4019:122;;;;-1:-1:-1;;;4019:122:0;;10345:2:1;4019:122:0;;;10327:21:1;10384:2;10364:18;;;10357:30;10423:34;10403:18;;;10396:62;-1:-1:-1;;;10474:18:1;;;10467:35;10519:19;;4019:122:0;10317:227:1;4019:122:0;4177:60;4186:5;4193:7;4221:15;4202:16;:34;4177:8;:60::i;2489:234::-;2604:4;1328:10;2665:28;1328:10;2682:2;2686:6;2665:9;:28::i;24164:91::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;24227:12:::1;:20:::0;;-1:-1:-1;;24227:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24164:91::o;23807:155::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23915:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;23915:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23807:155::o;29924:102::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;30011:4:::1;2424:7:::0;2456:17;;;;;;;;;;;29975:43:::1;::::0;:17:::1;:43::i;:::-;29924:102::o:0;17995:244::-;17268:6;;-1:-1:-1;;;;;17268:6:0;1328:10;17268:22;17260:67;;;;-1:-1:-1;;;17260:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18084:22:0;::::1;18076:73;;;::::0;-1:-1:-1;;;18076:73:0;;5527:2:1;18076:73:0::1;::::0;::::1;5509:21:1::0;5566:2;5546:18;;;5539:30;5605:34;5585:18;;;5578:62;-1:-1:-1;;;5656:18:1;;;5649:36;5702:19;;18076:73:0::1;5499:228:1::0;18076:73:0::1;18186:6;::::0;18165:38:::1;::::0;-1:-1:-1;;;;;18165:38:0;;::::1;::::0;18186:6:::1;::::0;18165:38:::1;::::0;18186:6:::1;::::0;18165:38:::1;18214:6;:17:::0;;-1:-1:-1;;;;;;18214:17:0::1;-1:-1:-1::0;;;;;18214:17:0;;;::::1;::::0;;;::::1;::::0;;17995:244::o;6021:380::-;-1:-1:-1;;;;;6157:19:0;;6149:68;;;;-1:-1:-1;;;6149:68:0;;9106:2:1;6149:68:0;;;9088:21:1;9145:2;9125:18;;;9118:30;9184:34;9164:18;;;9157:62;-1:-1:-1;;;9235:18:1;;;9228:34;9279:19;;6149:68:0;9078:226:1;6149:68:0;-1:-1:-1;;;;;6236:21:0;;6228:68;;;;-1:-1:-1;;;6228:68:0;;5934:2:1;6228:68:0;;;5916:21:1;5973:2;5953:18;;;5946:30;6012:34;5992:18;;;5985:62;-1:-1:-1;;;6063:18:1;;;6056:32;6105:19;;6228:68:0;5906:224:1;6228:68:0;-1:-1:-1;;;;;6309:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6361:32;;10695:25:1;;;6361:32:0;;10668:18:1;6361:32:0;;;;;;;6021:380;;;:::o;6409:502::-;-1:-1:-1;;;;;2897:18:0;;;6544:24;2897:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;6611:37:0;;6607:297;;6711:6;6691:16;:26;;6665:117;;;;-1:-1:-1;;;6665:117:0;;6337:2:1;6665:117:0;;;6319:21:1;6376:2;6356:18;;;6349:30;6415:31;6395:18;;;6388:59;6464:18;;6665:117:0;6309:179:1;6665:117:0;6826:51;6835:5;6842:7;6870:6;6851:16;:25;6826:8;:51::i;:::-;6533:378;6409:502;;;:::o;24505:3226::-;-1:-1:-1;;;;;24637:18:0;;24629:68;;;;-1:-1:-1;;;24629:68:0;;8700:2:1;24629:68:0;;;8682:21:1;8739:2;8719:18;;;8712:30;8778:34;8758:18;;;8751:62;-1:-1:-1;;;8829:18:1;;;8822:35;8874:19;;24629:68:0;8672:227:1;24629:68:0;-1:-1:-1;;;;;24716:16:0;;24708:64;;;;-1:-1:-1;;;24708:64:0;;;;;;;:::i;:::-;24789:11;24785:93;;24817:28;24833:4;24839:2;24843:1;24817:15;:28::i;24785:93::-;-1:-1:-1;;;;;24912:25:0;;;;;;:19;:25;;;;;;;;24911:26;:54;;;;-1:-1:-1;;;;;;24942:23:0;;;;;;:19;:23;;;;;;;;24941:24;24911:54;24907:223;;;25021:7;;24982:18;;25003:15;:6;25014:3;25003:10;:15::i;:::-;:25;;;;:::i;:::-;25059:11;;24982:46;;-1:-1:-1;25043:40:0;;25053:4;;-1:-1:-1;;;;;25059:11:0;24982:46;25043:9;:40::i;:::-;25098:20;25108:10;25098:20;;:::i;:::-;;;24967:163;24907:223;17121:6;;-1:-1:-1;;;;;25160:15:0;;;17121:6;;25160:15;;;;:45;;-1:-1:-1;17121:6:0;;-1:-1:-1;;;;;25192:13:0;;;17121:6;;25192:13;;25160:45;:78;;;;-1:-1:-1;;;;;;25222:16:0;;;;25160:78;:116;;;;-1:-1:-1;;;;;;25255:21:0;;25269:6;25255:21;;25160:116;:143;;;;-1:-1:-1;25294:9:0;;-1:-1:-1;;;25294:9:0;;;;25293:10;25160:143;25142:1470;;;25335:11;;;;;;;25330:195;;-1:-1:-1;;;;;25395:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25424:23:0;;;;;;:19;:23;;;;;;;;25395:52;25365:160;;;;-1:-1:-1;;;25365:160:0;;7461:2:1;25365:160:0;;;7443:21:1;7500:2;7480:18;;;7473:30;7539:34;7519:18;;;7512:62;-1:-1:-1;;;7590:18:1;;;7583:32;7632:19;;25365:160:0;7433:224:1;25365:160:0;-1:-1:-1;;;;;25585:32:0;;;;;;:26;:32;;;;;;;;:89;;;;-1:-1:-1;;;;;;25639:35:0;;;;;;:31;:35;;;;;;;;25638:36;25585:89;25563:1038;;;25749:2;;25739:6;:12;;25709:151;;;;-1:-1:-1;;;25709:151:0;;9511:2:1;25709:151:0;;;9493:21:1;9550:2;9530:18;;;9523:30;9589:34;9569:18;;;9562:62;9660:34;9640:18;;;9633:62;-1:-1:-1;;;9711:19:1;;;9704:32;9753:19;;25709:151:0;9483:295:1;25709:151:0;25935:2;;-1:-1:-1;;;;;2456:17:0;;2424:7;2456:17;;;;;;;;;;;25909:22;;:6;:22;:::i;:::-;:28;;25879:133;;;;-1:-1:-1;;;25879:133:0;;9985:2:1;25879:133:0;;;9967:21:1;10024:2;10004:18;;;9997:30;10063:33;10043:18;;;10036:61;10114:18;;25879:133:0;9957:181:1;25879:133:0;25563:1038;;;-1:-1:-1;;;;;26093:30:0;;;;;;:26;:30;;;;;;;;:89;;;;-1:-1:-1;;;;;;26145:37:0;;;;;;:31;:37;;;;;;;;26144:38;26093:89;26071:530;;;26257:2;;26247:6;:12;;26217:152;;;;-1:-1:-1;;;26217:152:0;;8225:2:1;26217:152:0;;;8207:21:1;8264:2;8244:18;;;8237:30;8303:34;8283:18;;;8276:62;8374:34;8354:18;;;8347:62;-1:-1:-1;;;8425:19:1;;;8418:33;8468:19;;26217:152:0;8197:296:1;26071:530:0;-1:-1:-1;;;;;26396:35:0;;;;;;:31;:35;;;;;;;;26391:210;;26508:2;;-1:-1:-1;;;;;2456:17:0;;2424:7;2456:17;;;;;;;;;;;26482:22;;:6;:22;:::i;:::-;:28;;26452:133;;;;-1:-1:-1;;;26452:133:0;;9985:2:1;26452:133:0;;;9967:21:1;10024:2;10004:18;;;9997:30;10063:33;10043:18;;;10036:61;10114:18;;26452:133:0;9957:181:1;26452:133:0;26643:9;;-1:-1:-1;;;26643:9:0;;;;26642:10;:60;;;;-1:-1:-1;;;;;;26670:32:0;;;;;;:26;:32;;;;;;;;26669:33;26642:60;:103;;;;-1:-1:-1;;;;;;26720:25:0;;;;;;:19;:25;;;;;;;;26719:26;26642:103;:144;;;;-1:-1:-1;;;;;;26763:23:0;;;;;;:19;:23;;;;;;;;26762:24;26642:144;26624:274;;;26813:9;:16;;-1:-1:-1;;;;26813:16:0;-1:-1:-1;;;26813:16:0;;;26844:10;:8;:10::i;:::-;26869:9;:17;;-1:-1:-1;;;;26869:17:0;;;26624:274;26926:9;;27056:12;;26926:9;-1:-1:-1;;;26926:9:0;;;;;26925:10;;27056:12;;:54;;-1:-1:-1;;;;;;27085:25:0;;;;;;:19;:25;;;;;;;;27056:54;:94;;;-1:-1:-1;;;;;;27127:23:0;;;;;;:19;:23;;;;;;;;27056:94;:198;;;-1:-1:-1;;;;;;27169:32:0;;;;;;:26;:32;;;;;;;;27168:33;:85;;;;-1:-1:-1;;;;;;27223:30:0;;;;;;:26;:30;;;;;;;;27222:31;27168:85;27038:243;;;-1:-1:-1;27276:5:0;27038:243;27294:12;27325:7;27321:357;;;27356:30;27382:3;27356:21;27367:9;;27356:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;27349:37;;27451:9;;27434:13;;27427:4;:20;;;;:::i;:::-;27426:34;;;;:::i;:::-;27403:19;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;27519:9:0;;27504:11;;27497:18;;:4;:18;:::i;:::-;27496:32;;;;:::i;:::-;27475:17;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;27549:8:0;;27545:91;;27578:42;27594:4;27608;27615;27578:15;:42::i;:::-;27652:14;27662:4;27652:14;;:::i;:::-;;;27321:357;27690:33;27706:4;27712:2;27716:6;27690:15;:33::i;:::-;24618:3113;;24505:3226;;;:::o;27739:477::-;27831:16;;;27845:1;27831:16;;;;;;;;27807:21;;27831:16;;;;;;;;;;-1:-1:-1;27831:16:0;27807:40;;27876:4;27858;27863:1;27858:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27858:23:0;;;:7;;;;;;;;;;:23;;;;27902:15;;:22;;;-1:-1:-1;;;27902:22:0;;;;:15;;;;;:20;;:22;;;;;27858:7;;27902:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27892:4;27897:1;27892:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27892:32:0;;;:7;;;;;;;;;:32;27969:15;;27937:62;;27954:4;;27969:15;27987:11;27937:8;:62::i;:::-;28012:15;;:196;;-1:-1:-1;;;28012:196:0;;-1:-1:-1;;;;;28012:15:0;;;;:66;;:196;;28093:11;;28012:15;;28135:4;;28162;;28182:15;;28012:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27796:420;27739:477;:::o;4288:704::-;-1:-1:-1;;;;;4419:18:0;;4411:61;;;;-1:-1:-1;;;4411:61:0;;7102:2:1;4411:61:0;;;7084:21:1;7141:2;7121:18;;;7114:30;7180:32;7160:18;;;7153:60;7230:18;;4411:61:0;7074:180:1;4411:61:0;-1:-1:-1;;;;;4491:16:0;;4483:64;;;;-1:-1:-1;;;4483:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4639:14:0;;4617:19;4639:14;;;;;;;;;;;4686:21;;;;4664:109;;;;-1:-1:-1;;;4664:109:0;;6695:2:1;4664:109:0;;;6677:21:1;6734:2;6714:18;;;6707:30;6773:34;6753:18;;;6746:62;-1:-1:-1;;;6824:18:1;;;6817:36;6870:19;;4664:109:0;6667:228:1;4664:109:0;-1:-1:-1;;;;;4809:14:0;;;:8;:14;;;;;;;;;;;4826:20;;;4809:37;;4868:12;;;;;;;;:22;;4840:6;;4809:8;4868:22;;4840:6;;4868:22;:::i;:::-;;;;;;;;4923:2;-1:-1:-1;;;;;4908:26:0;4917:4;-1:-1:-1;;;;;4908:26:0;;4927:6;4908:26;;;;10695:25:1;;10683:2;10668:18;;10650:76;4908:26:0;;;;;;;;4947:37;29748:168;20097:98;20155:7;20182:5;20186:1;20182;:5;:::i;:::-;20175:12;20097:98;-1:-1:-1;;;20097:98:0:o;28592:1148::-;28676:4;28632:23;2456:17;;;;;;;;;;;28632:50;;28693:25;28743:17;;28721:19;;:39;;;;:::i;:::-;28693:67;-1:-1:-1;28777:20:0;28773:33;;28799:7;;28592:1148::o;28773:33::-;28838:19;;28820:15;:37;28816:93;;;28890:19;;28872:37;;28816:93;28922:23;29036:1;29003:17;28967:19;;28949:15;:37;;;;:::i;:::-;28948:72;;;;:::i;:::-;:89;;;;:::i;:::-;28922:115;-1:-1:-1;29048:26:0;29077:36;:15;28922:115;29077:19;:36::i;:::-;29048:65;-1:-1:-1;29154:21:0;29188:37;29048:65;29188:17;:37::i;:::-;29238:18;29259:44;:21;29285:17;29259:25;:44::i;:::-;29238:65;;29314:21;29338:80;29390:17;29338:33;29353:17;;29338:10;:14;;:33;;;;:::i;:80::-;29314:104;-1:-1:-1;29429:23:0;29455:26;29314:104;29455:10;:26;:::i;:::-;29514:1;29494:17;:21;;;29526:19;:23;;;29570:3;;29562:36;;29429:52;;-1:-1:-1;;;;;;29570:3:0;;29562:36;;;;;29584:13;;29562:36;;29514:1;29562:36;29584:13;29570:3;29562:36;;;;;;;;;;;;;;;;;;;;;29633:1;29615:15;:19;:42;;;;;29656:1;29638:15;:19;29615:42;29611:122;;;29674:47;29688:15;29705;29674:13;:47::i;:::-;28621:1119;;;;;;;;28592:1148::o;19991:98::-;20049:7;20076:5;20080:1;20076;:5;:::i;19885:98::-;19943:7;19970:5;19974:1;19970;:5;:::i;28224:360::-;28339:15;;28307:62;;28324:4;;-1:-1:-1;;;;;28339:15:0;28357:11;28307:8;:62::i;:::-;28382:15;;28532:3;;28382:194;;-1:-1:-1;;;28382:194:0;;-1:-1:-1;;;;;28382:15:0;;;;:31;;28421:9;;28382:194;;28454:4;;28474:11;;28382:15;;;;28532:3;;28550:15;;28382:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:2;;;832:1;829;822:12;784:2;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;774:301;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:2;;;1242:1;1239;1232:12;1194:2;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1184:352;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1184:352::o;1541:315::-;1606:6;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:2;;;1683:1;1680;1673:12;1635:2;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1815:35:1;1846:2;1831:18;;1815:35;:::i;:::-;1805:45;;1625:231;;;;;:::o;1861:315::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1948:228:1:o;2181:180::-;2237:6;2290:2;2278:9;2269:7;2265:23;2261:32;2258:2;;;2306:1;2303;2296:12;2258:2;2329:26;2345:9;2329:26;:::i;2366:316::-;2443:6;2451;2459;2512:2;2500:9;2491:7;2487:23;2483:32;2480:2;;;2528:1;2525;2518:12;2480:2;-1:-1:-1;;2551:23:1;;;2621:2;2606:18;;2593:32;;-1:-1:-1;2672:2:1;2657:18;;;2644:32;;2470:212;-1:-1:-1;2470:212:1:o;2687:306::-;2775:6;2783;2791;2844:2;2832:9;2823:7;2819:23;2815:32;2812:2;;;2860:1;2857;2850:12;2812:2;2889:9;2883:16;2873:26;;2939:2;2928:9;2924:18;2918:25;2908:35;;2983:2;2972:9;2968:18;2962:25;2952:35;;2802:191;;;;;:::o;3515:607::-;-1:-1:-1;;;;;3874:15:1;;;3856:34;;3921:2;3906:18;;3899:34;;;;3964:2;3949:18;;3942:34;;;;4007:2;3992:18;;3985:34;;;;4056:15;;;4050:3;4035:19;;4028:44;3836:3;4088:19;;4081:35;;;;3805:3;3790:19;;3772:350::o;4319:597::-;4431:4;4460:2;4489;4478:9;4471:21;4521:6;4515:13;4564:6;4559:2;4548:9;4544:18;4537:34;4589:1;4599:140;4613:6;4610:1;4607:13;4599:140;;;4708:14;;;4704:23;;4698:30;4674:17;;;4693:2;4670:26;4663:66;4628:10;;4599:140;;;4757:6;4754:1;4751:13;4748:2;;;4827:1;4822:2;4813:6;4802:9;4798:22;4794:31;4787:42;4748:2;-1:-1:-1;4900:2:1;4879:15;-1:-1:-1;;4875:29:1;4860:45;;;;4907:2;4856:54;;4440:476;-1:-1:-1;;;4440:476:1:o;4921:399::-;5123:2;5105:21;;;5162:2;5142:18;;;5135:30;5201:34;5196:2;5181:18;;5174:62;-1:-1:-1;;;5267:2:1;5252:18;;5245:33;5310:3;5295:19;;5095:225::o;7662:356::-;7864:2;7846:21;;;7883:18;;;7876:30;7942:34;7937:2;7922:18;;7915:62;8009:2;7994:18;;7836:182::o;10731:980::-;10993:4;11041:3;11030:9;11026:19;11072:6;11061:9;11054:25;11098:2;11136:6;11131:2;11120:9;11116:18;11109:34;11179:3;11174:2;11163:9;11159:18;11152:31;11203:6;11238;11232:13;11269:6;11261;11254:22;11307:3;11296:9;11292:19;11285:26;;11346:2;11338:6;11334:15;11320:29;;11367:1;11377:195;11391:6;11388:1;11385:13;11377:195;;;11456:13;;-1:-1:-1;;;;;11452:39:1;11440:52;;11547:15;;;;11512:12;;;;11488:1;11406:9;11377:195;;;-1:-1:-1;;;;;;;11628:32:1;;;;11623:2;11608:18;;11601:60;-1:-1:-1;;;11692:3:1;11677:19;11670:35;11589:3;11002:709;-1:-1:-1;;;11002:709:1:o;11905:128::-;11945:3;11976:1;11972:6;11969:1;11966:13;11963:2;;;11982:18;;:::i;:::-;-1:-1:-1;12018:9:1;;11953:80::o;12038:217::-;12078:1;12104;12094:2;;12148:10;12143:3;12139:20;12136:1;12129:31;12183:4;12180:1;12173:15;12211:4;12208:1;12201:15;12094:2;-1:-1:-1;12240:9:1;;12084:171::o;12260:168::-;12300:7;12366:1;12362;12358:6;12354:14;12351:1;12348:21;12343:1;12336:9;12329:17;12325:45;12322:2;;;12373:18;;:::i;:::-;-1:-1:-1;12413:9:1;;12312:116::o;12433:125::-;12473:4;12501:1;12498;12495:8;12492:2;;;12506:18;;:::i;:::-;-1:-1:-1;12543:9:1;;12482:76::o;12563:380::-;12642:1;12638:12;;;;12685;;;12706:2;;12760:4;12752:6;12748:17;12738:27;;12706:2;12813;12805:6;12802:14;12782:18;12779:38;12776:2;;;12859:10;12854:3;12850:20;12847:1;12840:31;12894:4;12891:1;12884:15;12922:4;12919:1;12912:15;12776:2;;12618:325;;;:::o;12948:127::-;13009:10;13004:3;13000:20;12997:1;12990:31;13040:4;13037:1;13030:15;13064:4;13061:1;13054:15;13080:127;13141:10;13136:3;13132:20;13129:1;13122:31;13172:4;13169:1;13162:15;13196:4;13193:1;13186:15;13344:131;-1:-1:-1;;;;;13419:31:1;;13409:42;;13399:2;;13465:1;13462;13455:12;13399:2;13389:86;:::o

Swarm Source

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