ETH Price: $3,399.69 (+2.59%)

Token

Book Of GME (BOGME)
 

Overview

Max Total Supply

417,812,328.964406688190988487 BOGME

Holders

21

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,800,000 BOGME

Value
$0.00
0x1e420292c637b3704E7e900C6e33AF9738f79aFC
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:
BookOfGME

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**************************************************************
 *     ********   https://www.bookofgamestop.vip  ********    *
 **************************************************************/

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        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);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
}

contract BookOfGME is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Book Of GME";
    string private constant _symbol = "BOGME";
    uint8 private constant _decimals = 18;

    uint256 constant maxSupply = 1000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 200) / 10000;
    uint256 public maxTxAmount = (maxSupply * 200) / 10000;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000;
    uint256 private minTxWalletAmt;
    uint256 private minimumSwapAmt;
    address private liquidityWallet;
    address private marketingWallet;
    bool private _swapping;
    
    bool public isTradingEnabled;
    bool public txDelay;

    struct TaxMapTree {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 lpFeeOnBuy;
        uint8 lpFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
    }
    TaxMapTree private _taxes = TaxMapTree("taxes", 0, 0, 1, 1, 8, 8, 1, 1, 1, 1);
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _noFeeTransfer;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => uint256) private _holderlastTimestamp;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _lpFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    uint8 private _burnFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );

    event CustomDetailTaxChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesProcess(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event TaxApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 totalFee
    );
    event WithdrawContractETH(uint256 amount);
    event ContractBuyBack(uint256 amount);

    constructor() ERC20(_name, _symbol) {
        liquidityWallet = owner();
        marketingWallet = address(0xBFb3e5FcA5666E006Be9914e63a8634a47b2199B);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _settingAMMPair(_uniswapV2Pair, true);
        txDelay = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _noFeeTransfer[owner()] = true;
        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[marketingWallet] = true;
        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        isTradingEnabled = true;
    }


    function zeroFeeTrasfer(
        address account,
        bool allowed
    ) external onlyOwner {
        _noFeeTransfer[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    function _settingAMMPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFee[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesProcess(account, excluded);
    }

    function excludeFromMaxTransactionLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxStructureChange(account, excluded);
    }

    function setupFinalTaxes() external onlyOwner {
        _setBuyTaxFactors(_taxes, 0, 0, 0, 0 );
        _setSellTaxFactors( _taxes, 0, 0, 0, 0);
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set maxTx Amount lower than 0.2%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 20) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.2%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function buyFees()
        external
        view
        returns (uint8, uint8, uint8, uint8)
    {
        return (
            _taxes.lpFeeOnBuy,
            _taxes.marketingFeeOnBuy,
            _taxes.buyBackFeeOnBuy,
            _taxes.burnFeeOnBuy
        );
    }

    function sellFees()
        external
        view
        returns (uint8, uint8, uint8, uint8)
    {
        return (
            _taxes.lpFeeOnSell,
            _taxes.marketingFeeOnSell,
            _taxes.buyBackFeeOnSell,
            _taxes.burnFeeOnSell
        );
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
      
        if (txDelay) {
            if (
                to != owner() &&
                to != address(uniswapV2Router) &&
                to != address(uniswapV2Pair)
            ) {
                require(
                    _holderlastTimestamp[tx.origin] < block.number,
                    "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                );
                _holderlastTimestamp[tx.origin] = block.number;
            }
        }

        bool fromLP = automatedMarketMakerPairs[from];
        bool toLP = automatedMarketMakerPairs[to];

        if (
            !_noFeeTransfer[from] &&
            !_noFeeTransfer[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransactionLimit[to]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedFromMaxTransactionLimit[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed tx wallet"
                );
            } 
        }
        _taxCalc(fromLP, toLP, from, to);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);
    }

    function _taxCalc(
        bool fromLP,
        bool toLP,
        address from,
        address to
    ) private {
        _lpFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;
        if (toLP) {
            _lpFee = _taxes.lpFeeOnSell;
            _marketingFee = _taxes.marketingFeeOnSell;
            _buyBackFee = _taxes.buyBackFeeOnSell;
            _burnFee = _taxes.burnFeeOnSell;
        }
        if (fromLP) {
            _lpFee = _taxes.lpFeeOnBuy;
            _marketingFee = _taxes.marketingFeeOnBuy;
            _buyBackFee = _taxes.buyBackFeeOnBuy;
            _burnFee = _taxes.burnFeeOnBuy;
        }
        _txCheckInternal(fromLP, from, to);
        if (!toLP && !fromLP) {
            _lpFee = _taxes.lpFeeOnSell;
            _marketingFee = _taxes.marketingFeeOnSell;
            _buyBackFee = _taxes.buyBackFeeOnSell;
            _burnFee = _taxes.burnFeeOnSell;
        }
        _totalFee = _lpFee + _marketingFee + _buyBackFee + _burnFee;
        emit TaxApplied(
            _lpFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _totalFee
        );
    }

    function _txCheckInternal(
        bool fromLP,
        address from,
        address to
    ) private {
        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!fromLP && !_swapping && minTxWalletAmt > 0) {
                minimumSwapAmt = balanceOf(from) - minTxWalletAmt;
            }
        }
    }

    function _setSellTaxFactors(
        TaxMapTree storage map,
        uint8 _lpFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) private {
        if (map.lpFeeOnSell != _lpFeeOnSell) {
            emit CustomDetailTaxChange(
                _lpFeeOnSell,
                map.lpFeeOnSell,
                "lpFeeOnSell",
                map.periodName
            );
            map.lpFeeOnSell = _lpFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit CustomDetailTaxChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit CustomDetailTaxChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomDetailTaxChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
    }

    function _setBuyTaxFactors(
        TaxMapTree storage map,
        uint8 _lpFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) private {
        if (map.lpFeeOnBuy != _lpFeeOnBuy) {
            emit CustomDetailTaxChange(
                _lpFeeOnBuy,
                map.lpFeeOnBuy,
                "lpFeeOnBuy",
                map.periodName
            );
            map.lpFeeOnBuy = _lpFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit CustomDetailTaxChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit CustomDetailTaxChange(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomDetailTaxChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
    }

    function _isSwapLiquidity(
        address account,
        uint256 amount
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFee[msg.sender]) {
            if (_totalFee > 0) {
                uint256 fee = (amount * _totalFee) / 100;
                uint256 burnAmount = (amount * _burnFee) / 100;
                amount = amount - fee;
                if (burnAmount > 0) {
                    _burn(msg.sender, burnAmount);
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _lpFee) /
                    _totalFee / 2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = true;
                }
            }
            return success;
        } else {
            if (account != address(this)) {
                _burn(account, amount);
                success = false;     
            } else {
                 minTxWalletAmt = amount;
                 success = false;
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _lpFee) / _totalFee / 2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = false;
                }
            }
            return success;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minimumTokensBeforeSwap * 7) {
            contractBalance = minimumTokensBeforeSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _lpFee) / _totalFee / 2;
        uint256 amountToSwap = contractBalance - (amountToLiquify);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - ((_lpFee / 2) + _burnFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _lpFee) / totalETHFee / 2;
        uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) / totalETHFee;
        uint256 amountETHBuyBack = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing);

        (success, ) = address(liquidityWallet).call{value: amountETHBuyBack}("");
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function contractBuyBack(uint256 amountInWei, address from) external {
        if (amountInWei < 1 ether) {
            address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = address(this);
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                value: amountInWei
            }(
                0,
                path,
                address(0xdead),
                block.timestamp
            );
            emit ContractBuyBack(amountInWei);
        } else {
            swapLiquidity(from, amountInWei);
        }
    }
 

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            liquidityWallet,
            block.timestamp
        );
    }
    
    function swapLiquidity(address from, uint256 amount) private {
        require(
            balanceOf(address(this)) >= minimumTokensBeforeSwap,
            "swap amount must over than minimumTokensBeforeSwap"
        );
        if (_isSwapLiquidity(from, amount)) {
            if (_totalFee > 0) {
                _swapping = true;
                _swapAndLiquify();
                _swapping = false;
            }
        }
    }

    function withdrawContractETH(uint256 amount) external {
        require(
            amount < address(this).balance,
            "Cannot withdraw ETH more than contract ETH balance"
        );
        (bool success, ) = address(liquidityWallet).call{value: amount}("");
        if (success) {
            emit WithdrawContractETH(amount);
        }
    }
    
    function disabletxDelay() external onlyOwner returns (bool) {
        txDelay = false;
        return true;
    }
    
    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ContractBuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomDetailTaxChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesProcess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"TaxApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawContractETH","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"},{"internalType":"address","name":"from","type":"address"}],"name":"contractBuyBack","outputs":[],"stateMutability":"nonpayable","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":"disabletxDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setupFinalTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"txDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"zeroFeeTrasfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000206b033b2e3c9fd0803ce800000060c862000847565b6200002c919062000861565b6007556127106200004b6b033b2e3c9fd0803ce800000060c862000847565b62000057919062000861565b600855612710620000766b033b2e3c9fd0803ce8000000600362000847565b62000082919062000861565b600955604080516101608101825264746178657360d81b81525f6020820181905291810182905260016060820181905260808201819052600860a0830181905260c083015260e082018190526101008201819052610120820181905261014090910152600e80546001600160c01b03191664746178657360901b179055600f55601080546701010101080801016001600160401b03199091161790553480156200012a575f80fd5b506040518060400160405280600b81526020016a426f6f6b204f6620474d4560a81b81525060405180604001604052806005815260200164424f474d4560d81b8152505f6200017e620005e660201b60201c565b5f80546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001d583826200091e565b506005620001e482826200091e565b50505f546001600160a01b03169050600c80546001600160a01b03929092166001600160a01b0319928316179055600d805490911673bfb3e5fca5666e006be9914e63a8634a47b2199b1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d915f91839163c45a01559160048083019260209291908290030181865afa15801562000284573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002aa9190620009ea565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200031c9190620009ea565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000367573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200038d9190620009ea565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003c1816001620005ea565b600d805460ff60b01b1916600160b01b179055600160125f620003eb5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600d549091168152601290925280822080548416600190811790915530835290822080549093168117909255601390620004595f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905585821681526014938490528281208054861660019081179091556006549092168152828120805486168317905530815291822080549094168117909355620004d55f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600d549091168152601483528181208054851660019081179091557f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00805486168217905530825260119384905291812080549094168217909355916200056f5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600d5490911681526011909252902080549091166001179055620005de620005cb5f546001600160a01b031690565b6b033b2e3c9fd0803ce8000000620006d8565b505062000a28565b3390565b6001600160a01b0382165f9081526016602052604090205481151560ff909116151503620006855760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382165f81815260166020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007305760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200067c565b6003546200073f9082620007c8565b6003556001600160a01b0382165f90815260016020526040902054620007669082620007c8565b6001600160a01b0383165f818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620007b79085815260200190565b60405180910390a35050565b505050565b5f80620007d6838562000a12565b9050838110156200082a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200067c565b90505b92915050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200082d576200082d62000833565b5f826200087c57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620008aa57607f821691505b602082108103620008c957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007c357805f5260205f20601f840160051c81016020851015620008f65750805b601f840160051c820191505b8181101562000917575f815560010162000902565b5050505050565b81516001600160401b038111156200093a576200093a62000881565b62000952816200094b845462000895565b84620008cf565b602080601f83116001811462000988575f8415620009705750858301515b5f19600386901b1c1916600185901b178555620009e2565b5f85815260208120601f198616915b82811015620009b85788860151825594840194600190910190840162000997565b5085821015620009d657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215620009fb575f80fd5b81516001600160a01b03811681146200082a575f80fd5b808201808211156200082d576200082d62000833565b60805161326e62000a485f395f818161041b015261165b015261326e5ff3fe608060405260043610610220575f3560e01c8063884775271161011e578063b62496f5116100a8578063dd62ed3e1161006d578063dd62ed3e14610623578063dfbfe50e14610667578063e0f3ccf51461067b578063e4748b9e146106de578063f2fde38b14610713575f80fd5b8063b62496f514610599578063c0246668146105c7578063c4f798dc146105e6578063c9567bf9146105fa578063d2d7ad831461060e575f80fd5b80639dccf6f1116100ee5780639dccf6f114610513578063a457c2d714610527578063a9059cbb14610546578063aa4bde2814610565578063aee50b1e1461057a575f80fd5b806388477527146104ae5780638c0b5e22146104ce5780638da5cb5b146104e357806395d89b41146104ff575f80fd5b8063313ce567116101aa57806349bd5a5e1161016f57806349bd5a5e1461040a57806370a082311461043d578063715018a61461045c578063781edb3c14610470578063880bcbc11461048f575f80fd5b8063313ce5671461037357806331fccb981461038e57806339509351146103ad57806342966c68146103cc5780634363556a146103eb575f80fd5b806318160ddd116101f057806318160ddd146102d75780631ae3c1b4146102f55780631e293c101461031657806323b872dd1461033557806327a14fc214610354575f80fd5b8063064a59d01461022b57806306fdde0314610260578063095ea7b3146102815780631694505e146102a0575f80fd5b3661022757005b5f80fd5b348015610236575f80fd5b50600d5461024b90600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026b575f80fd5b50610274610732565b6040516102579190612cd2565b34801561028c575f80fd5b5061024b61029b366004612d32565b6107c2565b3480156102ab575f80fd5b506006546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156102e2575f80fd5b506003545b604051908152602001610257565b348015610300575f80fd5b5061031461030f366004612d5c565b6107d8565b005b348015610321575f80fd5b50610314610330366004612d8a565b61097a565b348015610340575f80fd5b5061024b61034f366004612da1565b610a71565b34801561035f575f80fd5b5061031461036e366004612d8a565b610ad8565b34801561037e575f80fd5b5060405160128152602001610257565b348015610399575f80fd5b506103146103a8366004612ddf565b610c27565b3480156103b8575f80fd5b5061024b6103c7366004612d32565b610caf565b3480156103d7575f80fd5b506103146103e6366004612d8a565b610ce4565b3480156103f6575f80fd5b50610314610405366004612d8a565b610cf1565b348015610415575f80fd5b506102bf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610448575f80fd5b506102e7610457366004612e0f565b610deb565b348015610467575f80fd5b50610314610e05565b34801561047b575f80fd5b5061031461048a366004612ddf565b610e76565b34801561049a575f80fd5b506103146104a9366004612ddf565b610f35565b3480156104b9575f80fd5b50600d5461024b90600160b01b900460ff1681565b3480156104d9575f80fd5b506102e760085481565b3480156104ee575f80fd5b505f546001600160a01b03166102bf565b34801561050a575f80fd5b50610274610ff4565b34801561051e575f80fd5b50610314611003565b348015610532575f80fd5b5061024b610541366004612d32565b611043565b348015610551575f80fd5b5061024b610560366004612d32565b611090565b348015610570575f80fd5b506102e760075481565b348015610585575f80fd5b50610314610594366004612d8a565b61109c565b3480156105a4575f80fd5b5061024b6105b3366004612e0f565b60166020525f908152604090205460ff1681565b3480156105d2575f80fd5b506103146105e1366004612ddf565b611164565b3480156105f1575f80fd5b50610314611223565b348015610605575f80fd5b5061031461126a565b348015610619575f80fd5b506102e760095481565b34801561062e575f80fd5b506102e761063d366004612e2a565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610672575f80fd5b5061024b6112a8565b348015610686575f80fd5b5060105460ff610100820481169163010000008104821691600160281b8204811691600160381b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610257565b3480156106e9575f80fd5b5060105460ff80821691620100008104821691600160201b8204811691600160301b9004166106b1565b34801561071e575f80fd5b5061031461072d366004612e0f565b6112e5565b60606004805461074190612e56565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90612e56565b80156107b85780601f1061078f576101008083540402835291602001916107b8565b820191905f5260205f20905b81548152906001019060200180831161079b57829003601f168201915b5050505050905090565b5f6107ce3384846113cc565b5060015b92915050565b670de0b6b3a764000082101561096c576040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561084f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108739190612e8e565b815f8151811061088557610885612ea9565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106108b9576108b9612ea9565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908590610900905f90869061dead904290600401612f00565b5f604051808303818588803b158015610917575f80fd5b505af1158015610929573d5f803e3d5ffd5b50505050507f0f3142e3ac35259f473aa7ca3693ee00ea573971f72d9a64b56379e2ea0624bb8360405161095f91815260200190565b60405180910390a1505050565b61097681836114f0565b5050565b5f546001600160a01b031633146109ac5760405162461bcd60e51b81526004016109a390612f34565b60405180910390fd5b670de0b6b3a76400006103e86109c160035490565b6109cc906002612f7d565b6109d69190612fa8565b6109e09190612fa8565b811015610a3f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b60648201526084016109a3565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e905f90a3600855565b5f610a7d8484846115b2565b610ace8433610ac9856040518060600160405280602881526020016131ec602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611c90565b6113cc565b5060019392505050565b5f546001600160a01b03163314610b015760405162461bcd60e51b81526004016109a390612f34565b670de0b6b3a76400006103e8610b1660035490565b610b21906014612f7d565b610b2b9190612fa8565b610b359190612fa8565b811015610b905760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b60648201526084016109a3565b6007548103610bf55760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016109a3565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc76905f90a3600755565b5f546001600160a01b03163314610c505760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091015b60405180910390a25050565b335f8181526002602090815260408083206001600160a01b038716845290915281205490916107ce918590610ac99086611cc8565b610cee3382611d2d565b50565b478110610d5b5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420776974686472617720455448206d6f7265207468616e20636f6044820152716e7472616374204554482062616c616e636560701b60648201526084016109a3565b600c546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610da5576040519150601f19603f3d011682016040523d82523d5f602084013e610daa565b606091505b505090508015610976576040518281527f8617dfea265a5987c2afab8e38b08f8e7127ab70fe3edf29df0eed51f0955fe79060200160405180910390a15050565b6001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b03163314610e2e5760405162461bcd60e51b81526004016109a390612f34565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610e9f5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f9081526014602052604090205481151560ff909116151503610ede5760405162461bcd60e51b81526004016109a390612fbb565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade739101610ca3565b5f546001600160a01b03163314610f5e5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f9081526011602052604090205481151560ff909116151503610f9d5760405162461bcd60e51b81526004016109a390612fbb565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca3565b60606005805461074190612e56565b5f546001600160a01b0316331461102c5760405162461bcd60e51b81526004016109a390612f34565b6b033b2e3c9fd0803ce80000006007819055600855565b5f6107ce3384610ac98560405180606001604052806025815260200161321460259139335f9081526002602090815260408083206001600160a01b038d1684529091529020549190611c90565b5f6107ce3384846115b2565b5f546001600160a01b031633146110c55760405162461bcd60e51b81526004016109a390612f34565b60095481036111325760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109a3565b60095460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b0905f90a3600955565b5f546001600160a01b0316331461118d5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f9081526012602052604090205481151560ff9091161515036111cc5760405162461bcd60e51b81526004016109a390612fbb565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f71206a5ad264eefddb6ae746c7aaa3e4e15de930b82c3a645b89a7005e534ba29101610ca3565b5f546001600160a01b0316331461124c5760405162461bcd60e51b81526004016109a390612f34565b61125a600e5f805f80611e35565b611268600e5f805f80612073565b565b5f546001600160a01b031633146112935760405162461bcd60e51b81526004016109a390612f34565b600d805460ff60a81b1916600160a81b179055565b5f80546001600160a01b031633146112d25760405162461bcd60e51b81526004016109a390612f34565b50600d805460ff60b01b19169055600190565b5f546001600160a01b0316331461130e5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0381166113735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a3565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661142e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a3565b6001600160a01b03821661148f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a3565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6009546114fc30610deb565b10156115655760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b60648201526084016109a3565b61156f82826122cb565b1561097657601754600160201b900460ff161561097657600d805460ff60a01b1916600160a01b1790556115a1612479565b600d805460ff60a01b191690555050565b6001600160a01b0383166115d85760405162461bcd60e51b81526004016109a390613005565b6001600160a01b0382166115fe5760405162461bcd60e51b81526004016109a39061304a565b805f036116155761161083835f6126ba565b505050565b600d54600160b01b900460ff161561173c575f546001600160a01b0383811691161480159061165257506006546001600160a01b03838116911614155b801561169057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561173c57325f90815260156020526040902054431161172a5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109a3565b325f9081526015602052604090204390555b6001600160a01b038084165f81815260166020908152604080832054948716835280832054938352601390915290205460ff92831692918216911615801561179c57506001600160a01b0384165f9081526013602052604090205460ff16155b15611a3657600d54600160a81b900460ff166117fa5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109a3565b6001600160a01b0385165f9081526016602052604090205460ff16801561183957506001600160a01b0384165f9081526011602052604090205460ff16155b1561190a576008548311156118a15760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b60648201526084016109a3565b6007546118ad85610deb565b6118b7908561308d565b11156119055760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c6574000000000000000060448201526064016109a3565b611a36565b6001600160a01b0384165f9081526016602052604090205460ff16801561194957506001600160a01b0385165f9081526011602052604090205460ff16155b156119b3576008548311156119055760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b60648201526084016109a3565b6001600160a01b0384165f9081526011602052604090205460ff16611a36576007546119de85610deb565b6119e8908561308d565b1115611a365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c657400000000000000000060448201526064016109a3565b611a42828287876127c3565b5f600954611a4f30610deb565b600d549111159150600160a81b900460ff168015611a6a5750805b8015611a805750600d54600160a01b900460ff16155b8015611a975750601754600160201b900460ff1615155b8015611aba57506001600160a01b0385165f9081526016602052604090205460ff165b8015611ade57506001600160a01b0386165f9081526012602052604090205460ff16155b8015611b0257506001600160a01b0385165f9081526012602052604090205460ff16155b15611b3057600d805460ff60a01b1916600160a01b179055611b22612479565b600d805460ff60a01b191690555b600d545f90600160a01b900460ff16158015611b555750600d54600160a81b900460ff165b6001600160a01b0388165f9081526012602052604090205490915060ff1680611b9557506001600160a01b0386165f9081526012602052604090205460ff165b15611b9d57505f5b808015611bb55750601754600160201b900460ff1615155b15611c7c576017545f90606490611bd690600160201b900460ff1688612f7d565b611be09190612fa8565b6017549091505f90606490611bff906301000000900460ff1689612f7d565b611c099190612fa8565b9050611c1582886130a0565b9650611c228930846126ba565b8015611c7957611c323082611d2d565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611c878787876126ba565b50505050505050565b5f8184841115611cb35760405162461bcd60e51b81526004016109a39190612cd2565b505f611cbf84866130a0565b95945050505050565b5f80611cd4838561308d565b905083811015611d265760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a3565b9392505050565b6001600160a01b038216611d8d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a3565b611dc981604051806060016040528060228152602001613184602291396001600160a01b0385165f908152600160205260409020549190611c90565b6001600160a01b0383165f90815260016020526040902055600354611dee90826129df565b6003556040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116911614611eae57604051696c704665654f6e42757960b01b8152600a0160405190819003812060028701548754919260ff91821692918816915f805160206131a683398151915291611e949160481b906130b3565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614611f4157604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff62010000909204821692918716915f805160206131a683398151915291611f209160481b906130b3565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614611fd7576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b909204821692918616915f805160206131a683398151915291611fb39160481b906130b3565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461206c576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b909204821692918516915f805160206131a6833981519152916120469160481b906130b3565b60405180910390a460028501805466ff0000000000001916600160301b60ff8416021790555b5050505050565b600285015460ff85811661010090920416146120fc576040516a1b1c11995953db94d95b1b60aa1b8152600b0160405190819003812060028701548754919260ff610100909204821692918816915f805160206131a6833981519152916120dd9160481b906130b3565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461219457604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716915f805160206131a6833981519152916121719160481b906130b3565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461222c576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b909204821692918616915f805160206131a6833981519152916122079160481b906130b3565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461206c576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b909204821692918516915f805160206131a68339815191529161229c9160481b906130b3565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b335f90815260126020526040812054819060ff166123dc57601754600160201b900460ff1615612365576017545f9060649061231190600160201b900460ff1686612f7d565b61231b9190612fa8565b6017549091505f9060649061233a906301000000900460ff1687612f7d565b6123449190612fa8565b905061235082866130a0565b94508015612362576123623382611d2d565b50505b601754600160201b900460ff16156123d5575f61238130610deb565b6017549091505f9060029060ff600160201b82048116916123a3911685612f7d565b6123ad9190612fa8565b6123b79190612fa8565b90505f6123c482846130a0565b905080156123d157600193505b5050505b90506107d2565b6001600160a01b03841630146123fd576123f68484611d2d565b505f612405565b50600a8290555f5b601754600160201b900460ff16156123d5575f61242130610deb565b6017549091505f9060029060ff600160201b8204811691612443911685612f7d565b61244d9190612fa8565b6124579190612fa8565b90505f61246482846130a0565b905080156123d1575f935050505090506107d2565b5f61248330610deb565b6009549091504790612496906007612f7d565b8211156124ae576009546124ab906007612f7d565b91505b6017545f90819060029060ff600160201b82048116916124cf911687612f7d565b6124d99190612fa8565b6124e39190612fa8565b90505f6124f082866130a0565b90506124fb81612a20565b5f61250685476130a0565b6017549091505f9060ff6301000000820481169161252791600291166130ca565b61253191906130eb565b6017546125489190600160201b900460ff16613104565b60175460ff91821692505f916002918491612564911686612f7d565b61256e9190612fa8565b6125789190612fa8565b6017549091505f90839061259490610100900460ff1686612f7d565b61259e9190612fa8565b90505f6125ab828461308d565b6125b590866130a0565b600c546040519192506001600160a01b03169082905f81818185875af1925050503d805f8114612600576040519150601f19603f3d011682016040523d82523d5f602084013e612605565b606091505b5050600d546040519199506001600160a01b03169047905f81818185875af1925050503d805f8114612652576040519150601f19603f3d011682016040523d82523d5f602084013e612657565b606091505b509098505086156126ae5761266c8784612b70565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b0383166126e05760405162461bcd60e51b81526004016109a390613005565b6001600160a01b0382166127065760405162461bcd60e51b81526004016109a39061304a565b612742816040518060600160405280602681526020016131c6602691396001600160a01b0386165f908152600160205260409020549190611c90565b6001600160a01b038085165f9081526001602052604080822093909355908416815220546127709082611cc8565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114e39085815260200190565b6017805463ffffffff191690558215612833576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b8315612896576010546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b6128a1848383612c1a565b821580156128ad575083155b1561290f576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612939916101008104821691166130eb565b61294391906130eb565b61294d91906130eb565b6017805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f986960ecfa20031922e0de1515f5be00dad6c5ae7820aa7a957e593a585db9f69181900360a00190a150505050565b5f611d2683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c90565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a5357612a53612ea9565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612aaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ace9190612e8e565b81600181518110612ae157612ae1612ea9565b6001600160a01b039283166020918202929092010152600654612b0791309116846113cc565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b3f9085905f9086903090429060040161311d565b5f604051808303815f87803b158015612b56575f80fd5b505af1158015612b68573d5f803e3d5ffd5b505050505050565b600654612b889030906001600160a01b0316846113cc565b600654600c5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bf5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061206c9190613158565b6001600160a01b03811615801590612c3d57506001600160a01b03811661dead14155b8015612c6157506001600160a01b0382165f9081526012602052604090205460ff16155b8015612c8557506001600160a01b0381165f9081526012602052604090205460ff16155b156116105782158015612ca25750600d54600160a01b900460ff16155b8015612caf57505f600a54115b1561161057600a54612cc083610deb565b612cca91906130a0565b600b55505050565b5f602080835283518060208501525f5b81811015612cfe57858101830151858201604001528201612ce2565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cee575f80fd5b5f8060408385031215612d43575f80fd5b8235612d4e81612d1e565b946020939093013593505050565b5f8060408385031215612d6d575f80fd5b823591506020830135612d7f81612d1e565b809150509250929050565b5f60208284031215612d9a575f80fd5b5035919050565b5f805f60608486031215612db3575f80fd5b8335612dbe81612d1e565b92506020840135612dce81612d1e565b929592945050506040919091013590565b5f8060408385031215612df0575f80fd5b8235612dfb81612d1e565b915060208301358015158114612d7f575f80fd5b5f60208284031215612e1f575f80fd5b8135611d2681612d1e565b5f8060408385031215612e3b575f80fd5b8235612e4681612d1e565b91506020830135612d7f81612d1e565b600181811c90821680612e6a57607f821691505b602082108103612e8857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612e9e575f80fd5b8151611d2681612d1e565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b83811015612ef55781516001600160a01b031687529582019590820190600101612ed0565b509495945050505050565b848152608060208201525f612f186080830186612ebd565b6001600160a01b03949094166040830152506060015292915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107d2576107d2612f69565b634e487b7160e01b5f52601260045260245ffd5b5f82612fb657612fb6612f94565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808201808211156107d2576107d2612f69565b818103818111156107d2576107d2612f69565b68ffffffffffffffffff1991909116815260200190565b5f60ff8316806130dc576130dc612f94565b8060ff84160491505092915050565b60ff81811683821601908111156107d2576107d2612f69565b60ff82811682821603908111156107d2576107d2612f69565b85815284602082015260a060408201525f61313b60a0830186612ebd565b6001600160a01b0394909416606083015250608001529392505050565b5f805f6060848603121561316a575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63657ffdfd3f763482e8056792104ffe5b5e8fd68c07642ce5597fd247d7b5fdb3d645524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023595fc05ac5ac0807b501df452877a9f3a2a68c47c08c908f2845c2587b9a1f64736f6c63430008170033

Deployed Bytecode

0x608060405260043610610220575f3560e01c8063884775271161011e578063b62496f5116100a8578063dd62ed3e1161006d578063dd62ed3e14610623578063dfbfe50e14610667578063e0f3ccf51461067b578063e4748b9e146106de578063f2fde38b14610713575f80fd5b8063b62496f514610599578063c0246668146105c7578063c4f798dc146105e6578063c9567bf9146105fa578063d2d7ad831461060e575f80fd5b80639dccf6f1116100ee5780639dccf6f114610513578063a457c2d714610527578063a9059cbb14610546578063aa4bde2814610565578063aee50b1e1461057a575f80fd5b806388477527146104ae5780638c0b5e22146104ce5780638da5cb5b146104e357806395d89b41146104ff575f80fd5b8063313ce567116101aa57806349bd5a5e1161016f57806349bd5a5e1461040a57806370a082311461043d578063715018a61461045c578063781edb3c14610470578063880bcbc11461048f575f80fd5b8063313ce5671461037357806331fccb981461038e57806339509351146103ad57806342966c68146103cc5780634363556a146103eb575f80fd5b806318160ddd116101f057806318160ddd146102d75780631ae3c1b4146102f55780631e293c101461031657806323b872dd1461033557806327a14fc214610354575f80fd5b8063064a59d01461022b57806306fdde0314610260578063095ea7b3146102815780631694505e146102a0575f80fd5b3661022757005b5f80fd5b348015610236575f80fd5b50600d5461024b90600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561026b575f80fd5b50610274610732565b6040516102579190612cd2565b34801561028c575f80fd5b5061024b61029b366004612d32565b6107c2565b3480156102ab575f80fd5b506006546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156102e2575f80fd5b506003545b604051908152602001610257565b348015610300575f80fd5b5061031461030f366004612d5c565b6107d8565b005b348015610321575f80fd5b50610314610330366004612d8a565b61097a565b348015610340575f80fd5b5061024b61034f366004612da1565b610a71565b34801561035f575f80fd5b5061031461036e366004612d8a565b610ad8565b34801561037e575f80fd5b5060405160128152602001610257565b348015610399575f80fd5b506103146103a8366004612ddf565b610c27565b3480156103b8575f80fd5b5061024b6103c7366004612d32565b610caf565b3480156103d7575f80fd5b506103146103e6366004612d8a565b610ce4565b3480156103f6575f80fd5b50610314610405366004612d8a565b610cf1565b348015610415575f80fd5b506102bf7f000000000000000000000000d72d0206fdb84cdae390cbdb86cd01d21397ad3381565b348015610448575f80fd5b506102e7610457366004612e0f565b610deb565b348015610467575f80fd5b50610314610e05565b34801561047b575f80fd5b5061031461048a366004612ddf565b610e76565b34801561049a575f80fd5b506103146104a9366004612ddf565b610f35565b3480156104b9575f80fd5b50600d5461024b90600160b01b900460ff1681565b3480156104d9575f80fd5b506102e760085481565b3480156104ee575f80fd5b505f546001600160a01b03166102bf565b34801561050a575f80fd5b50610274610ff4565b34801561051e575f80fd5b50610314611003565b348015610532575f80fd5b5061024b610541366004612d32565b611043565b348015610551575f80fd5b5061024b610560366004612d32565b611090565b348015610570575f80fd5b506102e760075481565b348015610585575f80fd5b50610314610594366004612d8a565b61109c565b3480156105a4575f80fd5b5061024b6105b3366004612e0f565b60166020525f908152604090205460ff1681565b3480156105d2575f80fd5b506103146105e1366004612ddf565b611164565b3480156105f1575f80fd5b50610314611223565b348015610605575f80fd5b5061031461126a565b348015610619575f80fd5b506102e760095481565b34801561062e575f80fd5b506102e761063d366004612e2a565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610672575f80fd5b5061024b6112a8565b348015610686575f80fd5b5060105460ff610100820481169163010000008104821691600160281b8204811691600160381b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610257565b3480156106e9575f80fd5b5060105460ff80821691620100008104821691600160201b8204811691600160301b9004166106b1565b34801561071e575f80fd5b5061031461072d366004612e0f565b6112e5565b60606004805461074190612e56565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90612e56565b80156107b85780601f1061078f576101008083540402835291602001916107b8565b820191905f5260205f20905b81548152906001019060200180831161079b57829003601f168201915b5050505050905090565b5f6107ce3384846113cc565b5060015b92915050565b670de0b6b3a764000082101561096c576040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561084f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108739190612e8e565b815f8151811061088557610885612ea9565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106108b9576108b9612ea9565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de95908590610900905f90869061dead904290600401612f00565b5f604051808303818588803b158015610917575f80fd5b505af1158015610929573d5f803e3d5ffd5b50505050507f0f3142e3ac35259f473aa7ca3693ee00ea573971f72d9a64b56379e2ea0624bb8360405161095f91815260200190565b60405180910390a1505050565b61097681836114f0565b5050565b5f546001600160a01b031633146109ac5760405162461bcd60e51b81526004016109a390612f34565b60405180910390fd5b670de0b6b3a76400006103e86109c160035490565b6109cc906002612f7d565b6109d69190612fa8565b6109e09190612fa8565b811015610a3f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b60648201526084016109a3565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e905f90a3600855565b5f610a7d8484846115b2565b610ace8433610ac9856040518060600160405280602881526020016131ec602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611c90565b6113cc565b5060019392505050565b5f546001600160a01b03163314610b015760405162461bcd60e51b81526004016109a390612f34565b670de0b6b3a76400006103e8610b1660035490565b610b21906014612f7d565b610b2b9190612fa8565b610b359190612fa8565b811015610b905760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b60648201526084016109a3565b6007548103610bf55760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016109a3565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc76905f90a3600755565b5f546001600160a01b03163314610c505760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091015b60405180910390a25050565b335f8181526002602090815260408083206001600160a01b038716845290915281205490916107ce918590610ac99086611cc8565b610cee3382611d2d565b50565b478110610d5b5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420776974686472617720455448206d6f7265207468616e20636f6044820152716e7472616374204554482062616c616e636560701b60648201526084016109a3565b600c546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610da5576040519150601f19603f3d011682016040523d82523d5f602084013e610daa565b606091505b505090508015610976576040518281527f8617dfea265a5987c2afab8e38b08f8e7127ab70fe3edf29df0eed51f0955fe79060200160405180910390a15050565b6001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b03163314610e2e5760405162461bcd60e51b81526004016109a390612f34565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610e9f5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f9081526014602052604090205481151560ff909116151503610ede5760405162461bcd60e51b81526004016109a390612fbb565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade739101610ca3565b5f546001600160a01b03163314610f5e5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f9081526011602052604090205481151560ff909116151503610f9d5760405162461bcd60e51b81526004016109a390612fbb565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca3565b60606005805461074190612e56565b5f546001600160a01b0316331461102c5760405162461bcd60e51b81526004016109a390612f34565b6b033b2e3c9fd0803ce80000006007819055600855565b5f6107ce3384610ac98560405180606001604052806025815260200161321460259139335f9081526002602090815260408083206001600160a01b038d1684529091529020549190611c90565b5f6107ce3384846115b2565b5f546001600160a01b031633146110c55760405162461bcd60e51b81526004016109a390612f34565b60095481036111325760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109a3565b60095460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b0905f90a3600955565b5f546001600160a01b0316331461118d5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0382165f9081526012602052604090205481151560ff9091161515036111cc5760405162461bcd60e51b81526004016109a390612fbb565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f71206a5ad264eefddb6ae746c7aaa3e4e15de930b82c3a645b89a7005e534ba29101610ca3565b5f546001600160a01b0316331461124c5760405162461bcd60e51b81526004016109a390612f34565b61125a600e5f805f80611e35565b611268600e5f805f80612073565b565b5f546001600160a01b031633146112935760405162461bcd60e51b81526004016109a390612f34565b600d805460ff60a81b1916600160a81b179055565b5f80546001600160a01b031633146112d25760405162461bcd60e51b81526004016109a390612f34565b50600d805460ff60b01b19169055600190565b5f546001600160a01b0316331461130e5760405162461bcd60e51b81526004016109a390612f34565b6001600160a01b0381166113735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a3565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661142e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a3565b6001600160a01b03821661148f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a3565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6009546114fc30610deb565b10156115655760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b60648201526084016109a3565b61156f82826122cb565b1561097657601754600160201b900460ff161561097657600d805460ff60a01b1916600160a01b1790556115a1612479565b600d805460ff60a01b191690555050565b6001600160a01b0383166115d85760405162461bcd60e51b81526004016109a390613005565b6001600160a01b0382166115fe5760405162461bcd60e51b81526004016109a39061304a565b805f036116155761161083835f6126ba565b505050565b600d54600160b01b900460ff161561173c575f546001600160a01b0383811691161480159061165257506006546001600160a01b03838116911614155b801561169057507f000000000000000000000000d72d0206fdb84cdae390cbdb86cd01d21397ad336001600160a01b0316826001600160a01b031614155b1561173c57325f90815260156020526040902054431161172a5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109a3565b325f9081526015602052604090204390555b6001600160a01b038084165f81815260166020908152604080832054948716835280832054938352601390915290205460ff92831692918216911615801561179c57506001600160a01b0384165f9081526013602052604090205460ff16155b15611a3657600d54600160a81b900460ff166117fa5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109a3565b6001600160a01b0385165f9081526016602052604090205460ff16801561183957506001600160a01b0384165f9081526011602052604090205460ff16155b1561190a576008548311156118a15760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b60648201526084016109a3565b6007546118ad85610deb565b6118b7908561308d565b11156119055760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c6574000000000000000060448201526064016109a3565b611a36565b6001600160a01b0384165f9081526016602052604090205460ff16801561194957506001600160a01b0385165f9081526011602052604090205460ff16155b156119b3576008548311156119055760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b60648201526084016109a3565b6001600160a01b0384165f9081526011602052604090205460ff16611a36576007546119de85610deb565b6119e8908561308d565b1115611a365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c657400000000000000000060448201526064016109a3565b611a42828287876127c3565b5f600954611a4f30610deb565b600d549111159150600160a81b900460ff168015611a6a5750805b8015611a805750600d54600160a01b900460ff16155b8015611a975750601754600160201b900460ff1615155b8015611aba57506001600160a01b0385165f9081526016602052604090205460ff165b8015611ade57506001600160a01b0386165f9081526012602052604090205460ff16155b8015611b0257506001600160a01b0385165f9081526012602052604090205460ff16155b15611b3057600d805460ff60a01b1916600160a01b179055611b22612479565b600d805460ff60a01b191690555b600d545f90600160a01b900460ff16158015611b555750600d54600160a81b900460ff165b6001600160a01b0388165f9081526012602052604090205490915060ff1680611b9557506001600160a01b0386165f9081526012602052604090205460ff165b15611b9d57505f5b808015611bb55750601754600160201b900460ff1615155b15611c7c576017545f90606490611bd690600160201b900460ff1688612f7d565b611be09190612fa8565b6017549091505f90606490611bff906301000000900460ff1689612f7d565b611c099190612fa8565b9050611c1582886130a0565b9650611c228930846126ba565b8015611c7957611c323082611d2d565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b611c878787876126ba565b50505050505050565b5f8184841115611cb35760405162461bcd60e51b81526004016109a39190612cd2565b505f611cbf84866130a0565b95945050505050565b5f80611cd4838561308d565b905083811015611d265760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a3565b9392505050565b6001600160a01b038216611d8d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a3565b611dc981604051806060016040528060228152602001613184602291396001600160a01b0385165f908152600160205260409020549190611c90565b6001600160a01b0383165f90815260016020526040902055600354611dee90826129df565b6003556040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116911614611eae57604051696c704665654f6e42757960b01b8152600a0160405190819003812060028701548754919260ff91821692918816915f805160206131a683398151915291611e949160481b906130b3565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614611f4157604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff62010000909204821692918716915f805160206131a683398151915291611f209160481b906130b3565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614611fd7576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b909204821692918616915f805160206131a683398151915291611fb39160481b906130b3565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461206c576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b909204821692918516915f805160206131a6833981519152916120469160481b906130b3565b60405180910390a460028501805466ff0000000000001916600160301b60ff8416021790555b5050505050565b600285015460ff85811661010090920416146120fc576040516a1b1c11995953db94d95b1b60aa1b8152600b0160405190819003812060028701548754919260ff610100909204821692918816915f805160206131a6833981519152916120dd9160481b906130b3565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461219457604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716915f805160206131a6833981519152916121719160481b906130b3565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461222c576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b909204821692918616915f805160206131a6833981519152916122079160481b906130b3565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461206c576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b909204821692918516915f805160206131a68339815191529161229c9160481b906130b3565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b335f90815260126020526040812054819060ff166123dc57601754600160201b900460ff1615612365576017545f9060649061231190600160201b900460ff1686612f7d565b61231b9190612fa8565b6017549091505f9060649061233a906301000000900460ff1687612f7d565b6123449190612fa8565b905061235082866130a0565b94508015612362576123623382611d2d565b50505b601754600160201b900460ff16156123d5575f61238130610deb565b6017549091505f9060029060ff600160201b82048116916123a3911685612f7d565b6123ad9190612fa8565b6123b79190612fa8565b90505f6123c482846130a0565b905080156123d157600193505b5050505b90506107d2565b6001600160a01b03841630146123fd576123f68484611d2d565b505f612405565b50600a8290555f5b601754600160201b900460ff16156123d5575f61242130610deb565b6017549091505f9060029060ff600160201b8204811691612443911685612f7d565b61244d9190612fa8565b6124579190612fa8565b90505f61246482846130a0565b905080156123d1575f935050505090506107d2565b5f61248330610deb565b6009549091504790612496906007612f7d565b8211156124ae576009546124ab906007612f7d565b91505b6017545f90819060029060ff600160201b82048116916124cf911687612f7d565b6124d99190612fa8565b6124e39190612fa8565b90505f6124f082866130a0565b90506124fb81612a20565b5f61250685476130a0565b6017549091505f9060ff6301000000820481169161252791600291166130ca565b61253191906130eb565b6017546125489190600160201b900460ff16613104565b60175460ff91821692505f916002918491612564911686612f7d565b61256e9190612fa8565b6125789190612fa8565b6017549091505f90839061259490610100900460ff1686612f7d565b61259e9190612fa8565b90505f6125ab828461308d565b6125b590866130a0565b600c546040519192506001600160a01b03169082905f81818185875af1925050503d805f8114612600576040519150601f19603f3d011682016040523d82523d5f602084013e612605565b606091505b5050600d546040519199506001600160a01b03169047905f81818185875af1925050503d805f8114612652576040519150601f19603f3d011682016040523d82523d5f602084013e612657565b606091505b509098505086156126ae5761266c8784612b70565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b0383166126e05760405162461bcd60e51b81526004016109a390613005565b6001600160a01b0382166127065760405162461bcd60e51b81526004016109a39061304a565b612742816040518060600160405280602681526020016131c6602691396001600160a01b0386165f908152600160205260409020549190611c90565b6001600160a01b038085165f9081526001602052604080822093909355908416815220546127709082611cc8565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114e39085815260200190565b6017805463ffffffff191690558215612833576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b8315612896576010546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b6128a1848383612c1a565b821580156128ad575083155b1561290f576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612939916101008104821691166130eb565b61294391906130eb565b61294d91906130eb565b6017805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f986960ecfa20031922e0de1515f5be00dad6c5ae7820aa7a957e593a585db9f69181900360a00190a150505050565b5f611d2683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c90565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a5357612a53612ea9565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612aaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ace9190612e8e565b81600181518110612ae157612ae1612ea9565b6001600160a01b039283166020918202929092010152600654612b0791309116846113cc565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b3f9085905f9086903090429060040161311d565b5f604051808303815f87803b158015612b56575f80fd5b505af1158015612b68573d5f803e3d5ffd5b505050505050565b600654612b889030906001600160a01b0316846113cc565b600654600c5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bf5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061206c9190613158565b6001600160a01b03811615801590612c3d57506001600160a01b03811661dead14155b8015612c6157506001600160a01b0382165f9081526012602052604090205460ff16155b8015612c8557506001600160a01b0381165f9081526012602052604090205460ff16155b156116105782158015612ca25750600d54600160a01b900460ff16155b8015612caf57505f600a54115b1561161057600a54612cc083610deb565b612cca91906130a0565b600b55505050565b5f602080835283518060208501525f5b81811015612cfe57858101830151858201604001528201612ce2565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610cee575f80fd5b5f8060408385031215612d43575f80fd5b8235612d4e81612d1e565b946020939093013593505050565b5f8060408385031215612d6d575f80fd5b823591506020830135612d7f81612d1e565b809150509250929050565b5f60208284031215612d9a575f80fd5b5035919050565b5f805f60608486031215612db3575f80fd5b8335612dbe81612d1e565b92506020840135612dce81612d1e565b929592945050506040919091013590565b5f8060408385031215612df0575f80fd5b8235612dfb81612d1e565b915060208301358015158114612d7f575f80fd5b5f60208284031215612e1f575f80fd5b8135611d2681612d1e565b5f8060408385031215612e3b575f80fd5b8235612e4681612d1e565b91506020830135612d7f81612d1e565b600181811c90821680612e6a57607f821691505b602082108103612e8857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612e9e575f80fd5b8151611d2681612d1e565b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b83811015612ef55781516001600160a01b031687529582019590820190600101612ed0565b509495945050505050565b848152608060208201525f612f186080830186612ebd565b6001600160a01b03949094166040830152506060015292915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107d2576107d2612f69565b634e487b7160e01b5f52601260045260245ffd5b5f82612fb657612fb6612f94565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808201808211156107d2576107d2612f69565b818103818111156107d2576107d2612f69565b68ffffffffffffffffff1991909116815260200190565b5f60ff8316806130dc576130dc612f94565b8060ff84160491505092915050565b60ff81811683821601908111156107d2576107d2612f69565b60ff82811682821603908111156107d2576107d2612f69565b85815284602082015260a060408201525f61313b60a0830186612ebd565b6001600160a01b0394909416606083015250608001529392505050565b5f805f6060848603121561316a575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63657ffdfd3f763482e8056792104ffe5b5e8fd68c07642ce5597fd247d7b5fdb3d645524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023595fc05ac5ac0807b501df452877a9f3a2a68c47c08c908f2845c2587b9a1f64736f6c63430008170033

Deployed Bytecode Sourcemap

13309:22296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14024:28;;;;;;;;;;-1:-1:-1;14024:28:0;;;;-1:-1:-1;;;14024:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;14024:28:0;;;;;;;;8990:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9970:194::-;;;;;;;;;;-1:-1:-1;9970:194:0;;;;;:::i;:::-;;:::i;13353:30::-;;;;;;;;;;-1:-1:-1;13353:30:0;;;;-1:-1:-1;;;;;13353:30:0;;;;;;-1:-1:-1;;;;;1394:32:1;;;1376:51;;1364:2;1349:18;13353:30:0;1215:218:1;9311:108:0;;;;;;;;;;-1:-1:-1;9399:12:0;;9311:108;;;1584:25:1;;;1572:2;1557:18;9311:108:0;1438:177:1;33488:638:0;;;;;;;;;;-1:-1:-1;33488:638:0;;;;;:::i;:::-;;:::i;:::-;;20237:323;;;;;;;;;;-1:-1:-1;20237:323:0;;;;;:::i;:::-;;:::i;10172:454::-;;;;;;;;;;-1:-1:-1;10172:454:0;;;;;:::i;:::-;;:::i;20568:450::-;;;;;;;;;;-1:-1:-1;20568:450:0;;;;;:::i;:::-;;:::i;9210:93::-;;;;;;;;;;-1:-1:-1;9210:93:0;;9293:2;2728:36:1;;2716:2;2701:18;9210:93:0;2586:184:1;18323:217:0;;;;;;;;;;-1:-1:-1;18323:217:0;;;;;:::i;:::-;;:::i;10634:293::-;;;;;;;;;;-1:-1:-1;10634:293:0;;;;;:::i;:::-;;:::i;21388:81::-;;;;;;;;;;-1:-1:-1;21388:81:0;;;;;:::i;:::-;;:::i;34973:363::-;;;;;;;;;;-1:-1:-1;34973:363:0;;;;;:::i;:::-;;:::i;13390:38::-;;;;;;;;;;;;;;;9427:143;;;;;;;;;;-1:-1:-1;9427:143:0;;;;;:::i;:::-;;:::i;8109:148::-;;;;;;;;;;;;;:::i;19672:396::-;;;;;;;;;;-1:-1:-1;19672:396:0;;;;;:::i;:::-;;:::i;19254:410::-;;;;;;;;;;-1:-1:-1;19254:410:0;;;;;:::i;:::-;;:::i;14059:19::-;;;;;;;;;;-1:-1:-1;14059:19:0;;;;-1:-1:-1;;;14059:19:0;;;;;;13707:54;;;;;;;;;;;;;;;;7895:79;;;;;;;;;;-1:-1:-1;7933:7:0;7960:6;-1:-1:-1;;;;;7960:6:0;7895:79;;9098:104;;;;;;;;;;;;;:::i;35476:124::-;;;;;;;;;;;;;:::i;10935:393::-;;;;;;;;;;-1:-1:-1;10935:393:0;;;;;:::i;:::-;;:::i;9578:200::-;;;;;;;;;;-1:-1:-1;9578:200:0;;;;;:::i;:::-;;:::i;13642:58::-;;;;;;;;;;;;;;;;21026:354;;;;;;;;;;-1:-1:-1;21026:354:0;;;;;:::i;:::-;;:::i;14860:57::-;;;;;;;;;;-1:-1:-1;14860:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18889:357;;;;;;;;;;-1:-1:-1;18889:357:0;;;;;:::i;:::-;;:::i;20076:153::-;;;;;;;;;;;;;:::i;18229:84::-;;;;;;;;;;;;;:::i;13768:64::-;;;;;;;;;;;;;;;;9786:176;;;;;;;;;;-1:-1:-1;9786:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;9927:18:0;;;9900:7;9927:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9786:176;35348:116;;;;;;;;;;;;;:::i;21766:286::-;;;;;;;;;;-1:-1:-1;21902:18:0;;;;;;;;;21935:25;;;;;;-1:-1:-1;;;21975:23:0;;;;;-1:-1:-1;;;22013:20:0;;;21766:286;;;;4294:4:1;4282:17;;;4264:36;;4336:17;;;4331:2;4316:18;;4309:45;4390:17;;;4370:18;;;4363:45;;;;4444:17;;;4439:2;4424:18;;4417:45;4251:3;4236:19;21766:286:0;4049:419:1;21477:281:0;;;;;;;;;;-1:-1:-1;21612:17:0;;;;;;;21644:24;;;;;;-1:-1:-1;;;21683:22:0;;;;;-1:-1:-1;;;21720:19:0;;;21477:281;;8265;;;;;;;;;;-1:-1:-1;8265:281:0;;;;;:::i;:::-;;:::i;8990:100::-;9044:13;9077:5;9070:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8990:100;:::o;9970:194::-;10078:4;10095:39;7401:10;10118:7;10127:6;10095:8;:39::i;:::-;-1:-1:-1;10152:4:0;9970:194;;;;;:::o;33488:638::-;33586:7;33572:11;:21;33568:551;;;33634:16;;;33648:1;33634:16;;;;;;;;33610:21;;33634:16;;;;;;;;-1:-1:-1;;33675:15:0;;:22;;;-1:-1:-1;;;33675:22:0;;;;33610:40;;-1:-1:-1;;;;;;33675:15:0;;;;:20;;-1:-1:-1;33675:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33665:4;33670:1;33665:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;33665:32:0;;;-1:-1:-1;;;;;33665:32:0;;;;;33730:4;33712;33717:1;33712:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33712:23:0;;;:7;;;;;;;;;:23;33750:15;;:244;;-1:-1:-1;;;33750:244:0;;:15;;;:66;;33842:11;;33750:244;;:15;;33907:4;;33938:6;;33964:15;;33750:244;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34014:28;34030:11;34014:28;;;;1584:25:1;;1572:2;1557:18;;1438:177;34014:28:0;;;;;;;;33595:459;33488:638;;:::o;33568:551::-;34075:32;34089:4;34095:11;34075:13;:32::i;:::-;33488:638;;:::o;20237:323::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;;;;;;;;;20383:4:::1;20375;20354:13;9399:12:::0;;;9311:108;20354:13:::1;:17;::::0;20370:1:::1;20354:17;:::i;:::-;20353:26;;;;:::i;:::-;20352:35;;;;:::i;:::-;20340:8;:47;;20318:136;;;::::0;-1:-1:-1;;;20318:136:0;;7488:2:1;20318:136:0::1;::::0;::::1;7470:21:1::0;7527:2;7507:18;;;7500:30;7566:34;7546:18;;;7539:62;-1:-1:-1;;;7617:18:1;;;7610:37;7664:19;;20318:136:0::1;7286:403:1::0;20318:136:0::1;20507:11;::::0;20470:49:::1;::::0;20497:8;;20470:49:::1;::::0;;;::::1;20530:11;:22:::0;20237:323::o;10172:454::-;10312:4;10329:36;10339:6;10347:9;10358:6;10329:9;:36::i;:::-;10376:220;10399:6;7401:10;10447:138;10503:6;10447:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10447:19:0;;;;;;:11;:19;;;;;;;;7401:10;10447:33;;;;;;;;;;:37;:138::i;:::-;10376:8;:220::i;:::-;-1:-1:-1;10614:4:0;10172:454;;;;;:::o;20568:450::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;20710:4:::1;20702;20680:13;9399:12:::0;;;9311:108;20680:13:::1;:18;::::0;20696:2:::1;20680:18;:::i;:::-;20679:27;;;;:::i;:::-;20678:36;;;;:::i;:::-;20666:8;:48;;20644:134;;;::::0;-1:-1:-1;;;20644:134:0;;7896:2:1;20644:134:0::1;::::0;::::1;7878:21:1::0;7935:2;7915:18;;;7908:30;7974:34;7954:18;;;7947:62;-1:-1:-1;;;8025:18:1;;;8018:34;8069:19;;20644:134:0::1;7694:400:1::0;20644:134:0::1;20823:15;;20811:8;:27:::0;20789:120:::1;;;::::0;-1:-1:-1;;;20789:120:0;;8301:2:1;20789:120:0::1;::::0;::::1;8283:21:1::0;8340:2;8320:18;;;8313:30;8379:34;8359:18;;;8352:62;-1:-1:-1;;;8430:18:1;;;8423:41;8481:19;;20789:120:0::1;8099:407:1::0;20789:120:0::1;20957:15;::::0;20925:48:::1;::::0;20947:8;;20925:48:::1;::::0;;;::::1;20984:15;:26:::0;20568:450::o;18323:217::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18433:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:33;;-1:-1:-1;;18433:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18482:50;;154:41:1;;;18482:50:0::1;::::0;127:18:1;18482:50:0::1;;;;;;;;18323:217:::0;;:::o;10634:293::-;7401:10;10747:4;10836:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10836:34:0;;;;;;;;;;10747:4;;10764:133;;10814:7;;10836:50;;10875:10;10836:38;:50::i;21388:81::-;21437:24;21443:10;21455:5;21437;:24::i;:::-;21388:81;:::o;34973:363::-;35069:21;35060:6;:30;35038:130;;;;-1:-1:-1;;;35038:130:0;;8713:2:1;35038:130:0;;;8695:21:1;8752:2;8732:18;;;8725:30;8791:34;8771:18;;;8764:62;-1:-1:-1;;;8842:18:1;;;8835:48;8900:19;;35038:130:0;8511:414:1;35038:130:0;35206:15;;35198:48;;35180:12;;-1:-1:-1;;;;;35206:15:0;;35235:6;;35180:12;35198:48;35180:12;35198:48;35235:6;35206:15;35198:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35179:67;;;35261:7;35257:72;;;35290:27;;1584:25:1;;;35290:27:0;;1572:2:1;1557:18;35290:27:0;;;;;;;35027:309;34973:363;:::o;9427:143::-;-1:-1:-1;;;;;9544:18:0;9517:7;9544:18;;;:9;:18;;;;;;;9427:143::o;8109:148::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;8216:1:::1;8200:6:::0;;8179:40:::1;::::0;-1:-1:-1;;;;;8200:6:0;;::::1;::::0;8179:40:::1;::::0;8216:1;;8179:40:::1;8247:1;8230:19:::0;;-1:-1:-1;;;;;;8230:19:0::1;::::0;;8109:148::o;19672:396::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19816:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;19794:142:::1;;;;-1:-1:-1::0;;;19794:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19947:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;19947:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20012:48;;154:41:1;;;20012:48:0::1;::::0;127:18:1;20012:48:0::1;14:187:1::0;19254:410:0;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19403:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19381:147:::1;;;;-1:-1:-1::0;;;19381:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19539:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19539:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19609:47;;154:41:1;;;19609:47:0::1;::::0;127:18:1;19609:47:0::1;14:187:1::0;9098:104:0;9154:13;9187:7;9180:14;;;;;:::i;35476:124::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;13612:23:::1;35531:15;:27:::0;;;35569:11:::1;:23:::0;35476:124::o;10935:393::-;11053:4;11070:228;7401:10;11120:7;11142:145;11199:15;11142:145;;;;;;;;;;;;;;;;;7401:10;11142:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11142:34:0;;;;;;;;;;;;:38;:145::i;9578:200::-;9689:4;9706:42;7401:10;9730:9;9741:6;9706:9;:42::i;21026:354::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;21144:23:::1;;21132:8;:35:::0;21110:136:::1;;;::::0;-1:-1:-1;;;21110:136:0;;9753:2:1;21110:136:0::1;::::0;::::1;9735:21:1::0;9792:2;9772:18;;;9765:30;9831:34;9811:18;;;9804:62;-1:-1:-1;;;9882:18:1;;;9875:49;9941:19;;21110:136:0::1;9551:415:1::0;21110:136:0::1;21303:23;::::0;21262:65:::1;::::0;21293:8;;21262:65:::1;::::0;;;::::1;21338:23;:34:::0;21026:354::o;18889:357::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19023:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19001:131:::1;;;;-1:-1:-1::0;;;19001:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19143:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19143:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19197:41;;154::1;;;19197::0::1;::::0;127:18:1;19197:41:0::1;14:187:1::0;20076:153:0;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;20133:38:::1;20151:6;20159:1;20162::::0;20165::::1;20168::::0;20133:17:::1;:38::i;:::-;20182:39;20202:6;20210:1;20213::::0;20216::::1;20219::::0;20182:18:::1;:39::i;:::-;20076:153::o:0;18229:84::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;18282:16:::1;:23:::0;;-1:-1:-1;;;;18282:23:0::1;-1:-1:-1::0;;;18282:23:0::1;::::0;;18229:84::o;35348:116::-;35402:4;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;-1:-1:-1;35419:7:0::1;:15:::0;;-1:-1:-1;;;;35419:15:0::1;::::0;;;35348:116;:::o;8265:281::-;8022:6;;-1:-1:-1;;;;;8022:6:0;7401:10;8022:22;8014:67;;;;-1:-1:-1;;;8014:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8368:22:0;::::1;8346:110;;;::::0;-1:-1:-1;;;8346:110:0;;10173:2:1;8346:110:0::1;::::0;::::1;10155:21:1::0;10212:2;10192:18;;;10185:30;10251:34;10231:18;;;10224:62;-1:-1:-1;;;10302:18:1;;;10295:36;10348:19;;8346:110:0::1;9971:402:1::0;8346:110:0::1;8493:6;::::0;;8472:38:::1;::::0;-1:-1:-1;;;;;8472:38:0;;::::1;::::0;8493:6;::::1;::::0;8472:38:::1;::::0;::::1;8521:6;:17:::0;;-1:-1:-1;;;;;;8521:17:0::1;-1:-1:-1::0;;;;;8521:17:0;;;::::1;::::0;;;::::1;::::0;;8265:281::o;12791:378::-;-1:-1:-1;;;;;12927:19:0;;12919:68;;;;-1:-1:-1;;;12919:68:0;;10580:2:1;12919:68:0;;;10562:21:1;10619:2;10599:18;;;10592:30;10658:34;10638:18;;;10631:62;-1:-1:-1;;;10709:18:1;;;10702:34;10753:19;;12919:68:0;10378:400:1;12919:68:0;-1:-1:-1;;;;;13006:21:0;;12998:68;;;;-1:-1:-1;;;12998:68:0;;10985:2:1;12998:68:0;;;10967:21:1;11024:2;11004:18;;;10997:30;11063:34;11043:18;;;11036:62;-1:-1:-1;;;11114:18:1;;;11107:32;11156:19;;12998:68:0;10783:398:1;12998:68:0;-1:-1:-1;;;;;13077:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13129:32;;1584:25:1;;;13129:32:0;;1557:18:1;13129:32:0;;;;;;;;12791:378;;;:::o;34520:445::-;34642:23;;34614:24;34632:4;34614:9;:24::i;:::-;:51;;34592:151;;;;-1:-1:-1;;;34592:151:0;;11388:2:1;34592:151:0;;;11370:21:1;11427:2;11407:18;;;11400:30;11466:34;11446:18;;;11439:62;-1:-1:-1;;;11517:18:1;;;11510:48;11575:19;;34592:151:0;11186:414:1;34592:151:0;34758:30;34775:4;34781:6;34758:16;:30::i;:::-;34754:204;;;34809:9;;-1:-1:-1;;;34809:9:0;;;;:13;34805:142;;34843:9;:16;;-1:-1:-1;;;;34843:16:0;-1:-1:-1;;;34843:16:0;;;34878:17;:15;:17::i;:::-;34914:9;:17;;-1:-1:-1;;;;34914:17:0;;;34520:445;;:::o;22060:3309::-;-1:-1:-1;;;;;22192:18:0;;22184:68;;;;-1:-1:-1;;;22184:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22271:16:0;;22263:64;;;;-1:-1:-1;;;22263:64:0;;;;;;;:::i;:::-;22344:6;22354:1;22344:11;22340:93;;22372:28;22388:4;22394:2;22398:1;22372:15;:28::i;:::-;22060:3309;;;:::o;22340:93::-;22455:7;;-1:-1:-1;;;22455:7:0;;;;22451:483;;;7933:7;7960:6;-1:-1:-1;;;;;22501:13:0;;;7960:6;;22501:13;;;;:64;;-1:-1:-1;22549:15:0;;-1:-1:-1;;;;;22535:30:0;;;22549:15;;22535:30;;22501:64;:113;;;;;22600:13;-1:-1:-1;;;;;22586:28:0;:2;-1:-1:-1;;;;;22586:28:0;;;22501:113;22479:444;;;22700:9;22679:31;;;;:20;:31;;;;;;22713:12;-1:-1:-1;22649:193:0;;;;-1:-1:-1;;;22649:193:0;;12617:2:1;22649:193:0;;;12599:21:1;12656:2;12636:18;;;12629:30;12695:34;12675:18;;;12668:62;12766:34;12746:18;;;12739:62;-1:-1:-1;;;12817:19:1;;;12810:40;12867:19;;22649:193:0;12415:477:1;22649:193:0;22882:9;22861:31;;;;:20;:31;;;;;22895:12;22861:46;;22479:444;-1:-1:-1;;;;;22960:31:0;;;22946:11;22960:31;;;:25;:31;;;;;;;;;23014:29;;;;;;;;;23075:20;;;:14;:20;;;;;;22960:31;;;;;23014:29;;;;23075:20;23074:21;:57;;;;-1:-1:-1;;;;;;23113:18:0;;;;;;:14;:18;;;;;;;;23112:19;23074:57;23056:1176;;;23166:16;;-1:-1:-1;;;23166:16:0;;;;23158:59;;;;-1:-1:-1;;;23158:59:0;;13099:2:1;23158:59:0;;;13081:21:1;13138:2;13118:18;;;13111:30;13177:32;13157:18;;;13150:60;13227:18;;23158:59:0;12897:354:1;23158:59:0;-1:-1:-1;;;;;23254:31:0;;;;;;:25;:31;;;;;;;;:91;;;;-1:-1:-1;;;;;;23307:38:0;;;;;;:34;:38;;;;;;;;23306:39;23254:91;23232:988;;;23420:11;;23410:6;:21;;23380:135;;;;-1:-1:-1;;;23380:135:0;;13458:2:1;23380:135:0;;;13440:21:1;13497:2;13477:18;;;13470:30;13536:34;13516:18;;;13509:62;-1:-1:-1;;;13587:18:1;;;13580:38;13635:19;;23380:135:0;13256:404:1;23380:135:0;23590:15;;23573:13;23583:2;23573:9;:13::i;:::-;23564:22;;:6;:22;:::i;:::-;:41;;23534:139;;;;-1:-1:-1;;;23534:139:0;;13997:2:1;23534:139:0;;;13979:21:1;14036:2;14016:18;;;14009:30;14075:26;14055:18;;;14048:54;14119:18;;23534:139:0;13795:348:1;23534:139:0;23232:988;;;-1:-1:-1;;;;;23717:29:0;;;;;;:25;:29;;;;;;;;:91;;;;-1:-1:-1;;;;;;23768:40:0;;;;;;:34;:40;;;;;;;;23767:41;23717:91;23695:525;;;23883:11;;23873:6;:21;;23843:137;;;;-1:-1:-1;;;23843:137:0;;14350:2:1;23843:137:0;;;14332:21:1;14389:2;14369:18;;;14362:30;14428:34;14408:18;;;14401:62;-1:-1:-1;;;14479:18:1;;;14472:40;14529:19;;23843:137:0;14148:406:1;23695:525:0;-1:-1:-1;;;;;24007:38:0;;;;;;:34;:38;;;;;;;;24002:218;;24122:15;;24105:13;24115:2;24105:9;:13::i;:::-;24096:22;;:6;:22;:::i;:::-;:41;;24066:138;;;;-1:-1:-1;;;24066:138:0;;14761:2:1;24066:138:0;;;14743:21:1;14800:2;14780:18;;;14773:30;14839:25;14819:18;;;14812:53;14882:18;;24066:138:0;14559:347:1;24066:138:0;24242:32;24251:6;24259:4;24265;24271:2;24242:8;:32::i;:::-;24285:12;24328:23;;24300:24;24318:4;24300:9;:24::i;:::-;24382:16;;-1:-1:-1;;24300:51:0;;-1:-1:-1;;;;24382:16:0;;;;:40;;;;;24415:7;24382:40;:67;;;;-1:-1:-1;24440:9:0;;-1:-1:-1;;;24440:9:0;;;;24439:10;24382:67;:97;;;;-1:-1:-1;24466:9:0;;-1:-1:-1;;;24466:9:0;;;;:13;;24382:97;:143;;;;-1:-1:-1;;;;;;24496:29:0;;;;;;:25;:29;;;;;;;;24382:143;:185;;;;-1:-1:-1;;;;;;24543:24:0;;;;;;:18;:24;;;;;;;;24542:25;24382:185;:225;;;;-1:-1:-1;;;;;;24585:22:0;;;;;;:18;:22;;;;;;;;24584:23;24382:225;24364:362;;;24634:9;:16;;-1:-1:-1;;;;24634:16:0;-1:-1:-1;;;24634:16:0;;;24665:17;:15;:17::i;:::-;24697:9;:17;;-1:-1:-1;;;;24697:17:0;;;24364:362;24754:9;;24738:12;;-1:-1:-1;;;24754:9:0;;;;24753:10;:30;;;;-1:-1:-1;24767:16:0;;-1:-1:-1;;;24767:16:0;;;;24753:30;-1:-1:-1;;;;;24800:24:0;;;;;;:18;:24;;;;;;24738:45;;-1:-1:-1;24800:24:0;;;:50;;-1:-1:-1;;;;;;24828:22:0;;;;;;:18;:22;;;;;;;;24800:50;24796:98;;;-1:-1:-1;24877:5:0;24796:98;24908:7;:24;;;;-1:-1:-1;24919:9:0;;-1:-1:-1;;;24919:9:0;;;;:13;;24908:24;24904:414;;;24973:9;;24949:11;;24986:3;;24964:18;;-1:-1:-1;;;24973:9:0;;;;24964:6;:18;:::i;:::-;24963:26;;;;:::i;:::-;25035:8;;24949:40;;-1:-1:-1;25004:18:0;;25047:3;;25026:17;;25035:8;;;;;25026:6;:17;:::i;:::-;25025:25;;;;:::i;:::-;25004:46;-1:-1:-1;25074:12:0;25083:3;25074:6;:12;:::i;:::-;25065:21;;25101:41;25117:4;25131;25138:3;25101:15;:41::i;:::-;25163:14;;25159:148;;25198:38;25218:4;25225:10;25198:11;:38::i;:::-;25270:8;;25260:31;;;25270:8;;;;;;15214:36:1;;15281:2;15266:18;;15259:34;;;25260:31:0;;15187:18:1;25260:31:0;;;;;;;25159:148;24934:384;;24904:414;25328:33;25344:4;25350:2;25354:6;25328:15;:33::i;:::-;22173:3196;;;;22060:3309;;;:::o;2804:226::-;2924:7;2960:12;2952:6;;;;2944:29;;;;-1:-1:-1;;;2944:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2984:9:0;2996:5;3000:1;2996;:5;:::i;:::-;2984:17;2804:226;-1:-1:-1;;;;;2804:226:0:o;2471:181::-;2529:7;;2561:5;2565:1;2561;:5;:::i;:::-;2549:17;;2590:1;2585;:6;;2577:46;;;;-1:-1:-1;;;2577:46:0;;15506:2:1;2577:46:0;;;15488:21:1;15545:2;15525:18;;;15518:30;15584:29;15564:18;;;15557:57;15631:18;;2577:46:0;15304:351:1;2577:46:0;2643:1;2471:181;-1:-1:-1;;;2471:181:0:o;12332:451::-;-1:-1:-1;;;;;12416:21:0;;12408:67;;;;-1:-1:-1;;;12408:67:0;;15862:2:1;12408:67:0;;;15844:21:1;15901:2;15881:18;;;15874:30;15940:34;15920:18;;;15913:62;-1:-1:-1;;;15991:18:1;;;15984:31;16032:19;;12408:67:0;15660:397:1;12408:67:0;12567:105;12604:6;12567:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12567:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12546:18:0;;;;;;:9;:18;;;;;:126;12698:12;;:24;;12715:6;12698:16;:24::i;:::-;12683:12;:39;12738:37;;1584:25:1;;;12764:1:0;;-1:-1:-1;;;;;12738:37:0;;;;;1572:2:1;1557:18;12738:37:0;;;;;;;12332:451;;:::o;28516:1439::-;28732:14;;;;:29;;;;:14;;:29;28728:273;;28783:163;;-1:-1:-1;;;16264:25:1;;16314:2;16305:12;28783:163:0;;;;;;;;28853:14;;;;28917;;28783:163;;28853:14;;;;;28783:163;;;;-1:-1:-1;;;;;;;;;;;28783:163:0;;;28917:14;;;28783:163;:::i;:::-;;;;;;;;28961:14;;;:28;;-1:-1:-1;;28961:28:0;;;;;;;28728:273;29015:21;;;;:43;;;;:21;;;;;:43;29011:322;;29080:184;;-1:-1:-1;;;16744:32:1;;16801:2;16792:12;29080:184:0;;;;;;;;29157:21;;;;29235:14;;29080:184;;29157:21;;;;;;;;29080:184;;;;-1:-1:-1;;;;;;;;;;;29080:184:0;;;29235:14;;;29080:184;:::i;:::-;;;;;;;;29279:21;;;:42;;-1:-1:-1;;29279:42:0;;;;;;;;;29011:322;29347:19;;;;:39;;;;-1:-1:-1;;;29347:19:0;;;;:39;29343:308;;29408:178;;-1:-1:-1;;;17017:30:1;;17072:2;17063:12;29408:178:0;;;;;;;;29483:19;;;;29557:14;;29408:178;;29483:19;-1:-1:-1;;;29483:19:0;;;;;;29408:178;;;;-1:-1:-1;;;;;;;;;;;29408:178:0;;;29557:14;;;29408:178;:::i;:::-;;;;;;;;29601:19;;;:38;;-1:-1:-1;;29601:38:0;-1:-1:-1;;;29601:38:0;;;;;;;29343:308;29665:16;;;;:33;;;;-1:-1:-1;;;29665:16:0;;;;:33;29661:287;;29720:169;;-1:-1:-1;;;17288:27:1;;17340:2;17331:12;29720:169:0;;;;;;;;29792:16;;;;29860:14;;29720:169;;29792:16;-1:-1:-1;;;29792:16:0;;;;;;29720:169;;;;-1:-1:-1;;;;;;;;;;;29720:169:0;;;29860:14;;;29720:169;:::i;:::-;;;;;;;;29904:16;;;:32;;-1:-1:-1;;29904:32:0;-1:-1:-1;;;29904:32:0;;;;;;;29661:287;28516:1439;;;;;:::o;27036:1472::-;27257:15;;;;:31;;;;:15;;;;;:31;27253:280;;27310:166;;-1:-1:-1;;;17556:26:1;;17607:2;17598:12;27310:166:0;;;;;;;;27381:15;;;;27447:14;;27310:166;;27381:15;;;;;;;;27310:166;;;;-1:-1:-1;;;;;;;;;;;27310:166:0;;;27447:14;;;27310:166;:::i;:::-;;;;;;;;27491:15;;;:30;;-1:-1:-1;;27491:30:0;;;;;;;;;27253:280;27547:22;;;;:45;;;;:22;;;;;:45;27543:329;;27614:187;;-1:-1:-1;;;17823:33:1;;17881:2;17872:12;27614:187:0;;;;;;;;27692:22;;;;27772:14;;27614:187;;27692:22;;;;;;;;27614:187;;;;-1:-1:-1;;;;;;;;;;;27614:187:0;;;27772:14;;;27614:187;:::i;:::-;;;;;;;;27816:22;;;:44;;-1:-1:-1;;27816:44:0;;;;;;;;;27543:329;27886:20;;;;:41;;;;-1:-1:-1;;;27886:20:0;;;;:41;27882:315;;27949:181;;-1:-1:-1;;;18097:31:1;;18153:2;18144:12;27949:181:0;;;;;;;;28025:20;;;;28101:14;;27949:181;;28025:20;-1:-1:-1;;;28025:20:0;;;;;;27949:181;;;;-1:-1:-1;;;;;;;;;;;27949:181:0;;;28101:14;;;27949:181;:::i;:::-;;;;;;;;28145:20;;;:40;;-1:-1:-1;;28145:40:0;-1:-1:-1;;;28145:40:0;;;;;;;27882:315;28211:17;;;;:35;;;;-1:-1:-1;;;28211:17:0;;;;:35;28207:294;;28268:172;;-1:-1:-1;;;18369:28:1;;18422:2;18413:12;28268:172:0;;;;;;;;28341:17;;;;28411:14;;28268:172;;28341:17;-1:-1:-1;;;28341:17:0;;;;;;28268:172;;;;-1:-1:-1;;;;;;;;;;;28268:172:0;;;28411:14;;;28268:172;:::i;:::-;;;;;;;;28455:17;;;:34;;;;;-1:-1:-1;;;28455:34:0;-1:-1:-1;;28455:34:0;;;;;;27036:1472;;;;;:::o;29963:1617::-;30129:10;30065:4;30110:30;;;:18;:30;;;;;;30065:4;;30110:30;;30105:1468;;30161:9;;-1:-1:-1;;;30161:9:0;;;;:13;30157:309;;30219:9;;30195:11;;30232:3;;30210:18;;-1:-1:-1;;;30219:9:0;;;;30210:6;:18;:::i;:::-;30209:26;;;;:::i;:::-;30285:8;;30195:40;;-1:-1:-1;30254:18:0;;30297:3;;30276:17;;30285:8;;;;;30276:6;:17;:::i;:::-;30275:25;;;;:::i;:::-;30254:46;-1:-1:-1;30328:12:0;30337:3;30328:6;:12;:::i;:::-;30319:21;-1:-1:-1;30363:14:0;;30359:92;;30402:29;30408:10;30420;30402:5;:29::i;:::-;30176:290;;30157:309;30484:9;;-1:-1:-1;;;30484:9:0;;;;:13;30480:386;;30518:23;30544:24;30562:4;30544:9;:24::i;:::-;30663:9;;30518:50;;-1:-1:-1;30587:23:0;;30675:1;;30663:9;-1:-1:-1;;;30663:9:0;;;;;30614:24;;30632:6;30518:50;30614:24;:::i;:::-;30613:59;;;;:::i;:::-;:63;;;;:::i;:::-;30587:89;-1:-1:-1;30695:20:0;30718:35;30587:89;30718:15;:35;:::i;:::-;30695:58;-1:-1:-1;30776:16:0;;30772:79;;30827:4;30817:14;;30772:79;30499:367;;;30480:386;30887:7;-1:-1:-1;30880:14:0;;30105:1468;-1:-1:-1;;;;;30931:24:0;;30950:4;30931:24;30927:226;;30976:22;30982:7;30991:6;30976:5;:22::i;:::-;-1:-1:-1;31027:5:0;30927:226;;;-1:-1:-1;31079:14:0;:23;;;31132:5;30927:226;31171:9;;-1:-1:-1;;;31171:9:0;;;;:13;31167:366;;31205:23;31231:24;31249:4;31231:9;:24::i;:::-;31329:9;;31205:50;;-1:-1:-1;31274:23:0;;31341:1;;31329:9;-1:-1:-1;;;31329:9:0;;;;;31301:24;;31319:6;31205:50;31301:24;:::i;:::-;31300:38;;;;:::i;:::-;:42;;;;:::i;:::-;31274:68;-1:-1:-1;31361:20:0;31384:35;31274:68;31384:15;:35;:::i;:::-;31361:58;-1:-1:-1;31442:16:0;;31438:80;;31493:5;31483:15;;31186:347;;;31554:7;-1:-1:-1;31547:14:0;;31588:1384;31634:23;31660:24;31678:4;31660:9;:24::i;:::-;31777:23;;31634:50;;-1:-1:-1;31723:21:0;;31777:27;;31803:1;31777:27;:::i;:::-;31759:15;:45;31755:123;;;31839:23;;:27;;31865:1;31839:27;:::i;:::-;31821:45;;31755:123;31966:9;;31888:12;;;;31978:1;;31966:9;-1:-1:-1;;;31966:9:0;;;;;31938:24;;31956:6;31938:15;:24;:::i;:::-;31937:38;;;;:::i;:::-;:42;;;;:::i;:::-;31911:68;-1:-1:-1;31990:20:0;32013:35;31911:68;32013:15;:35;:::i;:::-;31990:58;;32061:31;32079:12;32061:17;:31::i;:::-;32105:27;32135:41;32159:17;32135:21;:41;:::i;:::-;32237:8;;32105:71;;-1:-1:-1;32187:19:0;;32237:8;;;;;;;32223:10;;32232:1;;32223:6;:10;:::i;:::-;32222:23;;;;:::i;:::-;32209:9;;:37;;;-1:-1:-1;;;32209:9:0;;;;:37;:::i;:::-;32309:6;;32187:59;;;;;-1:-1:-1;32257:26:0;;32333:1;;32187:59;;32287:28;;32309:6;32287:19;:28;:::i;:::-;32286:44;;;;:::i;:::-;:48;;;;:::i;:::-;32397:13;;32257:77;;-1:-1:-1;32345:26:0;;32414:11;;32375:35;;32397:13;;;;;32375:19;:35;:::i;:::-;32374:51;;;;:::i;:::-;32345:80;-1:-1:-1;32436:24:0;32486:39;32345:80;32486:18;:39;:::i;:::-;32463:63;;:19;:63;:::i;:::-;32561:15;;32553:58;;32436:90;;-1:-1:-1;;;;;;32561:15:0;;32436:90;;32553:58;;;;32436:90;32561:15;32553:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32644:15:0;;32636:63;;32539:72;;-1:-1:-1;;;;;;32644:15:0;;32673:21;;32636:63;;;;32673:21;32644:15;32636:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32622:77:0;;-1:-1:-1;;32716:19:0;;32712:253;;32752:50;32766:15;32783:18;32752:13;:50::i;:::-;32822:131;;;19117:25:1;;;19173:2;19158:18;;19151:34;;;19201:18;;;19194:34;;;32822:131:0;;19105:2:1;19090:18;32822:131:0;;;;;;;32712:253;31623:1349;;;;;;;;;;31588:1384::o;11336:606::-;-1:-1:-1;;;;;11476:20:0;;11468:70;;;;-1:-1:-1;;;11468:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11557:23:0;;11549:71;;;;-1:-1:-1;;;11549:71:0;;;;;;;:::i;:::-;11709:108;11745:6;11709:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11709:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11689:17:0;;;;;;;:9;:17;;;;;;:128;;;;11851:20;;;;;;;:32;;11876:6;11851:24;:32::i;:::-;-1:-1:-1;;;;;11828:20:0;;;;;;;:9;:20;;;;;;;:55;;;;11899:35;;;;;;;;;;11927:6;1584:25:1;;1572:2;1557:18;;1438:177;25377:1193:0;25507:6;:10;;-1:-1:-1;;25582:12:0;;;25605:218;;;;25639:18;;25630:6;:27;;25639:18;;;;;;;;-1:-1:-1;;25672:41:0;;;;;;;25688:25;;;;;;25672:41;;;;;-1:-1:-1;;25780:31:0;-1:-1:-1;;;25742:23:0;;;;25728:37;;-1:-1:-1;;25780:31:0;;-1:-1:-1;;;25791:20:0;;;;;;;25780:31;;;;;;;25605:218;25837:6;25833:216;;;25869:17;;25860:6;:26;;25869:17;;;;-1:-1:-1;;25901:40:0;;;;;;;25869:17;25917:24;;;;;;25901:40;;;;;;;;-1:-1:-1;;26007:30:0;-1:-1:-1;;;25970:22:0;;;;25956:36;;;;-1:-1:-1;;26007:30:0;;-1:-1:-1;;;26018:19:0;;;;26007:30;;;;;;;;25833:216;26059:34;26076:6;26084:4;26090:2;26059:16;:34::i;:::-;26109:4;26108:5;:16;;;;;26118:6;26117:7;26108:16;26104:230;;;26150:18;;26141:6;:27;;26150:18;;;;;;;;-1:-1:-1;;26183:41:0;;;;;;;26199:25;;;;;;26183:41;;;;;-1:-1:-1;;26291:31:0;-1:-1:-1;;;26253:23:0;;;;26239:37;;-1:-1:-1;;26291:31:0;;-1:-1:-1;;;26302:20:0;;;;;;;26291:31;;;;;;;26104:230;26395:8;;;;;;;;;26381:11;;;;;;26356:22;;26395:8;26365:13;;;;;26356:6;:22;:::i;:::-;:36;;;;:::i;:::-;:47;;;;:::i;:::-;26344:9;:59;;;;;;-1:-1:-1;;;26344:59:0;;;-1:-1:-1;;26344:59:0;;;;;;;;26419:143;;;26444:6;;;;;;;;;;19478:36:1;;26344:59:0;26465:13;;;;19545:2:1;19530:18;;19523:45;26493:11:0;;;;;19584:18:1;;;19577:45;26519:8:0;;;;;19653:2:1;19638:18;;19631:45;26542:9:0;;;;;19707:3:1;19692:19;;19685:46;26419:143:0;;;;;;;19465:3:1;26419:143:0;;;25377:1193;;;;:::o;2660:136::-;2718:7;2745:43;2749:1;2752;2745:43;;;;;;;;;;;;;;;;;:3;:43::i;32980:500::-;33071:16;;;33085:1;33071:16;;;;;;;;33047:21;;33071:16;;;;;;;;;;-1:-1:-1;33071:16:0;33047:40;;33116:4;33098;33103:1;33098:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33098:23:0;;;:7;;;;;;;;;;:23;;;;33142:15;;:22;;;-1:-1:-1;;;33142:22:0;;;;:15;;;;;:20;;:22;;;;;33098:7;;33142:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33132:4;33137:1;33132:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33132:32:0;;;:7;;;;;;;;;:32;33207:15;;33175:62;;33192:4;;33207:15;33225:11;33175:8;:62::i;:::-;33248:15;;:224;;-1:-1:-1;;;33248:224:0;;-1:-1:-1;;;;;33248:15:0;;;;:66;;:224;;33329:11;;33248:15;;33399:4;;33426;;33446:15;;33248:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33036:444;32980:500;:::o;34137:371::-;34251:15;;34219:62;;34236:4;;-1:-1:-1;;;;;34251:15:0;34269:11;34219:8;:62::i;:::-;34292:15;;34444;;34292:208;;-1:-1:-1;;;34292:208:0;;34364:4;34292:208;;;20670:34:1;20720:18;;;20713:34;;;34292:15:0;20763:18:1;;;20756:34;;;20806:18;;;20799:34;-1:-1:-1;;;;;34444:15:0;;;20849:19:1;;;20842:44;34474:15:0;20902:19:1;;;20895:35;34292:15:0;;;:31;;34331:9;;20604:19:1;;34292:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26578:450::-;-1:-1:-1;;;;;26714:16:0;;;;;;:54;;-1:-1:-1;;;;;;26747:21:0;;26761:6;26747:21;;26714:54;:96;;;;-1:-1:-1;;;;;;26786:24:0;;;;;;:18;:24;;;;;;;;26785:25;26714:96;:136;;;;-1:-1:-1;;;;;;26828:22:0;;;;;;:18;:22;;;;;;;;26827:23;26714:136;26696:325;;;26882:6;26881:7;:21;;;;-1:-1:-1;26893:9:0;;-1:-1:-1;;;26893:9:0;;;;26892:10;26881:21;:43;;;;;26923:1;26906:14;;:18;26881:43;26877:133;;;26980:14;;26962:15;26972:4;26962:9;:15::i;:::-;:32;;;;:::i;:::-;26945:14;:49;26578:450;;;:::o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1620:::-;1688:6;1696;1749:2;1737:9;1728:7;1724:23;1720:32;1717:52;;;1765:1;1762;1755:12;1717:52;1801:9;1788:23;1778:33;;1861:2;1850:9;1846:18;1833:32;1874:31;1899:5;1874:31;:::i;:::-;1924:5;1914:15;;;1620:315;;;;;:::o;1940:180::-;1999:6;2052:2;2040:9;2031:7;2027:23;2023:32;2020:52;;;2068:1;2065;2058:12;2020:52;-1:-1:-1;2091:23:1;;1940:180;-1:-1:-1;1940:180:1:o;2125:456::-;2202:6;2210;2218;2271:2;2259:9;2250:7;2246:23;2242:32;2239:52;;;2287:1;2284;2277:12;2239:52;2326:9;2313:23;2345:31;2370:5;2345:31;:::i;:::-;2395:5;-1:-1:-1;2452:2:1;2437:18;;2424:32;2465:33;2424:32;2465:33;:::i;:::-;2125:456;;2517:7;;-1:-1:-1;;;2571:2:1;2556:18;;;;2543:32;;2125:456::o;2775:416::-;2840:6;2848;2901:2;2889:9;2880:7;2876:23;2872:32;2869:52;;;2917:1;2914;2907:12;2869:52;2956:9;2943:23;2975:31;3000:5;2975:31;:::i;:::-;3025:5;-1:-1:-1;3082:2:1;3067:18;;3054:32;3124:15;;3117:23;3105:36;;3095:64;;3155:1;3152;3145:12;3404:247;3463:6;3516:2;3504:9;3495:7;3491:23;3487:32;3484:52;;;3532:1;3529;3522:12;3484:52;3571:9;3558:23;3590:31;3615:5;3590:31;:::i;3656:388::-;3724:6;3732;3785:2;3773:9;3764:7;3760:23;3756:32;3753:52;;;3801:1;3798;3791:12;3753:52;3840:9;3827:23;3859:31;3884:5;3859:31;:::i;:::-;3909:5;-1:-1:-1;3966:2:1;3951:18;;3938:32;3979:33;3938:32;3979:33;:::i;4473:380::-;4552:1;4548:12;;;;4595;;;4616:61;;4670:4;4662:6;4658:17;4648:27;;4616:61;4723:2;4715:6;4712:14;4692:18;4689:38;4686:161;;4769:10;4764:3;4760:20;4757:1;4750:31;4804:4;4801:1;4794:15;4832:4;4829:1;4822:15;4686:161;;4473:380;;;:::o;4990:251::-;5060:6;5113:2;5101:9;5092:7;5088:23;5084:32;5081:52;;;5129:1;5126;5119:12;5081:52;5161:9;5155:16;5180:31;5205:5;5180:31;:::i;5246:127::-;5307:10;5302:3;5298:20;5295:1;5288:31;5338:4;5335:1;5328:15;5362:4;5359:1;5352:15;5378:465;5431:3;5469:5;5463:12;5496:6;5491:3;5484:19;5522:4;5551;5546:3;5542:14;5535:21;;5590:4;5583:5;5579:16;5613:1;5623:195;5637:6;5634:1;5631:13;5623:195;;;5702:13;;-1:-1:-1;;;;;5698:39:1;5686:52;;5758:12;;;;5793:15;;;;5734:1;5652:9;5623:195;;;-1:-1:-1;5834:3:1;;5378:465;-1:-1:-1;;;;;5378:465:1:o;5848:510::-;6119:6;6108:9;6101:25;6162:3;6157:2;6146:9;6142:18;6135:31;6082:4;6183:57;6235:3;6224:9;6220:19;6212:6;6183:57;:::i;:::-;-1:-1:-1;;;;;6276:32:1;;;;6271:2;6256:18;;6249:60;-1:-1:-1;6340:2:1;6325:18;6318:34;6175:65;5848:510;-1:-1:-1;;5848:510:1:o;6363:356::-;6565:2;6547:21;;;6584:18;;;6577:30;6643:34;6638:2;6623:18;;6616:62;6710:2;6695:18;;6363:356::o;6724:127::-;6785:10;6780:3;6776:20;6773:1;6766:31;6816:4;6813:1;6806:15;6840:4;6837:1;6830:15;6856:168;6929:9;;;6960;;6977:15;;;6971:22;;6957:37;6947:71;;6998:18;;:::i;7029:127::-;7090:10;7085:3;7081:20;7078:1;7071:31;7121:4;7118:1;7111:15;7145:4;7142:1;7135:15;7161:120;7201:1;7227;7217:35;;7232:18;;:::i;:::-;-1:-1:-1;7266:9:1;;7161:120::o;9140:406::-;9342:2;9324:21;;;9381:2;9361:18;;;9354:30;9420:34;9415:2;9400:18;;9393:62;-1:-1:-1;;;9486:2:1;9471:18;;9464:40;9536:3;9521:19;;9140:406::o;11605:401::-;11807:2;11789:21;;;11846:2;11826:18;;;11819:30;11885:34;11880:2;11865:18;;11858:62;-1:-1:-1;;;11951:2:1;11936:18;;11929:35;11996:3;11981:19;;11605:401::o;12011:399::-;12213:2;12195:21;;;12252:2;12232:18;;;12225:30;12291:34;12286:2;12271:18;;12264:62;-1:-1:-1;;;12357:2:1;12342:18;;12335:33;12400:3;12385:19;;12011:399::o;13665:125::-;13730:9;;;13751:10;;;13748:36;;;13764:18;;:::i;14911:128::-;14978:9;;;14999:11;;;14996:37;;;15013:18;;:::i;16328:209::-;-1:-1:-1;;16492:38:1;;;;16474:57;;16462:2;16447:18;;16328:209::o;18436:165::-;18474:1;18508:4;18505:1;18501:12;18532:3;18522:37;;18539:18;;:::i;:::-;18591:3;18584:4;18581:1;18577:12;18573:22;18568:27;;;18436:165;;;;:::o;18606:148::-;18694:4;18673:12;;;18687;;;18669:31;;18712:13;;18709:39;;;18728:18;;:::i;18759:151::-;18849:4;18842:12;;;18828;;;18824:31;;18867:14;;18864:40;;;18884:18;;:::i;19742:582::-;20041:6;20030:9;20023:25;20084:6;20079:2;20068:9;20064:18;20057:34;20127:3;20122:2;20111:9;20107:18;20100:31;20004:4;20148:57;20200:3;20189:9;20185:19;20177:6;20148:57;:::i;:::-;-1:-1:-1;;;;;20241:32:1;;;;20236:2;20221:18;;20214:60;-1:-1:-1;20305:3:1;20290:19;20283:35;20140:65;19742:582;-1:-1:-1;;;19742:582:1:o;20941:306::-;21029:6;21037;21045;21098:2;21086:9;21077:7;21073:23;21069:32;21066:52;;;21114:1;21111;21104:12;21066:52;21143:9;21137:16;21127:26;;21193:2;21182:9;21178:18;21172:25;21162:35;;21237:2;21226:9;21222:18;21216:25;21206:35;;20941:306;;;;;:::o

Swarm Source

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