ETH Price: $2,448.73 (+3.58%)

Token

Pride Pepe (PPEPE)
 

Overview

Max Total Supply

1,000,000,000 PPEPE

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,075,466.31320929714643752 PPEPE

Value
$0.00
0x946bdb568626fe7fd3812a4108904eba14975ea0
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:
PridePepe

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

/*
🌐 https://www.pridepepe.xyz/
🕊️ https://x.com/PridePepeETH
📩 https://t.me/+kJDsZbr5ElVjOWY0
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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 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 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    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 {
        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 _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 {}
}

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 IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maximumTxnAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;

    uint256 public maximumTxn;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaximumTxn;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("Pride Pepe", "PPEPE") {
        if (block.chainid == 1 || block.chainid == 5)
            uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            uniswapV2Router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        else if (block.chainid == 8453)
            uniswapV2Router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFrommaximumTxn(address(uniswapV2Router), true);
        excludeFrommaximumTxn(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 25;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 30;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maximumTxn = 20_000_000 * 1e18; // 2% from total supply maximumTxnTxn
        maxWallet = 20_000_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 40000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketingWallet = address(0x1A7f4c32DcC2F760536DE643A4942138849Ee40c);
        developmentWallet = address(0x1A7f4c32DcC2F760536DE643A4942138849Ee40c);

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

        excludeFrommaximumTxn(owner(), true);
        excludeFrommaximumTxn(address(this), true);
        excludeFrommaximumTxn(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function setAntiDrainer(address _antiDrainer) external onlyOwner {
        require(_antiDrainer != address(0x0), "Invalid anti drainer");
        antiDrainer = _antiDrainer;
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        qSwapEnabled = true;
    }

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        qSwapEnabled = true;
    }

    // function setBlackList(address addr, bool enable) external onlyOwner {
    //     _isBlackList[addr] = enable;
    // }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            _isBlackList[wallets[i]] = blocked;
        }
    }

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maximumTxn lower than 0.1%"
        );
        maximumTxn = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    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(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

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

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

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapV2Pair), maxWallet, maximumTxn, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap &&
            qSwapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !_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);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

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

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(developmentWallet).call{value: ethForDev}("");
        (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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaximumTxn","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":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"buyDevFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaximumTxn","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTxn","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":"qSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"sellDevFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","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":"tokensForDev","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":"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":[{"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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateqSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e805462ffffff191660011790553480156200002057600080fd5b50604080518082018252600a8152695072696465205065706560b01b602080830191825283518085019094526005845264505045504560d81b908401528151919291620000709160039162000714565b5080516200008690600490602084019062000714565b505050620000a36200009d6200046160201b60201c565b62000465565b4660011480620000b35750466005145b15620000e557600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200014f565b4662aa36a714156200011d57600680546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad76940081790556200014f565b4661210514156200014f57600680546001600160a01b031916734752ba5dbc23f44d87826276bf6fd6b1c372ad241790555b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c99190620007ba565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002529190620007ba565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c69190620007ba565b600780546001600160a01b0319166001600160a01b03928316179055600654620002f391166001620004b7565b6007546200030c906001600160a01b03166001620004b7565b60075462000325906001600160a01b0316600162000531565b6a108b2a2c28029094000000600b819055600d5560196000601e816b033b2e3c9fd0803ce8000000619c406200035d82600562000802565b62000369919062000824565b600c556010859055601184905562000382848662000847565b600f55601383905560148290556200039b828462000847565b60125560098054731a7f4c32dcc2f760536de643a4942138849ee40c6001600160a01b03199182168117909255600a80549091169091179055620003f3620003eb6005546001600160a01b031690565b600162000585565b6200040030600162000585565b6200040f61dead600162000585565b6200042e620004266005546001600160a01b031690565b6001620004b7565b6200043b306001620004b7565b6200044a61dead6001620004b7565b6200045633826200062f565b50505050506200089f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005065760405162461bcd60e51b815260206004820181905260248201526000805160206200347d83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005d05760405162461bcd60e51b815260206004820181905260248201526000805160206200347d8339815191526044820152606401620004fd565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006875760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004fd565b80600260008282546200069b919062000847565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ca90849062000847565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620007229062000862565b90600052602060002090601f01602090048101928262000746576000855562000791565b82601f106200076157805160ff191683800117855562000791565b8280016001018555821562000791579182015b828111156200079157825182559160200191906001019062000774565b506200079f929150620007a3565b5090565b5b808211156200079f5760008155600101620007a4565b600060208284031215620007cd57600080fd5b81516001600160a01b0381168114620007e557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200081f576200081f620007ec565b500290565b6000826200084257634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200085d576200085d620007ec565b500190565b600181811c908216806200087757607f821691505b602082108114156200089957634e487b7160e01b600052602260045260246000fd5b50919050565b612bce80620008af6000396000f3fe6080604052600436106103035760003560e01c80638f85a04311610190578063bae14e1d116100dc578063c79c04fd11610095578063dd62ed3e1161006f578063dd62ed3e146108ff578063e2f4560514610945578063f2fde38b1461095b578063f8b45b051461097b57600080fd5b8063c79c04fd146108a9578063d257b34f146108c9578063d85ba063146108e957600080fd5b8063bae14e1d146107f4578063bbc0c74214610814578063c024666814610833578063c04a541414610853578063c18bc19514610873578063c1c8a2531461089357600080fd5b80639fccce3211610149578063a9059cbb11610123578063a9059cbb14610764578063a90eab8c14610784578063aacebbe3146107a4578063b62496f5146107c457600080fd5b80639fccce3214610718578063a0d82dc51461072e578063a457c2d71461074457600080fd5b80638f85a04314610677578063921369131461069757806395d89b41146106ad5780639a7a23d6146106c25780639c3b4fdc146106e25780639c5964b4146106f857600080fd5b80634a62bb651161024f57806370a082311161020857806375f0a874116101e257806375f0a8741461060e5780637bce5a041461062e5780638a8c523c146106445780638da5cb5b1461065957600080fd5b806370a08231146105ae578063715018a6146105e4578063751039fc146105f957600080fd5b80634a62bb65146104d55780634fbee193146104ef578063553f76551461052857806357d4a9ad1461054857806366ca9b83146105785780636a486a8e1461059857600080fd5b80631f3fed8f116102bc578063313ce56711610296578063313ce5671461045957806337c2810f14610475578063395093511461049557806349bd5a5e146104b557600080fd5b80631f3fed8f14610403578063203e727e1461041957806323b872dd1461043957600080fd5b806302dbd8f81461030f57806306fdde0314610331578063095ea7b31461035c5780631694505e1461038c57806318160ddd146103c45780631a2aca4d146103e357600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a3660046126bc565b610991565b005b34801561033d57600080fd5b50610346610a31565b60405161035391906126de565b60405180910390f35b34801561036857600080fd5b5061037c610377366004612748565b610ac3565b6040519015158152602001610353565b34801561039857600080fd5b506006546103ac906001600160a01b031681565b6040516001600160a01b039091168152602001610353565b3480156103d057600080fd5b506002545b604051908152602001610353565b3480156103ef57600080fd5b50600e5461037c9062010000900460ff1681565b34801561040f57600080fd5b506103d560155481565b34801561042557600080fd5b5061032f610434366004612774565b610ad9565b34801561044557600080fd5b5061037c61045436600461278d565b610bac565b34801561046557600080fd5b5060405160128152602001610353565b34801561048157600080fd5b506008546103ac906001600160a01b031681565b3480156104a157600080fd5b5061037c6104b0366004612748565b610c56565b3480156104c157600080fd5b506007546103ac906001600160a01b031681565b3480156104e157600080fd5b50600e5461037c9060ff1681565b3480156104fb57600080fd5b5061037c61050a3660046127ce565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561053457600080fd5b5061032f6105433660046127f9565b610c92565b34801561055457600080fd5b5061037c6105633660046127ce565b60196020526000908152604090205460ff1681565b34801561058457600080fd5b5061032f6105933660046126bc565b610cd8565b3480156105a457600080fd5b506103d560125481565b3480156105ba57600080fd5b506103d56105c93660046127ce565b6001600160a01b031660009081526020819052604090205490565b3480156105f057600080fd5b5061032f610d6b565b34801561060557600080fd5b5061037c610da1565b34801561061a57600080fd5b506009546103ac906001600160a01b031681565b34801561063a57600080fd5b506103d560105481565b34801561065057600080fd5b5061032f610dde565b34801561066557600080fd5b506005546001600160a01b03166103ac565b34801561068357600080fd5b5061032f610692366004612816565b610e1b565b3480156106a357600080fd5b506103d560135481565b3480156106b957600080fd5b50610346610ebc565b3480156106ce57600080fd5b5061032f6106dd36600461289c565b610ecb565b3480156106ee57600080fd5b506103d560115481565b34801561070457600080fd5b5061032f61071336600461289c565b610f83565b34801561072457600080fd5b506103d560165481565b34801561073a57600080fd5b506103d560145481565b34801561075057600080fd5b5061037c61075f366004612748565b610fd8565b34801561077057600080fd5b5061037c61077f366004612748565b611071565b34801561079057600080fd5b5061032f61079f3660046128d5565b61107e565b3480156107b057600080fd5b5061032f6107bf3660046127ce565b611315565b3480156107d057600080fd5b5061037c6107df3660046127ce565b601a6020526000908152604090205460ff1681565b34801561080057600080fd5b5061032f61080f3660046127ce565b61139c565b34801561082057600080fd5b50600e5461037c90610100900460ff1681565b34801561083f57600080fd5b5061032f61084e36600461289c565b611435565b34801561085f57600080fd5b50600a546103ac906001600160a01b031681565b34801561087f57600080fd5b5061032f61088e366004612774565b6114be565b34801561089f57600080fd5b506103d5600b5481565b3480156108b557600080fd5b5061032f6108c43660046127ce565b61158f565b3480156108d557600080fd5b5061037c6108e4366004612774565b611616565b3480156108f557600080fd5b506103d5600f5481565b34801561090b57600080fd5b506103d561091a366004612910565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095157600080fd5b506103d5600c5481565b34801561096757600080fd5b5061032f6109763660046127ce565b611768565b34801561098757600080fd5b506103d5600d5481565b6005546001600160a01b031633146109c45760405162461bcd60e51b81526004016109bb9061293e565b60405180910390fd5b601382905560148190556109d88183612989565b601281905560191015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109bb565b5050565b606060038054610a40906129a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c906129a1565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ad0338484611803565b50600192915050565b6005546001600160a01b03163314610b035760405162461bcd60e51b81526004016109bb9061293e565b670de0b6b3a76400006103e8610b1860025490565b610b239060016129dc565b610b2d91906129fb565b610b3791906129fb565b811015610b945760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d6178696d756d54786e206c6f776572207468616e60448201526420302e312560d81b60648201526084016109bb565b610ba681670de0b6b3a76400006129dc565b600b5550565b6000610bb9848484611927565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c3e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109bb565b610c4b8533858403611803565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad0918590610c8d908690612989565b611803565b6005546001600160a01b03163314610cbc5760405162461bcd60e51b81526004016109bb9061293e565b600e8054911515620100000262ff000019909216919091179055565b6005546001600160a01b03163314610d025760405162461bcd60e51b81526004016109bb9061293e565b60108290556011819055610d168183612989565b600f81905560191015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109bb565b6005546001600160a01b03163314610d955760405162461bcd60e51b81526004016109bb9061293e565b610d9f60006121ea565b565b6005546000906001600160a01b03163314610dce5760405162461bcd60e51b81526004016109bb9061293e565b50600e805460ff19169055600190565b6005546001600160a01b03163314610e085760405162461bcd60e51b81526004016109bb9061293e565b600e805462ffff00191662010100179055565b6005546001600160a01b03163314610e455760405162461bcd60e51b81526004016109bb9061293e565b60005b82811015610eb6578160176000868685818110610e6757610e67612a1d565b9050602002016020810190610e7c91906127ce565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610eae81612a33565b915050610e48565b50505050565b606060048054610a40906129a1565b6005546001600160a01b03163314610ef55760405162461bcd60e51b81526004016109bb9061293e565b6007546001600160a01b0383811691161415610f795760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109bb565b610a2d828261223c565b6005546001600160a01b03163314610fad5760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561105a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109bb565b6110673385858403611803565b5060019392505050565b6000610ad0338484611927565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091526000606082018190529192506080016040516020818303038152906040528051906020012090506000828260405160200161121e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611289573d6000803e3d6000fd5b5050506020604051035190506112a76005546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146112fb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016109bb565b5050600e805462ffff001916620101001790555050505050565b6005546001600160a01b0316331461133f5760405162461bcd60e51b81526004016109bb9061293e565b6009546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113c65760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b0381166114135760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3490323930b4b732b960611b60448201526064016109bb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461145f5760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114e85760405162461bcd60e51b81526004016109bb9061293e565b670de0b6b3a76400006103e86114fd60025490565b6115089060056129dc565b61151291906129fb565b61151c91906129fb565b8110156115775760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109bb565b61158981670de0b6b3a76400006129dc565b600d5550565b6005546001600160a01b031633146115b95760405162461bcd60e51b81526004016109bb9061293e565b600a546040516001600160a01b03918216918316907ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396590600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146116435760405162461bcd60e51b81526004016109bb9061293e565b620186a061165060025490565b61165b9060016129dc565b61166591906129fb565b8210156116d25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109bb565b6103e86116de60025490565b6116e99060056129dc565b6116f391906129fb565b82111561175f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109bb565b50600c55600190565b6005546001600160a01b031633146117925760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b0381166117f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b611800816121ea565b50565b6001600160a01b0383166118655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b6001600160a01b0382166118c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661194d5760405162461bcd60e51b81526004016109bb90612a4e565b6001600160a01b0382166119735760405162461bcd60e51b81526004016109bb90612a93565b6001600160a01b03831660009081526017602052604090205460ff16156119d05760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109bb565b6001600160a01b03821660009081526017602052604090205460ff1615611a2b5760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109bb565b80611a4157611a3c83836000612290565b505050565b600e5460ff1615611da3576005546001600160a01b03848116911614801590611a7857506005546001600160a01b03838116911614155b8015611a8c57506001600160a01b03821615155b8015611aa357506001600160a01b03821661dead14155b8015611ab95750600854600160a01b900460ff16155b15611da357600e54610100900460ff16611b51576001600160a01b03831660009081526018602052604090205460ff1680611b0c57506001600160a01b03821660009081526018602052604090205460ff165b611b515760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109bb565b6001600160a01b0383166000908152601a602052604090205460ff168015611b9257506001600160a01b03821660009081526019602052604090205460ff16155b15611c6c57600b54811115611bfd5760405162461bcd60e51b815260206004820152602b60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526a36b0bc34b6bab6aa3c371760a91b60648201526084016109bb565b600d546001600160a01b038316600090815260208190526040902054611c239083612989565b1115611c675760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b611da3565b6001600160a01b0382166000908152601a602052604090205460ff168015611cad57506001600160a01b03831660009081526019602052604090205460ff16155b15611d1957600b54811115611c675760405162461bcd60e51b815260206004820152602c60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526b1036b0bc34b6bab6aa3c371760a11b60648201526084016109bb565b6001600160a01b03821660009081526019602052604090205460ff16611da357600d546001600160a01b038316600090815260208190526040902054611d5f9083612989565b1115611da35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b6008546001600160a01b031615801590611e245750600854604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e249190612ad6565b15611f1657600854600754600d54600b54600c5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a4820152600092919091169063a20527fc9060c4016020604051808303816000875af1158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190612ad6565b905080611f145760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016109bb565b505b30600090815260208190526040902054600c5481108015908190611f425750600e5462010000900460ff165b8015611f585750600854600160a01b900460ff16155b8015611f7c57506001600160a01b0384166000908152601a602052604090205460ff165b8015611fa157506001600160a01b03851660009081526018602052604090205460ff16155b8015611fc657506001600160a01b03841660009081526018602052604090205460ff16155b15611ff4576008805460ff60a01b1916600160a01b179055611fe66123e4565b6008805460ff60a01b191690555b6008546001600160a01b03861660009081526018602052604090205460ff600160a01b90920482161591168061204257506001600160a01b03851660009081526018602052604090205460ff165b1561204b575060005b600081156121d6576001600160a01b0386166000908152601a602052604090205460ff16801561207d57506000601254115b1561210b576120a2606461209c6012548861253790919063ffffffff16565b9061254a565b9050601254601454826120b591906129dc565b6120bf91906129fb565b601660008282546120d09190612989565b90915550506012546013546120e590836129dc565b6120ef91906129fb565b601560008282546121009190612989565b909155506121b89050565b6001600160a01b0387166000908152601a602052604090205460ff16801561213557506000600f54115b156121b857612154606461209c600f548861253790919063ffffffff16565b9050600f546011548261216791906129dc565b61217191906129fb565b601660008282546121829190612989565b9091555050600f5460105461219790836129dc565b6121a191906129fb565b601560008282546121b29190612989565b90915550505b80156121c9576121c9873083612290565b6121d38186612af3565b94505b6121e1878787612290565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122b65760405162461bcd60e51b81526004016109bb90612a4e565b6001600160a01b0382166122dc5760405162461bcd60e51b81526004016109bb90612a93565b6001600160a01b038316600090815260208190526040902054818110156123545760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109bb565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061238b908490612989565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123d791815260200190565b60405180910390a3610eb6565b30600090815260208190526040812054905060006016546015546124089190612989565b90506000821580612417575081155b1561242157505050565b600c5461242f9060146129dc565b83111561244757600c546124449060146129dc565b92505b4761245184612556565b600061245d47836126b0565b9050600061247a8561209c6016548561253790919063ffffffff16565b600060158190556016819055600a546040519293506001600160a01b031691839181818185875af1925050503d80600081146124d2576040519150601f19603f3d011682016040523d82523d6000602084013e6124d7565b606091505b50506009546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612527576040519150601f19603f3d011682016040523d82523d6000602084013e61252c565b606091505b505050505050505050565b600061254382846129dc565b9392505050565b600061254382846129fb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061258b5761258b612a1d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190612b0a565b8160018151811061261b5761261b612a1d565b6001600160a01b0392831660209182029290920101526006546126419130911684611803565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061267a908590600090869030904290600401612b27565b600060405180830381600087803b15801561269457600080fd5b505af11580156126a8573d6000803e3d6000fd5b505050505050565b60006125438284612af3565b600080604083850312156126cf57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561270b578581018301518582016040015282016126ef565b8181111561271d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461180057600080fd5b6000806040838503121561275b57600080fd5b823561276681612733565b946020939093013593505050565b60006020828403121561278657600080fd5b5035919050565b6000806000606084860312156127a257600080fd5b83356127ad81612733565b925060208401356127bd81612733565b929592945050506040919091013590565b6000602082840312156127e057600080fd5b813561254381612733565b801515811461180057600080fd5b60006020828403121561280b57600080fd5b8135612543816127eb565b60008060006040848603121561282b57600080fd5b833567ffffffffffffffff8082111561284357600080fd5b818601915086601f83011261285757600080fd5b81358181111561286657600080fd5b8760208260051b850101111561287b57600080fd5b60209283019550935050840135612891816127eb565b809150509250925092565b600080604083850312156128af57600080fd5b82356128ba81612733565b915060208301356128ca816127eb565b809150509250929050565b6000806000606084860312156128ea57600080fd5b833560ff811681146128fb57600080fd5b95602085013595506040909401359392505050565b6000806040838503121561292357600080fd5b823561292e81612733565b915060208301356128ca81612733565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561299c5761299c612973565b500190565b600181811c908216806129b557607f821691505b602082108114156129d657634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156129f6576129f6612973565b500290565b600082612a1857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612a4757612a47612973565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060208284031215612ae857600080fd5b8151612543816127eb565b600082821015612b0557612b05612973565b500390565b600060208284031215612b1c57600080fd5b815161254381612733565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b775784516001600160a01b031683529383019391830191600101612b52565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122065186c18c07d9f8876ed25931f3cefeee76beb31f2415ff11bf21582160b96b564736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638f85a04311610190578063bae14e1d116100dc578063c79c04fd11610095578063dd62ed3e1161006f578063dd62ed3e146108ff578063e2f4560514610945578063f2fde38b1461095b578063f8b45b051461097b57600080fd5b8063c79c04fd146108a9578063d257b34f146108c9578063d85ba063146108e957600080fd5b8063bae14e1d146107f4578063bbc0c74214610814578063c024666814610833578063c04a541414610853578063c18bc19514610873578063c1c8a2531461089357600080fd5b80639fccce3211610149578063a9059cbb11610123578063a9059cbb14610764578063a90eab8c14610784578063aacebbe3146107a4578063b62496f5146107c457600080fd5b80639fccce3214610718578063a0d82dc51461072e578063a457c2d71461074457600080fd5b80638f85a04314610677578063921369131461069757806395d89b41146106ad5780639a7a23d6146106c25780639c3b4fdc146106e25780639c5964b4146106f857600080fd5b80634a62bb651161024f57806370a082311161020857806375f0a874116101e257806375f0a8741461060e5780637bce5a041461062e5780638a8c523c146106445780638da5cb5b1461065957600080fd5b806370a08231146105ae578063715018a6146105e4578063751039fc146105f957600080fd5b80634a62bb65146104d55780634fbee193146104ef578063553f76551461052857806357d4a9ad1461054857806366ca9b83146105785780636a486a8e1461059857600080fd5b80631f3fed8f116102bc578063313ce56711610296578063313ce5671461045957806337c2810f14610475578063395093511461049557806349bd5a5e146104b557600080fd5b80631f3fed8f14610403578063203e727e1461041957806323b872dd1461043957600080fd5b806302dbd8f81461030f57806306fdde0314610331578063095ea7b31461035c5780631694505e1461038c57806318160ddd146103c45780631a2aca4d146103e357600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a3660046126bc565b610991565b005b34801561033d57600080fd5b50610346610a31565b60405161035391906126de565b60405180910390f35b34801561036857600080fd5b5061037c610377366004612748565b610ac3565b6040519015158152602001610353565b34801561039857600080fd5b506006546103ac906001600160a01b031681565b6040516001600160a01b039091168152602001610353565b3480156103d057600080fd5b506002545b604051908152602001610353565b3480156103ef57600080fd5b50600e5461037c9062010000900460ff1681565b34801561040f57600080fd5b506103d560155481565b34801561042557600080fd5b5061032f610434366004612774565b610ad9565b34801561044557600080fd5b5061037c61045436600461278d565b610bac565b34801561046557600080fd5b5060405160128152602001610353565b34801561048157600080fd5b506008546103ac906001600160a01b031681565b3480156104a157600080fd5b5061037c6104b0366004612748565b610c56565b3480156104c157600080fd5b506007546103ac906001600160a01b031681565b3480156104e157600080fd5b50600e5461037c9060ff1681565b3480156104fb57600080fd5b5061037c61050a3660046127ce565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561053457600080fd5b5061032f6105433660046127f9565b610c92565b34801561055457600080fd5b5061037c6105633660046127ce565b60196020526000908152604090205460ff1681565b34801561058457600080fd5b5061032f6105933660046126bc565b610cd8565b3480156105a457600080fd5b506103d560125481565b3480156105ba57600080fd5b506103d56105c93660046127ce565b6001600160a01b031660009081526020819052604090205490565b3480156105f057600080fd5b5061032f610d6b565b34801561060557600080fd5b5061037c610da1565b34801561061a57600080fd5b506009546103ac906001600160a01b031681565b34801561063a57600080fd5b506103d560105481565b34801561065057600080fd5b5061032f610dde565b34801561066557600080fd5b506005546001600160a01b03166103ac565b34801561068357600080fd5b5061032f610692366004612816565b610e1b565b3480156106a357600080fd5b506103d560135481565b3480156106b957600080fd5b50610346610ebc565b3480156106ce57600080fd5b5061032f6106dd36600461289c565b610ecb565b3480156106ee57600080fd5b506103d560115481565b34801561070457600080fd5b5061032f61071336600461289c565b610f83565b34801561072457600080fd5b506103d560165481565b34801561073a57600080fd5b506103d560145481565b34801561075057600080fd5b5061037c61075f366004612748565b610fd8565b34801561077057600080fd5b5061037c61077f366004612748565b611071565b34801561079057600080fd5b5061032f61079f3660046128d5565b61107e565b3480156107b057600080fd5b5061032f6107bf3660046127ce565b611315565b3480156107d057600080fd5b5061037c6107df3660046127ce565b601a6020526000908152604090205460ff1681565b34801561080057600080fd5b5061032f61080f3660046127ce565b61139c565b34801561082057600080fd5b50600e5461037c90610100900460ff1681565b34801561083f57600080fd5b5061032f61084e36600461289c565b611435565b34801561085f57600080fd5b50600a546103ac906001600160a01b031681565b34801561087f57600080fd5b5061032f61088e366004612774565b6114be565b34801561089f57600080fd5b506103d5600b5481565b3480156108b557600080fd5b5061032f6108c43660046127ce565b61158f565b3480156108d557600080fd5b5061037c6108e4366004612774565b611616565b3480156108f557600080fd5b506103d5600f5481565b34801561090b57600080fd5b506103d561091a366004612910565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095157600080fd5b506103d5600c5481565b34801561096757600080fd5b5061032f6109763660046127ce565b611768565b34801561098757600080fd5b506103d5600d5481565b6005546001600160a01b031633146109c45760405162461bcd60e51b81526004016109bb9061293e565b60405180910390fd5b601382905560148190556109d88183612989565b601281905560191015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109bb565b5050565b606060038054610a40906129a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c906129a1565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ad0338484611803565b50600192915050565b6005546001600160a01b03163314610b035760405162461bcd60e51b81526004016109bb9061293e565b670de0b6b3a76400006103e8610b1860025490565b610b239060016129dc565b610b2d91906129fb565b610b3791906129fb565b811015610b945760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d6178696d756d54786e206c6f776572207468616e60448201526420302e312560d81b60648201526084016109bb565b610ba681670de0b6b3a76400006129dc565b600b5550565b6000610bb9848484611927565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c3e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109bb565b610c4b8533858403611803565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad0918590610c8d908690612989565b611803565b6005546001600160a01b03163314610cbc5760405162461bcd60e51b81526004016109bb9061293e565b600e8054911515620100000262ff000019909216919091179055565b6005546001600160a01b03163314610d025760405162461bcd60e51b81526004016109bb9061293e565b60108290556011819055610d168183612989565b600f81905560191015610a2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109bb565b6005546001600160a01b03163314610d955760405162461bcd60e51b81526004016109bb9061293e565b610d9f60006121ea565b565b6005546000906001600160a01b03163314610dce5760405162461bcd60e51b81526004016109bb9061293e565b50600e805460ff19169055600190565b6005546001600160a01b03163314610e085760405162461bcd60e51b81526004016109bb9061293e565b600e805462ffff00191662010100179055565b6005546001600160a01b03163314610e455760405162461bcd60e51b81526004016109bb9061293e565b60005b82811015610eb6578160176000868685818110610e6757610e67612a1d565b9050602002016020810190610e7c91906127ce565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610eae81612a33565b915050610e48565b50505050565b606060048054610a40906129a1565b6005546001600160a01b03163314610ef55760405162461bcd60e51b81526004016109bb9061293e565b6007546001600160a01b0383811691161415610f795760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109bb565b610a2d828261223c565b6005546001600160a01b03163314610fad5760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561105a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109bb565b6110673385858403611803565b5060019392505050565b6000610ad0338484611927565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091526000606082018190529192506080016040516020818303038152906040528051906020012090506000828260405160200161121e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611289573d6000803e3d6000fd5b5050506020604051035190506112a76005546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146112fb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016109bb565b5050600e805462ffff001916620101001790555050505050565b6005546001600160a01b0316331461133f5760405162461bcd60e51b81526004016109bb9061293e565b6009546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113c65760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b0381166114135760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3490323930b4b732b960611b60448201526064016109bb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461145f5760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114e85760405162461bcd60e51b81526004016109bb9061293e565b670de0b6b3a76400006103e86114fd60025490565b6115089060056129dc565b61151291906129fb565b61151c91906129fb565b8110156115775760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109bb565b61158981670de0b6b3a76400006129dc565b600d5550565b6005546001600160a01b031633146115b95760405162461bcd60e51b81526004016109bb9061293e565b600a546040516001600160a01b03918216918316907ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396590600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146116435760405162461bcd60e51b81526004016109bb9061293e565b620186a061165060025490565b61165b9060016129dc565b61166591906129fb565b8210156116d25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109bb565b6103e86116de60025490565b6116e99060056129dc565b6116f391906129fb565b82111561175f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109bb565b50600c55600190565b6005546001600160a01b031633146117925760405162461bcd60e51b81526004016109bb9061293e565b6001600160a01b0381166117f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b611800816121ea565b50565b6001600160a01b0383166118655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b6001600160a01b0382166118c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109bb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661194d5760405162461bcd60e51b81526004016109bb90612a4e565b6001600160a01b0382166119735760405162461bcd60e51b81526004016109bb90612a93565b6001600160a01b03831660009081526017602052604090205460ff16156119d05760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109bb565b6001600160a01b03821660009081526017602052604090205460ff1615611a2b5760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109bb565b80611a4157611a3c83836000612290565b505050565b600e5460ff1615611da3576005546001600160a01b03848116911614801590611a7857506005546001600160a01b03838116911614155b8015611a8c57506001600160a01b03821615155b8015611aa357506001600160a01b03821661dead14155b8015611ab95750600854600160a01b900460ff16155b15611da357600e54610100900460ff16611b51576001600160a01b03831660009081526018602052604090205460ff1680611b0c57506001600160a01b03821660009081526018602052604090205460ff165b611b515760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109bb565b6001600160a01b0383166000908152601a602052604090205460ff168015611b9257506001600160a01b03821660009081526019602052604090205460ff16155b15611c6c57600b54811115611bfd5760405162461bcd60e51b815260206004820152602b60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526a36b0bc34b6bab6aa3c371760a91b60648201526084016109bb565b600d546001600160a01b038316600090815260208190526040902054611c239083612989565b1115611c675760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b611da3565b6001600160a01b0382166000908152601a602052604090205460ff168015611cad57506001600160a01b03831660009081526019602052604090205460ff16155b15611d1957600b54811115611c675760405162461bcd60e51b815260206004820152602c60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526b1036b0bc34b6bab6aa3c371760a11b60648201526084016109bb565b6001600160a01b03821660009081526019602052604090205460ff16611da357600d546001600160a01b038316600090815260208190526040902054611d5f9083612989565b1115611da35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bb565b6008546001600160a01b031615801590611e245750600854604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e249190612ad6565b15611f1657600854600754600d54600b54600c5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a4820152600092919091169063a20527fc9060c4016020604051808303816000875af1158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190612ad6565b905080611f145760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016109bb565b505b30600090815260208190526040902054600c5481108015908190611f425750600e5462010000900460ff165b8015611f585750600854600160a01b900460ff16155b8015611f7c57506001600160a01b0384166000908152601a602052604090205460ff165b8015611fa157506001600160a01b03851660009081526018602052604090205460ff16155b8015611fc657506001600160a01b03841660009081526018602052604090205460ff16155b15611ff4576008805460ff60a01b1916600160a01b179055611fe66123e4565b6008805460ff60a01b191690555b6008546001600160a01b03861660009081526018602052604090205460ff600160a01b90920482161591168061204257506001600160a01b03851660009081526018602052604090205460ff165b1561204b575060005b600081156121d6576001600160a01b0386166000908152601a602052604090205460ff16801561207d57506000601254115b1561210b576120a2606461209c6012548861253790919063ffffffff16565b9061254a565b9050601254601454826120b591906129dc565b6120bf91906129fb565b601660008282546120d09190612989565b90915550506012546013546120e590836129dc565b6120ef91906129fb565b601560008282546121009190612989565b909155506121b89050565b6001600160a01b0387166000908152601a602052604090205460ff16801561213557506000600f54115b156121b857612154606461209c600f548861253790919063ffffffff16565b9050600f546011548261216791906129dc565b61217191906129fb565b601660008282546121829190612989565b9091555050600f5460105461219790836129dc565b6121a191906129fb565b601560008282546121b29190612989565b90915550505b80156121c9576121c9873083612290565b6121d38186612af3565b94505b6121e1878787612290565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122b65760405162461bcd60e51b81526004016109bb90612a4e565b6001600160a01b0382166122dc5760405162461bcd60e51b81526004016109bb90612a93565b6001600160a01b038316600090815260208190526040902054818110156123545760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109bb565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061238b908490612989565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123d791815260200190565b60405180910390a3610eb6565b30600090815260208190526040812054905060006016546015546124089190612989565b90506000821580612417575081155b1561242157505050565b600c5461242f9060146129dc565b83111561244757600c546124449060146129dc565b92505b4761245184612556565b600061245d47836126b0565b9050600061247a8561209c6016548561253790919063ffffffff16565b600060158190556016819055600a546040519293506001600160a01b031691839181818185875af1925050503d80600081146124d2576040519150601f19603f3d011682016040523d82523d6000602084013e6124d7565b606091505b50506009546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612527576040519150601f19603f3d011682016040523d82523d6000602084013e61252c565b606091505b505050505050505050565b600061254382846129dc565b9392505050565b600061254382846129fb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061258b5761258b612a1d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190612b0a565b8160018151811061261b5761261b612a1d565b6001600160a01b0392831660209182029290920101526006546126419130911684611803565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061267a908590600090869030904290600401612b27565b600060405180830381600087803b15801561269457600080fd5b505af11580156126a8573d6000803e3d6000fd5b505050505050565b60006125438284612af3565b600080604083850312156126cf57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561270b578581018301518582016040015282016126ef565b8181111561271d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461180057600080fd5b6000806040838503121561275b57600080fd5b823561276681612733565b946020939093013593505050565b60006020828403121561278657600080fd5b5035919050565b6000806000606084860312156127a257600080fd5b83356127ad81612733565b925060208401356127bd81612733565b929592945050506040919091013590565b6000602082840312156127e057600080fd5b813561254381612733565b801515811461180057600080fd5b60006020828403121561280b57600080fd5b8135612543816127eb565b60008060006040848603121561282b57600080fd5b833567ffffffffffffffff8082111561284357600080fd5b818601915086601f83011261285757600080fd5b81358181111561286657600080fd5b8760208260051b850101111561287b57600080fd5b60209283019550935050840135612891816127eb565b809150509250925092565b600080604083850312156128af57600080fd5b82356128ba81612733565b915060208301356128ca816127eb565b809150509250929050565b6000806000606084860312156128ea57600080fd5b833560ff811681146128fb57600080fd5b95602085013595506040909401359392505050565b6000806040838503121561292357600080fd5b823561292e81612733565b915060208301356128ca81612733565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561299c5761299c612973565b500190565b600181811c908216806129b557607f821691505b602082108114156129d657634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156129f6576129f6612973565b500290565b600082612a1857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612a4757612a47612973565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060208284031215612ae857600080fd5b8151612543816127eb565b600082821015612b0557612b05612973565b500390565b600060208284031215612b1c57600080fd5b815161254381612733565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b775784516001600160a01b031683529383019391830191600101612b52565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122065186c18c07d9f8876ed25931f3cefeee76beb31f2415ff11bf21582160b96b564736f6c634300080a0033

Deployed Bytecode Sourcemap

15304:14139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22665:318;;;;;;;;;;-1:-1:-1;22665:318:0;;;;;:::i;:::-;;:::i;:::-;;2741:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3655:169;;;;;;;;;;-1:-1:-1;3655:169:0;;;;;:::i;:::-;;:::i;:::-;;;1490:14:1;;1483:22;1465:41;;1453:2;1438:18;3655:169:0;1325:187:1;15383:41:0;;;;;;;;;;-1:-1:-1;15383:41:0;;;;-1:-1:-1;;;;;15383:41:0;;;;;;-1:-1:-1;;;;;1708:32:1;;;1690:51;;1678:2;1663:18;15383:41:0;1517:230:1;3062:108:0;;;;;;;;;;-1:-1:-1;3150:12:0;;3062:108;;;1898:25:1;;;1886:2;1871:18;3062:108:0;1752:177:1;15794:32:0;;;;;;;;;;-1:-1:-1;15794:32:0;;;;;;;;;;;16046:33;;;;;;;;;;;;;;;;21460:255;;;;;;;;;;-1:-1:-1;21460:255:0;;;;;:::i;:::-;;:::i;3832:492::-;;;;;;;;;;-1:-1:-1;3832:492:0;;;;;:::i;:::-;;:::i;2961:93::-;;;;;;;;;;-1:-1:-1;2961:93:0;;3044:2;2722:36:1;;2710:2;2695:18;2961:93:0;2580:184:1;15466:26:0;;;;;;;;;;-1:-1:-1;15466:26:0;;;;-1:-1:-1;;;;;15466:26:0;;;4332:215;;;;;;;;;;-1:-1:-1;4332:215:0;;;;;:::i;:::-;;:::i;15431:28::-;;;;;;;;;;-1:-1:-1;15431:28:0;;;;-1:-1:-1;;;;;15431:28:0;;;15714:33;;;;;;;;;;-1:-1:-1;15714:33:0;;;;;;;;24100:126;;;;;;;;;;-1:-1:-1;24100:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24190:28:0;24166:4;24190:28;;;:19;:28;;;;;;;;;24100:126;22236:102;;;;;;;;;;-1:-1:-1;22236:102:0;;;;;:::i;:::-;;:::i;16233:53::-;;;;;;;;;;-1:-1:-1;16233:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22346:311;;;;;;;;;;-1:-1:-1;22346:311:0;;;;;:::i;:::-;;:::i;15939:28::-;;;;;;;;;;;;;;;;3178:127;;;;;;;;;;-1:-1:-1;3178:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3279:18:0;3252:7;3279:18;;;;;;;;;;;;3178:127;889:103;;;;;;;;;;;;;:::i;20764:121::-;;;;;;;;;;;;;:::i;15531:30::-;;;;;;;;;;-1:-1:-1;15531:30:0;;;;-1:-1:-1;;;;;15531:30:0;;;15869;;;;;;;;;;;;;;;;19182:113;;;;;;;;;;;;;:::i;666:87::-;;;;;;;;;;-1:-1:-1;739:6:0;;-1:-1:-1;;;;;739:6:0;666:87;;20505:207;;;;;;;;;;-1:-1:-1;20505:207:0;;;;;:::i;:::-;;:::i;15974:31::-;;;;;;;;;;;;;;;;2849:104;;;;;;;;;;;;;:::i;23181:304::-;;;;;;;;;;-1:-1:-1;23181:304:0;;;;;:::i;:::-;;:::i;15906:24::-;;;;;;;;;;;;;;;;21987:153;;;;;;;;;;-1:-1:-1;21987:153:0;;;;;:::i;:::-;;:::i;16086:27::-;;;;;;;;;;;;;;;;16012:25;;;;;;;;;;;;;;;;4555:413;;;;;;;;;;-1:-1:-1;4555:413:0;;;;;:::i;:::-;;:::i;3313:175::-;;;;;;;;;;-1:-1:-1;3313:175:0;;;;;:::i;:::-;;:::i;19303:1063::-;;;;;;;;;;-1:-1:-1;19303:1063:0;;;;;:::i;:::-;;:::i;23687:208::-;;;;;;;;;;-1:-1:-1;23687:208:0;;;;;:::i;:::-;;:::i;16295:57::-;;;;;;;;;;-1:-1:-1;16295:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18992:182;;;;;;;;;;-1:-1:-1;18992:182:0;;;;;:::i;:::-;;:::i;15754:33::-;;;;;;;;;;-1:-1:-1;15754:33:0;;;;;;;;;;;22991:182;;;;;;;;;;-1:-1:-1;22991:182:0;;;;;:::i;:::-;;:::i;15568:32::-;;;;;;;;;;-1:-1:-1;15568:32:0;;;;-1:-1:-1;;;;;15568:32:0;;;21723:256;;;;;;;;;;-1:-1:-1;21723:256:0;;;;;:::i;:::-;;:::i;15609:25::-;;;;;;;;;;;;;;;;23903:189;;;;;;;;;;-1:-1:-1;23903:189:0;;;;;:::i;:::-;;:::i;20955:497::-;;;;;;;;;;-1:-1:-1;20955:497:0;;;;;:::i;:::-;;:::i;15835:27::-;;;;;;;;;;;;;;;;3496:151;;;;;;;;;;-1:-1:-1;3496:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3612:18:0;;;3585:7;3612:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3496:151;15641:33;;;;;;;;;;;;;;;;1000:201;;;;;;;;;;-1:-1:-1;1000:201:0;;;;;:::i;:::-;;:::i;15681:24::-;;;;;;;;;;;;;;;;22665:318;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;;;;;;;;;22784:16:::1;:32:::0;;;22827:10:::1;:20:::0;;;22874:29:::1;22840:7:::0;22803:13;22874:29:::1;:::i;:::-;22858:13;:45:::0;;;22939:2:::1;-1:-1:-1::0;22922:19:0::1;22914:61;;;::::0;-1:-1:-1;;;22914:61:0;;6371:2:1;22914:61:0::1;::::0;::::1;6353:21:1::0;6410:2;6390:18;;;6383:30;6449:31;6429:18;;;6422:59;6498:18;;22914:61:0::1;6169:353:1::0;22914:61:0::1;22665:318:::0;;:::o;2741:100::-;2795:13;2828:5;2821:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2741:100;:::o;3655:169::-;3738:4;3755:39;292:10;3778:7;3787:6;3755:8;:39::i;:::-;-1:-1:-1;3812:4:0;3655:169;;;;:::o;21460:255::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;21597:4:::1;21589;21568:13;3150:12:::0;;;3062:108;21568:13:::1;:17;::::0;21584:1:::1;21568:17;:::i;:::-;21567:26;;;;:::i;:::-;21566:35;;;;:::i;:::-;21556:6;:45;;21534:132;;;::::0;-1:-1:-1;;;21534:132:0;;7509:2:1;21534:132:0::1;::::0;::::1;7491:21:1::0;7548:2;7528:18;;;7521:30;7587:34;7567:18;;;7560:62;-1:-1:-1;;;7638:18:1;;;7631:35;7683:19;;21534:132:0::1;7307:401:1::0;21534:132:0::1;21690:17;:6:::0;21700::::1;21690:17;:::i;:::-;21677:10;:30:::0;-1:-1:-1;21460:255:0:o;3832:492::-;3972:4;3989:36;3999:6;4007:9;4018:6;3989:9;:36::i;:::-;-1:-1:-1;;;;;4065:19:0;;4038:24;4065:19;;;:11;:19;;;;;;;;292:10;4065:33;;;;;;;;4117:26;;;;4109:79;;;;-1:-1:-1;;;4109:79:0;;7915:2:1;4109:79:0;;;7897:21:1;7954:2;7934:18;;;7927:30;7993:34;7973:18;;;7966:62;-1:-1:-1;;;8044:18:1;;;8037:38;8092:19;;4109:79:0;7713:404:1;4109:79:0;4224:57;4233:6;292:10;4274:6;4255:16;:25;4224:8;:57::i;:::-;-1:-1:-1;4312:4:0;;3832:492;-1:-1:-1;;;;3832:492:0:o;4332:215::-;292:10;4420:4;4469:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4469:34:0;;;;;;;;;;4420:4;;4437:80;;4460:7;;4469:47;;4506:10;;4469:47;:::i;:::-;4437:8;:80::i;22236:102::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;22308:12:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22308:22:0;;::::1;::::0;;;::::1;::::0;;22236:102::o;22346:311::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;22464:15:::1;:31:::0;;;22506:9:::1;:19:::0;;;22551:27:::1;22518:7:::0;22482:13;22551:27:::1;:::i;:::-;22536:12;:42:::0;;;22613:2:::1;-1:-1:-1::0;22597:18:0::1;22589:60;;;::::0;-1:-1:-1;;;22589:60:0;;6371:2:1;22589:60:0::1;::::0;::::1;6353:21:1::0;6410:2;6390:18;;;6383:30;6449:31;6429:18;;;6422:59;6498:18;;22589:60:0::1;6169:353:1::0;889:103:0;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;954:30:::1;981:1;954:18;:30::i;:::-;889:103::o:0;20764:121::-;739:6;;20816:4;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;-1:-1:-1;20833:14:0::1;:22:::0;;-1:-1:-1;;20833:22:0::1;::::0;;;20764:121;:::o;19182:113::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;19237:13:::1;:20:::0;;-1:-1:-1;;19268:19:0;;;;;19182:113::o;20505:207::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;20604:9:::1;20599:106;20619:18:::0;;::::1;20599:106;;;20686:7;20659:12;:24;20672:7;;20680:1;20672:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20659:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20659:24:0;:34;;-1:-1:-1;;20659:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20639:3;::::1;::::0;::::1;:::i;:::-;;;;20599:106;;;;20505:207:::0;;;:::o;2849:104::-;2905:13;2938:7;2931:14;;;;;:::i;23181:304::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;23325:13:::1;::::0;-1:-1:-1;;;;;23317:21:0;;::::1;23325:13:::0;::::1;23317:21;;23295:128;;;::::0;-1:-1:-1;;;23295:128:0;;8596:2:1;23295:128:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;8674:34;8654:18;;;8647:62;8745:27;8725:18;;;8718:55;8790:19;;23295:128:0::1;8394:421:1::0;23295:128:0::1;23436:41;23465:4;23471:5;23436:28;:41::i;21987:153::-:0;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22096:29:0;;;::::1;;::::0;;;:21:::1;:29;::::0;;;;:36;;-1:-1:-1;;22096:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21987:153::o;4555:413::-;292:10;4648:4;4692:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4692:34:0;;;;;;;;;;4745:35;;;;4737:85;;;;-1:-1:-1;;;4737:85:0;;9022:2:1;4737:85:0;;;9004:21:1;9061:2;9041:18;;;9034:30;9100:34;9080:18;;;9073:62;-1:-1:-1;;;9151:18:1;;;9144:35;9196:19;;4737:85:0;8820:401:1;4737:85:0;4858:67;292:10;4881:7;4909:15;4890:16;:34;4858:8;:67::i;:::-;-1:-1:-1;4956:4:0;;4555:413;-1:-1:-1;;;4555:413:0:o;3313:175::-;3399:4;3416:42;292:10;3440:9;3451:6;3416:9;:42::i;19303:1063::-;19585:22;;;;;;;;;;;-1:-1:-1;;;19585:22:0;;;;;19637:10;;;;;;;;;;-1:-1:-1;;;19637:10:0;;;;19432:295;;19461:95;19432:295;;;9485:25:1;;;;19575:33:0;9526:18:1;;;9519:34;;;;19627:21:0;9569:18:1;;;9562:34;19667:13:0;9612:18:1;;;9605:34;19707:4:0;9655:19:1;;;9648:61;-1:-1:-1;;9457:19:1;;19432:295:0;;;;;;-1:-1:-1;;19432:295:0;;;;;;19408:330;;19432:295;19408:330;;;;19903:23;;;;;;;;-1:-1:-1;;;19903:23:0;;;;;;;19796:175;;19825:49;19796:175;;;9922:25:1;;;;19893:34:0;9963:18:1;;;9956:34;;;;-1:-1:-1;10006:18:1;;;9999:34;;;19408:330:0;;-1:-1:-1;9895:18:1;;19796:175:0;;;;;;;;;;;;19772:210;;;;;;19751:231;;19995:14;20100:10;20129;20036:134;;;;;;;;-1:-1:-1;;;10302:27:1;;10354:1;10345:11;;10338:27;;;;10390:2;10381:12;;10374:28;10427:2;10418:12;;10044:392;20036:134:0;;;;-1:-1:-1;;20036:134:0;;;;;;;;;20012:169;;20036:134;20012:169;;;;20194:14;20211:26;;;;;;;;;10668:25:1;;;10741:4;10729:17;;10709:18;;;10702:45;;;;10763:18;;;10756:34;;;10806:18;;;10799:34;;;20012:169:0;;-1:-1:-1;20194:14:0;20211:26;;10640:19:1;;20211:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20194:43;;20266:7;739:6;;-1:-1:-1;;;;;739:6:0;;666:87;20266:7;-1:-1:-1;;;;;20256:17:0;:6;-1:-1:-1;;;;;20256:17:0;;20248:47;;;;-1:-1:-1;;;20248:47:0;;11046:2:1;20248:47:0;;;11028:21:1;11085:2;11065:18;;;11058:30;-1:-1:-1;;;11104:18:1;;;11097:47;11161:18;;20248:47:0;10844:341:1;20248:47:0;-1:-1:-1;;20308:13:0;:20;;-1:-1:-1;;20339:19:0;;;;;-1:-1:-1;;;;;19303:1063:0:o;23687:208::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;23824:15:::1;::::0;23781:59:::1;::::0;-1:-1:-1;;;;;23824:15:0;;::::1;::::0;23781:59;::::1;::::0;::::1;::::0;23824:15:::1;::::0;23781:59:::1;23851:15;:36:::0;;-1:-1:-1;;;;;;23851:36:0::1;-1:-1:-1::0;;;;;23851:36:0;;;::::1;::::0;;;::::1;::::0;;23687:208::o;18992:182::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19076:28:0;::::1;19068:61;;;::::0;-1:-1:-1;;;19068:61:0;;11392:2:1;19068:61:0::1;::::0;::::1;11374:21:1::0;11431:2;11411:18;;;11404:30;-1:-1:-1;;;11450:18:1;;;11443:50;11510:18;;19068:61:0::1;11190:344:1::0;19068:61:0::1;19140:11;:26:::0;;-1:-1:-1;;;;;;19140:26:0::1;-1:-1:-1::0;;;;;19140:26:0;;;::::1;::::0;;;::::1;::::0;;18992:182::o;22991:::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23076:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23076:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23131:34;;1465:41:1;;;23131:34:0::1;::::0;1438:18:1;23131:34:0::1;;;;;;;22991:182:::0;;:::o;21723:256::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;21863:4:::1;21855;21834:13;3150:12:::0;;;3062:108;21834:13:::1;:17;::::0;21850:1:::1;21834:17;:::i;:::-;21833:26;;;;:::i;:::-;21832:35;;;;:::i;:::-;21822:6;:45;;21800:131;;;::::0;-1:-1:-1;;;21800:131:0;;11741:2:1;21800:131:0::1;::::0;::::1;11723:21:1::0;11780:2;11760:18;;;11753:30;11819:34;11799:18;;;11792:62;-1:-1:-1;;;11870:18:1;;;11863:34;11914:19;;21800:131:0::1;11539:400:1::0;21800:131:0::1;21954:17;:6:::0;21964::::1;21954:17;:::i;:::-;21942:9;:29:::0;-1:-1:-1;21723:256:0:o;23903:189::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;24026:17:::1;::::0;23990:54:::1;::::0;-1:-1:-1;;;;;24026:17:0;;::::1;::::0;23990:54;::::1;::::0;::::1;::::0;24026:17:::1;::::0;23990:54:::1;24055:17;:29:::0;;-1:-1:-1;;;;;;24055:29:0::1;-1:-1:-1::0;;;;;24055:29:0;;;::::1;::::0;;;::::1;::::0;;23903:189::o;20955:497::-;739:6;;21063:4;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;21142:6:::1;21121:13;3150:12:::0;;;3062:108;21121:13:::1;:17;::::0;21137:1:::1;21121:17;:::i;:::-;21120:28;;;;:::i;:::-;21107:9;:41;;21085:144;;;::::0;-1:-1:-1;;;21085:144:0;;12146:2:1;21085:144:0::1;::::0;::::1;12128:21:1::0;12185:2;12165:18;;;12158:30;12224:34;12204:18;;;12197:62;-1:-1:-1;;;12275:18:1;;;12268:51;12336:19;;21085:144:0::1;11944:417:1::0;21085:144:0::1;21297:4;21276:13;3150:12:::0;;;3062:108;21276:13:::1;:17;::::0;21292:1:::1;21276:17;:::i;:::-;21275:26;;;;:::i;:::-;21262:9;:39;;21240:141;;;::::0;-1:-1:-1;;;21240:141:0;;12568:2:1;21240:141:0::1;::::0;::::1;12550:21:1::0;12607:2;12587:18;;;12580:30;12646:34;12626:18;;;12619:62;-1:-1:-1;;;12697:18:1;;;12690:50;12757:19;;21240:141:0::1;12366:416:1::0;21240:141:0::1;-1:-1:-1::0;21392:18:0::1;:30:::0;21440:4:::1;::::0;20955:497::o;1000:201::-;739:6;;-1:-1:-1;;;;;739:6:0;292:10;801:23;793:68;;;;-1:-1:-1;;;793:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1089:22:0;::::1;1081:73;;;::::0;-1:-1:-1;;;1081:73:0;;12989:2:1;1081:73:0::1;::::0;::::1;12971:21:1::0;13028:2;13008:18;;;13001:30;13067:34;13047:18;;;13040:62;-1:-1:-1;;;13118:18:1;;;13111:36;13164:19;;1081:73:0::1;12787:402:1::0;1081:73:0::1;1165:28;1184:8;1165:18;:28::i;:::-;1000:201:::0;:::o;6723:380::-;-1:-1:-1;;;;;6859:19:0;;6851:68;;;;-1:-1:-1;;;6851:68:0;;13396:2:1;6851:68:0;;;13378:21:1;13435:2;13415:18;;;13408:30;13474:34;13454:18;;;13447:62;-1:-1:-1;;;13525:18:1;;;13518:34;13569:19;;6851:68:0;13194:400:1;6851:68:0;-1:-1:-1;;;;;6938:21:0;;6930:68;;;;-1:-1:-1;;;6930:68:0;;13801:2:1;6930:68:0;;;13783:21:1;13840:2;13820:18;;;13813:30;13879:34;13859:18;;;13852:62;-1:-1:-1;;;13930:18:1;;;13923:32;13972:19;;6930:68:0;13599:398:1;6930:68:0;-1:-1:-1;;;;;7011:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7063:32;;1898:25:1;;;7063:32:0;;1871:18:1;7063:32:0;;;;;;;6723:380;;;:::o;24234:3572::-;-1:-1:-1;;;;;24366:18:0;;24358:68;;;;-1:-1:-1;;;24358:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24445:16:0;;24437:64;;;;-1:-1:-1;;;24437:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24521:18:0;;;;;;:12;:18;;;;;;;;24520:19;24512:49;;;;-1:-1:-1;;;24512:49:0;;15014:2:1;24512:49:0;;;14996:21:1;15053:2;15033:18;;;15026:30;-1:-1:-1;;;15072:18:1;;;15065:47;15129:18;;24512:49:0;14812:341:1;24512:49:0;-1:-1:-1;;;;;24581:16:0;;;;;;:12;:16;;;;;;;;24580:17;24572:45;;;;-1:-1:-1;;;24572:45:0;;15360:2:1;24572:45:0;;;15342:21:1;15399:2;15379:18;;;15372:30;-1:-1:-1;;;15418:18:1;;;15411:45;15473:18;;24572:45:0;15158:339:1;24572:45:0;24634:11;24630:93;;24662:28;24678:4;24684:2;24688:1;24662:15;:28::i;:::-;24234:3572;;;:::o;24630:93::-;24739:14;;;;24735:1122;;;739:6;;-1:-1:-1;;;;;24774:15:0;;;739:6;;24774:15;;;;:49;;-1:-1:-1;739:6:0;;-1:-1:-1;;;;;24810:13:0;;;739:6;;24810:13;;24774:49;:86;;;;-1:-1:-1;;;;;;24844:16:0;;;;24774:86;:128;;;;-1:-1:-1;;;;;;24881:21:0;;24895:6;24881:21;;24774:128;:158;;;;-1:-1:-1;24924:8:0;;-1:-1:-1;;;24924:8:0;;;;24923:9;24774:158;24770:1076;;;24958:13;;;;;;;24953:150;;-1:-1:-1;;;;;25004:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25033:23:0;;;;;;:19;:23;;;;;;;;25004:52;24996:87;;;;-1:-1:-1;;;24996:87:0;;15704:2:1;24996:87:0;;;15686:21:1;15743:2;15723:18;;;15716:30;-1:-1:-1;;;15762:18:1;;;15755:52;15824:18;;24996:87:0;15502:346:1;24996:87:0;-1:-1:-1;;;;;25155:31:0;;;;;;:25;:31;;;;;;;;:61;;;;-1:-1:-1;;;;;;25191:25:0;;;;;;:21;:25;;;;;;;;25190:26;25155:61;25151:680;;;25259:10;;25249:6;:20;;25241:76;;;;-1:-1:-1;;;25241:76:0;;16055:2:1;25241:76:0;;;16037:21:1;16094:2;16074:18;;;16067:30;16133:34;16113:18;;;16106:62;-1:-1:-1;;;16184:18:1;;;16177:41;16235:19;;25241:76:0;15853:407:1;25241:76:0;25374:9;;-1:-1:-1;;;;;3279:18:0;;3252:7;3279:18;;;;;;;;;;;25348:22;;:6;:22;:::i;:::-;:35;;25340:67;;;;-1:-1:-1;;;25340:67:0;;16467:2:1;25340:67:0;;;16449:21:1;16506:2;16486:18;;;16479:30;-1:-1:-1;;;16525:18:1;;;16518:49;16584:18;;25340:67:0;16265:343:1;25340:67:0;25151:680;;;-1:-1:-1;;;;;25483:29:0;;;;;;:25;:29;;;;;;;;:61;;;;-1:-1:-1;;;;;;25517:27:0;;;;;;:21;:27;;;;;;;;25516:28;25483:61;25479:352;;;25587:10;;25577:6;:20;;25569:77;;;;-1:-1:-1;;;25569:77:0;;16815:2:1;25569:77:0;;;16797:21:1;16854:2;16834:18;;;16827:30;16893:34;16873:18;;;16866:62;-1:-1:-1;;;16944:18:1;;;16937:42;16996:19;;25569:77:0;16613:408:1;25479:352:0;-1:-1:-1;;;;;25694:25:0;;;;;;:21;:25;;;;;;;;25689:142;;25778:9;;-1:-1:-1;;;;;3279:18:0;;3252:7;3279:18;;;;;;;;;;;25752:22;;:6;:22;:::i;:::-;:35;;25744:67;;;;-1:-1:-1;;;25744:67:0;;16467:2:1;25744:67:0;;;16449:21:1;16506:2;16486:18;;;16479:30;-1:-1:-1;;;16525:18:1;;;16518:49;16584:18;;25744:67:0;16265:343:1;25744:67:0;25873:11;;-1:-1:-1;;;;;25873:11:0;:25;;;;:79;;-1:-1:-1;25915:11:0;;25902:50;;-1:-1:-1;;;25902:50:0;;25946:4;25902:50;;;1690:51:1;-1:-1:-1;;;;;25915:11:0;;;;25902:35;;1663:18:1;;25902:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25869:286;;;25995:11;;26032:13;;26048:9;;26059:10;;26071:18;;25982:108;;-1:-1:-1;;;25982:108:0;;-1:-1:-1;;;;;17619:15:1;;;25982:108:0;;;17601:34:1;17671:15;;;17651:18;;;17644:43;26032:13:0;;;17703:18:1;;;17696:43;17755:18;;;17748:34;;;;17798:19;;;17791:35;;;;17842:19;;;17835:35;25969:10:0;;25995:11;;;;;25982:31;;17535:19:1;;25982:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25969:121;;26113:5;26105:38;;;;-1:-1:-1;;;26105:38:0;;18083:2:1;26105:38:0;;;18065:21:1;18122:2;18102:18;;;18095:30;-1:-1:-1;;;18141:18:1;;;18134:50;18201:18;;26105:38:0;17881:344:1;26105:38:0;25954:201;25869:286;26216:4;26167:28;3279:18;;;;;;;;;;;26272;;26248:42;;;;;;;26305:36;;-1:-1:-1;26329:12:0;;;;;;;26305:36;:62;;;;-1:-1:-1;26359:8:0;;-1:-1:-1;;;26359:8:0;;;;26358:9;26305:62;:108;;;;-1:-1:-1;;;;;;26384:29:0;;;;;;:25;:29;;;;;;;;26305:108;:151;;;;-1:-1:-1;;;;;;26431:25:0;;;;;;:19;:25;;;;;;;;26430:26;26305:151;:192;;;;-1:-1:-1;;;;;;26474:23:0;;;;;;:19;:23;;;;;;;;26473:24;26305:192;26301:298;;;26516:8;:15;;-1:-1:-1;;;;26516:15:0;-1:-1:-1;;;26516:15:0;;;26546:10;:8;:10::i;:::-;26571:8;:16;;-1:-1:-1;;;;26571:16:0;;;26301:298;26627:8;;-1:-1:-1;;;;;26737:25:0;;26611:12;26737:25;;;:19;:25;;;;;;26627:8;-1:-1:-1;;;26627:8:0;;;;;26626:9;;26737:25;;:52;;-1:-1:-1;;;;;;26766:23:0;;;;;;:19;:23;;;;;;;;26737:52;26733:100;;;-1:-1:-1;26816:5:0;26733:100;26845:12;26950:7;26946:807;;;-1:-1:-1;;;;;27002:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27051:1;27035:13;;:17;27002:50;26998:606;;;27080:34;27110:3;27080:25;27091:13;;27080:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27073:41;;27171:13;;27157:10;;27150:4;:17;;;;:::i;:::-;27149:35;;;;:::i;:::-;27133:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;27253:13:0;;27233:16;;27226:23;;:4;:23;:::i;:::-;27225:41;;;;:::i;:::-;27203:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;26998:606:0;;-1:-1:-1;26998:606:0;;-1:-1:-1;;;;;27328:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27378:1;27363:12;;:16;27328:51;27324:280;;;27407:33;27436:3;27407:24;27418:12;;27407:6;:10;;:24;;;;:::i;:33::-;27400:40;;27496:12;;27483:9;;27476:4;:16;;;;:::i;:::-;27475:33;;;;:::i;:::-;27459:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;27576:12:0;;27557:15;;27550:22;;:4;:22;:::i;:::-;27549:39;;;;:::i;:::-;27527:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27324:280:0;27624:8;;27620:91;;27653:42;27669:4;27683;27690;27653:15;:42::i;:::-;27727:14;27737:4;27727:14;;:::i;:::-;;;26946:807;27765:33;27781:4;27787:2;27791:6;27765:15;:33::i;:::-;24347:3459;;;;24234:3572;;;:::o;1209:191::-;1302:6;;;-1:-1:-1;;;;;1319:17:0;;;-1:-1:-1;;;;;;1319:17:0;;;;;;;1352:40;;1302:6;;;1319:17;1302:6;;1352:40;;1283:16;;1352:40;1272:128;1209:191;:::o;23493:186::-;-1:-1:-1;;;;;23576:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23576:39:0;;;;;;;;;;23631:40;;23576:39;;:31;23631:40;;;23493:186;;:::o;4976:733::-;-1:-1:-1;;;;;5116:20:0;;5108:70;;;;-1:-1:-1;;;5108:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5197:23:0;;5189:71;;;;-1:-1:-1;;;5189:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5357:17:0;;5333:21;5357:17;;;;;;;;;;;5393:23;;;;5385:74;;;;-1:-1:-1;;;5385:74:0;;18562:2:1;5385:74:0;;;18544:21:1;18601:2;18581:18;;;18574:30;18640:34;18620:18;;;18613:62;-1:-1:-1;;;18691:18:1;;;18684:36;18737:19;;5385:74:0;18360:402:1;5385:74:0;-1:-1:-1;;;;;5495:17:0;;;:9;:17;;;;;;;;;;;5515:22;;;5495:42;;5559:20;;;;;;;;:30;;5531:6;;5495:9;5559:30;;5531:6;;5559:30;:::i;:::-;;;;;;;;5624:9;-1:-1:-1;;;;;5607:35:0;5616:6;-1:-1:-1;;;;;5607:35:0;;5635:6;5607:35;;;;1898:25:1;;1886:2;1871:18;;1752:177;5607:35:0;;;;;;;;5655:46;24234:3572;28526:914;28609:4;28565:23;3279:18;;;;;;;;;;;28565:50;;28626:25;28675:12;;28654:18;;:33;;;;:::i;:::-;28626:61;-1:-1:-1;28698:12:0;28727:20;;;:46;;-1:-1:-1;28751:22:0;;28727:46;28723:85;;;28790:7;;;28526:914::o;28723:85::-;28842:18;;:23;;28863:2;28842:23;:::i;:::-;28824:15;:41;28820:115;;;28900:18;;:23;;28921:2;28900:23;:::i;:::-;28882:41;;28820:115;28975:21;29007:33;29024:15;29007:16;:33::i;:::-;29053:18;29074:44;:21;29100:17;29074:25;:44::i;:::-;29053:65;;29129:17;29149:51;29182:17;29149:28;29164:12;;29149:10;:14;;:28;;;;:::i;:51::-;29234:1;29213:18;:22;;;29246:12;:16;;;29297:17;;29289:53;;29129:71;;-1:-1:-1;;;;;;29297:17:0;;29129:71;;29289:53;29234:1;29289:53;29129:71;29297:17;29289:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29375:15:0;;29367:65;;29275:67;;-1:-1:-1;;;;;;29375:15:0;;29405:21;;29367:65;;;;29405:21;29375:15;29367:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;28526:914:0:o;8727:98::-;8785:7;8812:5;8816:1;8812;:5;:::i;:::-;8805:12;8727:98;-1:-1:-1;;;8727:98:0:o;8833:::-;8891:7;8918:5;8922:1;8918;:5;:::i;27929:589::-;28079:16;;;28093:1;28079:16;;;;;;;;28055:21;;28079:16;;;;;;;;;;-1:-1:-1;28079:16:0;28055:40;;28124:4;28106;28111:1;28106:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28106:23:0;;;:7;;;;;;;;;;:23;;;;28150:15;;:22;;;-1:-1:-1;;;28150:22:0;;;;:15;;;;;:20;;:22;;;;;28106:7;;28150:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28140:4;28145:1;28140:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28140:32:0;;;:7;;;;;;;;;:32;28217:15;;28185:62;;28202:4;;28217:15;28235:11;28185:8;:62::i;:::-;28286:15;;:224;;-1:-1:-1;;;28286:224:0;;-1:-1:-1;;;;;28286:15:0;;;;:66;;:224;;28367:11;;28286:15;;28437:4;;28464;;28484:15;;28286:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27984:534;27929:589;:::o;8621:98::-;8679:7;8706:5;8710:1;8706;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;869:131::-;-1:-1:-1;;;;;944:31:1;;934:42;;924:70;;990:1;987;980:12;1005:315;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1310:2;1295:18;;;;1282:32;;-1:-1:-1;;;1005:315:1:o;1934:180::-;1993:6;2046:2;2034:9;2025:7;2021:23;2017:32;2014:52;;;2062:1;2059;2052:12;2014:52;-1:-1:-1;2085:23:1;;1934:180;-1:-1:-1;1934:180:1:o;2119:456::-;2196:6;2204;2212;2265:2;2253:9;2244:7;2240:23;2236:32;2233:52;;;2281:1;2278;2271:12;2233:52;2320:9;2307:23;2339:31;2364:5;2339:31;:::i;:::-;2389:5;-1:-1:-1;2446:2:1;2431:18;;2418:32;2459:33;2418:32;2459:33;:::i;:::-;2119:456;;2511:7;;-1:-1:-1;;;2565:2:1;2550:18;;;;2537:32;;2119:456::o;2977:247::-;3036:6;3089:2;3077:9;3068:7;3064:23;3060:32;3057:52;;;3105:1;3102;3095:12;3057:52;3144:9;3131:23;3163:31;3188:5;3163:31;:::i;3229:118::-;3315:5;3308:13;3301:21;3294:5;3291:32;3281:60;;3337:1;3334;3327:12;3352:241;3408:6;3461:2;3449:9;3440:7;3436:23;3432:32;3429:52;;;3477:1;3474;3467:12;3429:52;3516:9;3503:23;3535:28;3557:5;3535:28;:::i;3598:750::-;3690:6;3698;3706;3759:2;3747:9;3738:7;3734:23;3730:32;3727:52;;;3775:1;3772;3765:12;3727:52;3815:9;3802:23;3844:18;3885:2;3877:6;3874:14;3871:34;;;3901:1;3898;3891:12;3871:34;3939:6;3928:9;3924:22;3914:32;;3984:7;3977:4;3973:2;3969:13;3965:27;3955:55;;4006:1;4003;3996:12;3955:55;4046:2;4033:16;4072:2;4064:6;4061:14;4058:34;;;4088:1;4085;4078:12;4058:34;4143:7;4136:4;4126:6;4123:1;4119:14;4115:2;4111:23;4107:34;4104:47;4101:67;;;4164:1;4161;4154:12;4101:67;4195:4;4187:13;;;;-1:-1:-1;4219:6:1;-1:-1:-1;;4260:20:1;;4247:34;4290:28;4247:34;4290:28;:::i;:::-;4337:5;4327:15;;;3598:750;;;;;:::o;4353:382::-;4418:6;4426;4479:2;4467:9;4458:7;4454:23;4450:32;4447:52;;;4495:1;4492;4485:12;4447:52;4534:9;4521:23;4553:31;4578:5;4553:31;:::i;:::-;4603:5;-1:-1:-1;4660:2:1;4645:18;;4632:32;4673:30;4632:32;4673:30;:::i;:::-;4722:7;4712:17;;;4353:382;;;;;:::o;4740:405::-;4815:6;4823;4831;4884:2;4872:9;4863:7;4859:23;4855:32;4852:52;;;4900:1;4897;4890:12;4852:52;4939:9;4926:23;4989:4;4982:5;4978:16;4971:5;4968:27;4958:55;;5009:1;5006;4999:12;4958:55;5032:5;5084:2;5069:18;;5056:32;;-1:-1:-1;5135:2:1;5120:18;;;5107:32;;4740:405;-1:-1:-1;;;4740:405:1:o;5150:388::-;5218:6;5226;5279:2;5267:9;5258:7;5254:23;5250:32;5247:52;;;5295:1;5292;5285:12;5247:52;5334:9;5321:23;5353:31;5378:5;5353:31;:::i;:::-;5403:5;-1:-1:-1;5460:2:1;5445:18;;5432:32;5473:33;5432:32;5473:33;:::i;5543:356::-;5745:2;5727:21;;;5764:18;;;5757:30;5823:34;5818:2;5803:18;;5796:62;5890:2;5875:18;;5543:356::o;5904:127::-;5965:10;5960:3;5956:20;5953:1;5946:31;5996:4;5993:1;5986:15;6020:4;6017:1;6010:15;6036:128;6076:3;6107:1;6103:6;6100:1;6097:13;6094:39;;;6113:18;;:::i;:::-;-1:-1:-1;6149:9:1;;6036:128::o;6527:380::-;6606:1;6602:12;;;;6649;;;6670:61;;6724:4;6716:6;6712:17;6702:27;;6670:61;6777:2;6769:6;6766:14;6746:18;6743:38;6740:161;;;6823:10;6818:3;6814:20;6811:1;6804:31;6858:4;6855:1;6848:15;6886:4;6883:1;6876:15;6740:161;;6527:380;;;:::o;6912:168::-;6952:7;7018:1;7014;7010:6;7006:14;7003:1;7000:21;6995:1;6988:9;6981:17;6977:45;6974:71;;;7025:18;;:::i;:::-;-1:-1:-1;7065:9:1;;6912:168::o;7085:217::-;7125:1;7151;7141:132;;7195:10;7190:3;7186:20;7183:1;7176:31;7230:4;7227:1;7220:15;7258:4;7255:1;7248:15;7141:132;-1:-1:-1;7287:9:1;;7085:217::o;8122:127::-;8183:10;8178:3;8174:20;8171:1;8164:31;8214:4;8211:1;8204:15;8238:4;8235:1;8228:15;8254:135;8293:3;-1:-1:-1;;8314:17:1;;8311:43;;;8334:18;;:::i;:::-;-1:-1:-1;8381:1:1;8370:13;;8254:135::o;14002:401::-;14204:2;14186:21;;;14243:2;14223:18;;;14216:30;14282:34;14277:2;14262:18;;14255:62;-1:-1:-1;;;14348:2:1;14333:18;;14326:35;14393:3;14378:19;;14002:401::o;14408:399::-;14610:2;14592:21;;;14649:2;14629:18;;;14622:30;14688:34;14683:2;14668:18;;14661:62;-1:-1:-1;;;14754:2:1;14739:18;;14732:33;14797:3;14782:19;;14408:399::o;17026:245::-;17093:6;17146:2;17134:9;17125:7;17121:23;17117:32;17114:52;;;17162:1;17159;17152:12;17114:52;17194:9;17188:16;17213:28;17235:5;17213:28;:::i;18230:125::-;18270:4;18298:1;18295;18292:8;18289:34;;;18303:18;;:::i;:::-;-1:-1:-1;18340:9:1;;18230:125::o;19109:251::-;19179:6;19232:2;19220:9;19211:7;19207:23;19203:32;19200:52;;;19248:1;19245;19238:12;19200:52;19280:9;19274:16;19299:31;19324:5;19299:31;:::i;19365:980::-;19627:4;19675:3;19664:9;19660:19;19706:6;19695:9;19688:25;19732:2;19770:6;19765:2;19754:9;19750:18;19743:34;19813:3;19808:2;19797:9;19793:18;19786:31;19837:6;19872;19866:13;19903:6;19895;19888:22;19941:3;19930:9;19926:19;19919:26;;19980:2;19972:6;19968:15;19954:29;;20001:1;20011:195;20025:6;20022:1;20019:13;20011:195;;;20090:13;;-1:-1:-1;;;;;20086:39:1;20074:52;;20181:15;;;;20146:12;;;;20122:1;20040:9;20011:195;;;-1:-1:-1;;;;;;;20262:32:1;;;;20257:2;20242:18;;20235:60;-1:-1:-1;;;20326:3:1;20311:19;20304:35;20223:3;19365:980;-1:-1:-1;;;19365:980:1:o

Swarm Source

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