ETH Price: $2,630.85 (+2.48%)

Token

Grail Token (GRAIL)
 

Overview

Max Total Supply

1,000,000 GRAIL

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
62,745.847577990813672771 GRAIL

Value
$0.00
0xa332f9047b9703cfa1aba96156796f658d37c079
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:
GrailToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(
			address(this).balance >= amount,
			"Address: insufficient balance"
		);

		(bool success, ) = recipient.call{value: amount}("");
		require(
			success,
			"Address: unable to send value, recipient may have reverted"
		);
	}

	function functionCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return functionCall(target, data, "Address: low-level call failed");
	}

	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return
		functionCallWithValue(
			target,
			data,
			value,
			"Address: low-level call with value failed"
		);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(
			address(this).balance >= value,
			"Address: insufficient balance for call"
		);
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(
		data
		);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data)
	internal
	view
	returns (bytes memory)
	{
		return
		functionStaticCall(
			target,
			data,
			"Address: low-level static call failed"
		);
	}

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return
		functionDelegateCall(
			target,
			data,
			"Address: low-level delegate call failed"
		);
	}

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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 {
    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 to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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


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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

contract GrailToken is Ownable, ERC20 {
    using Address for address;

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Grail Token";
    string private constant _symbol = "GRAIL";

    bool public isTradingEnabled;

    uint256 public initialSupply = 1000000 * (10**18);

    // max buy and sell tx is 100% of initialSupply
    uint256 public maxTxAmount = initialSupply;

    // max wallet is 1% of initialSupply
    uint256 public maxWalletAmount = initialSupply * 100 / 10000;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = initialSupply * 1 / 100000;

    address public liquidity1Wallet;
    address public liquidity2Wallet;
    address public operationsWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 liquidity1FeeOnBuy;
        uint8 liquidity1FeeOnSell;
        uint8 liquidity2FeeOnBuy;
        uint8 liquidity2FeeOnSell;
        uint8 operationsFeeOnBuy;
        uint8 operationsFeeOnSell;
    }

    // Base taxes
    CustomTaxPeriod private _base = CustomTaxPeriod("base", 1, 1, 10, 10, 2, 2);

    bool private _isLaunched;
    bool public _launchTokensClaimed;
    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;
    uint256 public launchTokens;

    mapping (address => bool) private _isBlocked;
    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _feeOnSelectedWalletTransfers;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidity1Fee;
    uint8 private _liquidity2Fee;
    uint8 private _operationsFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
    event BlockedAccountChange(address indexed holder, bool indexed status);
    event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
    event WalletChange(string indexed indentifier,address indexed newWallet,address indexed oldWallet);
    event FeeChange(string indexed identifier,uint8 liquidity1Fee,uint8 liquidity2Fee,uint8 operationsFee);
    event CustomTaxPeriodChange(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 ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxWalletChange(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 FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue);
    event ClaimOverflow(address token, uint256 amount);
    event TradingStatusChange(bool indexed newValue, bool indexed oldValue);
    event FeesApplied(uint8 liquidity1Fee,uint8 liquidity2Fee,uint8 operationsFee,uint8 totalFee);

    constructor() ERC20(_name, _symbol) {
        liquidity1Wallet = owner();
        liquidity2Wallet = owner();
        operationsWallet = owner();

        IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isAllowedToTradeWhenDisabled[address(this)] = true;

        _isExcludedFromMaxTransactionLimit[address(this)] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;

        _mint(owner(), initialSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
        if(_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
            _launchStartTimestamp = block.timestamp;
            _isLaunched = true;
        }
        emit TradingStatusChange(true, false);
    }
    function deactivateTrading() external onlyOwner {
        isTradingEnabled = false;
        emit TradingStatusChange(false, true);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value,"Grail: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }
    function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }
    function blockAccount(address account) external onlyOwner {
        require(!_isBlocked[account], "Grail: Account is already blocked");
        if (_isLaunched) {
            require((block.timestamp - _launchStartTimestamp) < 172800, "Grail: Time to block accounts has expired");
        }
        _isBlocked[account] = true;
        emit BlockedAccountChange(account, true);
    }
    function unblockAccount(address account) external onlyOwner {
        require(_isBlocked[account], "Grail: Account is not blcoked");
        _isBlocked[account] = false;
        emit BlockedAccountChange(account, false);
    }
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
        require(_feeOnSelectedWalletTransfers[account] != value,"Grail: The selected wallet is already set to the value ");
        _feeOnSelectedWalletTransfers[account] = value;
        emit FeeOnSelectedWalletTransfersChange(account, value);
    }
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFee[account] != excluded,"Grail: Account is already the value of 'excluded'");
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }
    function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxTransactionLimit[account] != excluded,"Grail: 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,"Grail: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setWallets(address newLiquidity1Wallet,address newLiquidity2Wallet,address newOperationsWallet) external onlyOwner {
        if (liquidity1Wallet != newLiquidity1Wallet) {
            require(newLiquidity1Wallet != address(0), "Grail: The liquidity1Wallet cannot be 0");
            emit WalletChange("liquidity1Wallet", newLiquidity1Wallet, liquidity1Wallet);
            liquidity1Wallet = newLiquidity1Wallet;
        }
        if (liquidity2Wallet != newLiquidity2Wallet) {
            require(newLiquidity2Wallet != address(0), "Grail: The liquidity2Wallet cannot be 0");
            emit WalletChange("liquidity2Wallet", newLiquidity2Wallet, liquidity2Wallet);
            liquidity2Wallet = newLiquidity2Wallet;
        }
        if (operationsWallet != newOperationsWallet) {
            require(newOperationsWallet != address(0), "Grail: The operationsWallet cannot be 0");
            emit WalletChange("operationsWallet", newOperationsWallet, operationsWallet);
            operationsWallet = newOperationsWallet;
        }
    }
    // Base fees
    function setBaseFeesOnBuy(uint8 _liquidity1FeeOnBuy,uint8 _liquidity2FeeOnBuy,uint8 _operationsFeeOnBuy) external onlyOwner {
        _setCustomBuyTaxPeriod(_base,_liquidity1FeeOnBuy,_liquidity2FeeOnBuy,_operationsFeeOnBuy);
        emit FeeChange("baseFees-Buy",_liquidity1FeeOnBuy,_liquidity2FeeOnBuy,_operationsFeeOnBuy);
    }
    function setBaseFeesOnSell(uint8 _liquidity1FeeOnSell,uint8 _liquidity2FeeOnSell,uint8 _operationsFeeOnSell) external onlyOwner {
        _setCustomSellTaxPeriod(_base,_liquidity1FeeOnSell,_liquidity2FeeOnSell,_operationsFeeOnSell);
        emit FeeChange("baseFees-Sell",_liquidity1FeeOnSell,_liquidity2FeeOnSell,_operationsFeeOnSell);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router),"Grail: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "Grail: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount,"Grail: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(newValue != minimumTokensBeforeSwap,"Grail: Cannot update minimumTokensBeforeSwap to same value");
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }
    function claimLaunchTokens() external onlyOwner {
		require(_launchStartTimestamp > 0, "Grail: Launch must have occurred");
		require(!_launchTokensClaimed, "Grail: Launch tokens have already been claimed");
		require(block.number - _launchBlockNumber > 5, "Grail: Only claim launch tokens after launch");
		uint256 tokenBalance = balanceOf(address(this));
		_launchTokensClaimed = true;
		require(launchTokens <= tokenBalance, "Grail: A swap and liquify has already occurred");
		uint256 amount = launchTokens;
		launchTokens = 0;
        (bool success) = IERC20(address(this)).transfer(owner(), amount);
        if (success){
            emit ClaimOverflow(address(this), amount);
        }
    }
    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "Grail: Cannot send more than contract balance");
        (bool success, ) = address(owner()).call{ value: amount }("");
        if (success) {
            emit ClaimOverflow(uniswapV2Router.WETH(), amount);
        }
    }

    // Getters
    function getBaseBuyFees() external view returns (uint8,uint8,uint8) {
        return (_base.liquidity1FeeOnBuy,_base.liquidity2FeeOnBuy,_base.operationsFeeOnBuy);
    }
    function getBaseSellFees() external view returns (uint8,uint8,uint8) {
        return (_base.liquidity1FeeOnSell,_base.liquidity2FeeOnSell,_base.operationsFeeOnSell);
    }
    // Main
    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 (!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
            require(isTradingEnabled, "Grail: Trading is currently disabled.");
            require(!_isBlocked[to], "Grail: Account is blocked");
            require(!_isBlocked[from], "Grail: Account is blocked");
            if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                require(amount <= maxTxAmount, "Grail: Buy amount exceeds the maxTxBuyAmount.");
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "Grail: Expected wallet amount exceeds the maxWalletAmount.");
            }
        }

        _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[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;
            amount = amount - fee;
            if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) {
                launchTokens += fee;
            }
            super._transfer(from, address(this), fee);
        }
        super._transfer(from, to, amount);
    }

    function _adjustTaxes(bool isBuyFromLp,bool isSelltoLp,address from,address to) private {
        _liquidity1Fee = 0;
        _liquidity2Fee = 0;
        _operationsFee = 0;

        if (isBuyFromLp) {
            if (_isLaunched && block.timestamp - _launchBlockNumber <= 5) {
                _liquidity1Fee = 100;
            } else {
                _liquidity1Fee = _base.liquidity1FeeOnBuy;
                _liquidity2Fee = _base.liquidity2FeeOnBuy;
                _operationsFee = _base.operationsFeeOnBuy;
            }
        }
        if (isSelltoLp) {
            _liquidity1Fee = _base.liquidity1FeeOnSell;
            _liquidity2Fee = _base.liquidity2FeeOnSell;
            _operationsFee = _base.operationsFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
            _liquidity1Fee = _base.liquidity1FeeOnBuy;
            _liquidity2Fee = _base.liquidity2FeeOnBuy;
            _operationsFee = _base.operationsFeeOnBuy;
        }
        _totalFee = _liquidity1Fee + _liquidity2Fee + _operationsFee;
        emit FeesApplied(_liquidity1Fee, _liquidity2Fee, _operationsFee, _totalFee);
    }

    function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidity1FeeOnSell,uint8 _liquidity2FeeOnSell,uint8 _operationsFeeOnSell) private {
        if (map.liquidity1FeeOnSell != _liquidity1FeeOnSell) {
            emit CustomTaxPeriodChange(_liquidity1FeeOnSell,map.liquidity1FeeOnSell,"liquidity1FeeOnSell",map.periodName);
            map.liquidity1FeeOnSell = _liquidity1FeeOnSell;
        }
        if (map.liquidity2FeeOnSell != _liquidity2FeeOnSell) {
            emit CustomTaxPeriodChange(_liquidity2FeeOnSell,map.liquidity2FeeOnSell,"liquidity2FeeOnSell",map.periodName);
            map.liquidity2FeeOnSell = _liquidity2FeeOnSell;
        }
        if (map.operationsFeeOnSell != _operationsFeeOnSell) {
            emit CustomTaxPeriodChange(_operationsFeeOnSell,map.operationsFeeOnSell,"operationsFeeOnSell",map.periodName);
            map.operationsFeeOnSell = _operationsFeeOnSell;
        }
    }
    function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidity1FeeOnBuy,uint8 _liquidity2FeeOnBuy,uint8 _operationsFeeOnBuy) private {
        if (map.liquidity1FeeOnBuy != _liquidity1FeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidity1FeeOnBuy,map.liquidity1FeeOnBuy,"liquidity1FeeOnBuy",map.periodName);
            map.liquidity1FeeOnBuy = _liquidity1FeeOnBuy;
        }
        if (map.liquidity2FeeOnBuy != _liquidity2FeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidity2FeeOnBuy,map.liquidity2FeeOnBuy,"liquidity2FeeOnBuy",map.periodName);
            map.liquidity2FeeOnBuy = _liquidity2FeeOnBuy;
        }
        if (map.operationsFeeOnBuy != _operationsFeeOnBuy) {
            emit CustomTaxPeriodChange(_operationsFeeOnBuy,map.operationsFeeOnBuy,"operationsFeeOnBuy",map.periodName);
            map.operationsFeeOnBuy = _operationsFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidity1Fee) / _totalFee / 2;
        uint256 amountToSwap = contractBalance - amountToLiquify;

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - (_liquidity1Fee / 2);
        uint256 amountETHLiquidity1 = (ETHBalanceAfterSwap * _liquidity1Fee) / totalETHFee / 2;
        uint256 amountETHLiquidity2 = (ETHBalanceAfterSwap * _liquidity2Fee) / totalETHFee;
        uint256 amountETHOperations = ETHBalanceAfterSwap - (amountETHLiquidity1  + amountETHLiquidity2);

        Address.sendValue(payable(operationsWallet),amountETHOperations);
        Address.sendValue(payable(liquidity2Wallet),amountETHLiquidity2);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity1);
            emit SwapAndLiquify(amountToSwap, amountETHLiquidity1, 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,
            1, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            liquidity1Wallet,
            block.timestamp
        );
    }
}

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":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","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":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidity1Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidity2Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidity1Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidity2Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","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":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":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","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":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"_launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLaunchTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","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":[{"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":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity2Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidity1FeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidity2FeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidity1FeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_liquidity2FeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidity1Wallet","type":"address"},{"internalType":"address","name":"newLiquidity2Wallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setWallets","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

60a060405269d3c21bcecceda100000060075560075460085561271060075460646200002c91906200068d565b620000389190620006ad565b600955620186a060075460016200005091906200068d565b6200005c9190620006ad565b600b556040805160e081018252636261736560e01b815260016020820181905291810191909152600a606082018190526080820152600260a0820181905260c090910152600f80546001600160e81b0319166902020a0a01016261736560981b179055348015620000cc57600080fd5b506040518060400160405280600b81526020016a23b930b4b6102a37b5b2b760a91b8152506040518060400160405280600581526020016411d490525360da1b815250600062000121620004b960201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600462000179838262000774565b50600562000188828262000774565b505060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000840565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000840565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000324919062000840565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000358816001620004bd565b600160176000620003716000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080549092166001908117909255601590620003ca6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601585528382208054871660019081179091556018865284832080548816821790558784168352601995869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620004696000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004b1620004a86000546001600160a01b031690565b600754620005ad565b505062000888565b3390565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620005595760405162461bcd60e51b815260206004820152603f60248201527f477261696c3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620006055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000550565b806003600082825462000619919062000872565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620006a757620006a762000677565b92915050565b600082620006cb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006fb57607f821691505b6020821081036200071c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200067257600081815260208120601f850160051c810160208610156200074b5750805b601f850160051c820191505b818110156200076c5782815560010162000757565b505050505050565b81516001600160401b03811115620007905762000790620006d0565b620007a881620007a18454620006e6565b8462000722565b602080601f831160018114620007e05760008415620007c75750858301515b600019600386901b1c1916600185901b1785556200076c565b600085815260208120601f198616915b828110156200081157888601518255948401946001909101908401620007f0565b5085821015620008305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200085357600080fd5b81516001600160a01b03811681146200086b57600080fd5b9392505050565b80820180821115620006a757620006a762000677565b6080516136a3620008a460003960006104e101526136a36000f3fe60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c59190613105565b3480156102fc57600080fd5b506102b961030b36600461316b565b61094d565b34801561031c57600080fd5b5061033061032b366004613197565b610967565b005b34801561033e57600080fd5b50610330610b0f565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d8366004613197565b610b9c565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e3660046131b0565b610c61565b34801561041f57600080fd5b5061033061042e366004613197565b610c85565b34801561043f57600080fd5b50610330610d4e565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b5061033061100e565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa36600461316b565b611075565b3480156104bb57600080fd5b506103306104ca3660046131ff565b611097565b3480156104db57600080fd5b506103867f000000000000000000000000000000000000000000000000000000000000000081565b34801561050f57600080fd5b5061033061051e366004613238565b6111b7565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e366004613238565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b50610330611296565b34801561059a57600080fd5b506103306105a936600461325c565b61130a565b3480156105ba57600080fd5b506103306105c93660046132bd565b611619565b3480156105da57600080fd5b506103306105e93660046131ff565b6116bd565b3480156105fa57600080fd5b50610330610609366004613238565b61177f565b34801561061a57600080fd5b506103306106293660046131ff565b6118ea565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e36119ac565b3480156106a357600080fd5b506102b96106b236600461316b565b6119bb565b3480156106c357600080fd5b506102b96106d236600461316b565b611a36565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b50610330610708366004613197565b611a44565b34801561071957600080fd5b506102b9610728366004613238565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b50610330610758366004613238565b611b18565b34801561076957600080fd5b506103306107783660046131ff565b611c10565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b506103306108023660046131ff565b611cd2565b34801561081357600080fd5b506103af610822366004613300565b611d54565b34801561083357600080fd5b506103306108423660046132bd565b611d7f565b34801561085357600080fd5b50610330610862366004613238565b611dd3565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca9061332e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f69061332e565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611ebd565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b815260040161099190613368565b60405180910390fd5b47811115610a005760405162461bcd60e51b815260206004820152602d60248201527f477261696c3a2043616e6e6f742073656e64206d6f7265207468616e20636f6e60448201526c74726163742062616c616e636560981b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a4d576040519150601f19603f3d011682016040523d82523d6000602084013e610a52565b606091505b505090508015610b0b57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae9919061339d565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b395760405162461bcd60e51b815260040161099190613368565b6006805460ff60a01b1916600160a01b179055601254600003610b6c5743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bc65760405162461bcd60e51b815260040161099190613368565b6008548103610c2e5760405162461bcd60e51b815260206004820152602e60248201527f477261696c3a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c6f858285611fe1565b610c7a85858561205b565b506001949350505050565b6000546001600160a01b03163314610caf5760405162461bcd60e51b815260040161099190613368565b6009548103610d1b5760405162461bcd60e51b815260206004820152603260248201527f477261696c3a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d785760405162461bcd60e51b815260040161099190613368565b600060115411610dca5760405162461bcd60e51b815260206004820181905260248201527f477261696c3a204c61756e6368206d7573742068617665206f636375727265646044820152606401610991565b601054610100900460ff1615610e395760405162461bcd60e51b815260206004820152602e60248201527f477261696c3a204c61756e636820746f6b656e73206861766520616c7265616460448201526d1e481899595b8818db185a5b595960921b6064820152608401610991565b600560125443610e4991906133d0565b11610eab5760405162461bcd60e51b815260206004820152602c60248201527f477261696c3a204f6e6c7920636c61696d206c61756e636820746f6b656e732060448201526b0c2cce8cae440d8c2eadcc6d60a31b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f335760405162461bcd60e51b815260206004820152602e60248201527f477261696c3a2041207377617020616e64206c6971756966792068617320616c60448201526d1c9958591e481bd8d8dd5c9c995960921b6064820152608401610991565b60138054600091829055903063a9059cbb610f566000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc791906133e3565b905080156110095760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b031633146110385760405162461bcd60e51b815260040161099190613368565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b8185856110888383611d54565b6110929190613400565b611ebd565b6000546001600160a01b031633146110c15760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111575760405162461bcd60e51b815260206004820152603760248201527f477261696c3a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c7565200000000000000000006064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146111e15760405162461bcd60e51b815260040161099190613368565b6001600160a01b03811660009081526014602052604090205460ff166112495760405162461bcd60e51b815260206004820152601d60248201527f477261696c3a204163636f756e74206973206e6f7420626c636f6b65640000006044820152606401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112c05760405162461bcd60e51b815260040161099190613368565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113345760405162461bcd60e51b815260040161099190613368565b600c546001600160a01b03848116911614611429576001600160a01b0383166113af5760405162461bcd60e51b815260206004820152602760248201527f477261696c3a20546865206c69717569646974793157616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461151e576001600160a01b0382166114a45760405162461bcd60e51b815260206004820152602760248201527f477261696c3a20546865206c69717569646974793257616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614611009576001600160a01b0381166115995760405162461bcd60e51b815260206004820152602760248201527f477261696c3a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b031633146116435760405162461bcd60e51b815260040161099190613368565b611650600f84848461258c565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146116e75760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036117275760405162461bcd60e51b815260040161099190613413565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91016111ab565b6000546001600160a01b031633146117a95760405162461bcd60e51b815260040161099190613368565b6001600160a01b03811660009081526014602052604090205460ff161561181c5760405162461bcd60e51b815260206004820152602160248201527f477261696c3a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b6064820152608401610991565b60105460ff1615611898576202a3006011544261183991906133d0565b106118985760405162461bcd60e51b815260206004820152602960248201527f477261696c3a2054696d6520746f20626c6f636b206163636f756e74732068616044820152681cc8195e1c1a5c995960ba1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146119145760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036119545760405162461bcd60e51b815260040161099190613413565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111ab565b6060600580546108ca9061332e565b600033816119c98286611d54565b905083811015611a295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c7a8286868403611ebd565b60003361095b81858561205b565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b815260040161099190613368565b600b548103611ae55760405162461bcd60e51b815260206004820152603a60248201527f477261696c3a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c75650000000000006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260040161099190613368565b6006546001600160a01b0390811690821603611bb35760405162461bcd60e51b815260206004820152602a60248201527f477261696c3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c3a5760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c7a5760405162461bcd60e51b815260040161099190613413565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111ab565b6000546001600160a01b03163314611cfc5760405162461bcd60e51b815260040161099190613368565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111ab565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611da95760405162461bcd60e51b815260040161099190613368565b611db6600f848484612743565b6040516b62617365466565732d42757960a01b8152600c0161166a565b6000546001600160a01b03163314611dfd5760405162461bcd60e51b815260040161099190613368565b6001600160a01b038116611e625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f1f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611f805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611fed8484611d54565b9050600019811461205557818110156120485760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b6120558484848403611ebd565b50505050565b6001600160a01b0383166120815760405162461bcd60e51b815260040161099190613464565b6001600160a01b0382166120a75760405162461bcd60e51b8152600401610991906134a9565b806000036120bb57611009838360006128f7565b6001600160a01b03831660009081526015602052604090205460ff161580156120fd57506001600160a01b03821660009081526015602052604090205460ff16155b156123a357600654600160a01b900460ff166121695760405162461bcd60e51b815260206004820152602560248201527f477261696c3a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff16156121ce5760405162461bcd60e51b815260206004820152601960248201527811dc985a5b0e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122335760405162461bcd60e51b815260206004820152601960248201527811dc985a5b0e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff1615801561227557506001600160a01b03831660009081526018602052604090205460ff16155b156122e2576008548111156122e25760405162461bcd60e51b815260206004820152602d60248201527f477261696c3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff166123a35760095481612325846001600160a01b031660009081526001602052604090205490565b61232f9190613400565b11156123a35760405162461bcd60e51b815260206004820152603a60248201527f477261696c3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608401610991565b6001600160a01b038084166000908152601a60205260408082205492851682529020546123d89160ff90811691168585612a28565b600b543060009081526001602052604090205460065491111590600160a01b900460ff1680156124055750805b80156124145750600a5460ff16155b801561242b5750601b546301000000900460ff1615155b801561244f57506001600160a01b0383166000908152601a602052604090205460ff165b1561247457600a805460ff19166001179055612469612c50565b600a805460ff191690555b600a5460009060ff161580156124935750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff16806124d557506001600160a01b03841660009081526017602052604090205460ff165b156124de575060005b8080156124f65750601b546301000000900460ff1615155b1561257a57601b54600090606490612518906301000000900460ff16866134ec565b6125229190613519565b905061252e81856133d0565b93506000601154118015612550575060056012544361254d91906133d0565b11155b1561256d5780601360008282546125679190613400565b90915550505b6125788630836128f7565b505b6125858585856128f7565b5050505050565b835460ff848116600160c01b909204161461261c57604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b83048116929087169160008051602061364e833981519152916125fd9160489190911b9061352d565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b90920416146126ac57604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b83048116929086169160008051602061364e8339815191529161268d9160489190911b9061352d565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461205557604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b83048116929085169160008051602061364e8339815191529161271d9160489190911b9061352d565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b90920416146127d257604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b83048116929087169160008051602061364e833981519152916127b39160489190911b9061352d565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b909204161461286157604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b83048116929086169160008051602061364e833981519152916128429160489190911b9061352d565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461205557604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b83048116929085169160008051602061364e833981519152916128d19160489190911b9061352d565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b03831661291d5760405162461bcd60e51b815260040161099190613464565b6001600160a01b0382166129435760405162461bcd60e51b8152600401610991906134a9565b6001600160a01b038316600090815260016020526040902054818110156129bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a1b9086815260200190565b60405180910390a3612055565b601b805462ffffff191690558315612ab85760105460ff168015612a5a5750600560125442612a5791906133d0565b11155b15612a7157601b805460ff19166064179055612ab8565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612b0557600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612b11575083155b8015612b5757506001600160a01b03821660009081526016602052604090205460ff1680612b5757506001600160a01b03811660009081526016602052604090205460ff165b15612ba357600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612bc391610100820481169116613544565b612bcd9190613544565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612c819116866134ec565b612c8b9190613519565b612c959190613519565b90506000612ca382856133d0565b9050612cae81612de5565b6000612cba84476133d0565b601b54909150600090612cd29060029060ff1661355d565b601b54612ce991906301000000900460ff1661357f565b601b5460ff91821692506000916002918491612d069116866134ec565b612d109190613519565b612d1a9190613519565b601b549091506000908390612d3790610100900460ff16866134ec565b612d419190613519565b90506000612d4f8284613400565b612d5990866133d0565b600e54909150612d72906001600160a01b031682612f3f565b600d54612d88906001600160a01b031683612f3f565b8615612dda57612d988784613058565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e1a57612e1a613598565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e97919061339d565b81600181518110612eaa57612eaa613598565b6001600160a01b039283166020918202929092010152600654612ed09130911684611ebd565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f099085906001908690309042906004016135ae565b600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050505050565b80471015612f8f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b50509050806110095760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130709030906001600160a01b031684611ebd565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156130e0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612585919061361f565b600060208083528351808285015260005b8181101561313257858101830151858201604001528201613116565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461316857600080fd5b50565b6000806040838503121561317e57600080fd5b823561318981613153565b946020939093013593505050565b6000602082840312156131a957600080fd5b5035919050565b6000806000606084860312156131c557600080fd5b83356131d081613153565b925060208401356131e081613153565b929592945050506040919091013590565b801515811461316857600080fd5b6000806040838503121561321257600080fd5b823561321d81613153565b9150602083013561322d816131f1565b809150509250929050565b60006020828403121561324a57600080fd5b813561325581613153565b9392505050565b60008060006060848603121561327157600080fd5b833561327c81613153565b9250602084013561328c81613153565b9150604084013561329c81613153565b809150509250925092565b803560ff811681146132b857600080fd5b919050565b6000806000606084860312156132d257600080fd5b6132db846132a7565b92506132e9602085016132a7565b91506132f7604085016132a7565b90509250925092565b6000806040838503121561331357600080fd5b823561331e81613153565b9150602083013561322d81613153565b600181811c9082168061334257607f821691505b60208210810361336257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156133af57600080fd5b815161325581613153565b634e487b7160e01b600052601160045260246000fd5b81810381811115610961576109616133ba565b6000602082840312156133f557600080fd5b8151613255816131f1565b80820180821115610961576109616133ba565b60208082526031908201527f477261696c3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610961576109616133ba565b634e487b7160e01b600052601260045260246000fd5b60008261352857613528613503565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610961576109616133ba565b600060ff83168061357057613570613503565b8060ff84160491505092915050565b60ff8281168282160390811115610961576109616133ba565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135fe5784516001600160a01b0316835293830193918301916001016135d9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561363457600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea2646970667358221220d5d35ad6098e075013e433ebaf9947d48b7bb89eddfe4497c1ef2a2690afb25464736f6c63430008110033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c59190613105565b3480156102fc57600080fd5b506102b961030b36600461316b565b61094d565b34801561031c57600080fd5b5061033061032b366004613197565b610967565b005b34801561033e57600080fd5b50610330610b0f565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d8366004613197565b610b9c565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e3660046131b0565b610c61565b34801561041f57600080fd5b5061033061042e366004613197565b610c85565b34801561043f57600080fd5b50610330610d4e565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b5061033061100e565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa36600461316b565b611075565b3480156104bb57600080fd5b506103306104ca3660046131ff565b611097565b3480156104db57600080fd5b506103867f0000000000000000000000005cb9f06a68dd51b50f02f52f7852b03d5960e22181565b34801561050f57600080fd5b5061033061051e366004613238565b6111b7565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e366004613238565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b50610330611296565b34801561059a57600080fd5b506103306105a936600461325c565b61130a565b3480156105ba57600080fd5b506103306105c93660046132bd565b611619565b3480156105da57600080fd5b506103306105e93660046131ff565b6116bd565b3480156105fa57600080fd5b50610330610609366004613238565b61177f565b34801561061a57600080fd5b506103306106293660046131ff565b6118ea565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e36119ac565b3480156106a357600080fd5b506102b96106b236600461316b565b6119bb565b3480156106c357600080fd5b506102b96106d236600461316b565b611a36565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b50610330610708366004613197565b611a44565b34801561071957600080fd5b506102b9610728366004613238565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b50610330610758366004613238565b611b18565b34801561076957600080fd5b506103306107783660046131ff565b611c10565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b506103306108023660046131ff565b611cd2565b34801561081357600080fd5b506103af610822366004613300565b611d54565b34801561083357600080fd5b506103306108423660046132bd565b611d7f565b34801561085357600080fd5b50610330610862366004613238565b611dd3565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca9061332e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f69061332e565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611ebd565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b815260040161099190613368565b60405180910390fd5b47811115610a005760405162461bcd60e51b815260206004820152602d60248201527f477261696c3a2043616e6e6f742073656e64206d6f7265207468616e20636f6e60448201526c74726163742062616c616e636560981b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a4d576040519150601f19603f3d011682016040523d82523d6000602084013e610a52565b606091505b505090508015610b0b57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae9919061339d565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b395760405162461bcd60e51b815260040161099190613368565b6006805460ff60a01b1916600160a01b179055601254600003610b6c5743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bc65760405162461bcd60e51b815260040161099190613368565b6008548103610c2e5760405162461bcd60e51b815260206004820152602e60248201527f477261696c3a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c6f858285611fe1565b610c7a85858561205b565b506001949350505050565b6000546001600160a01b03163314610caf5760405162461bcd60e51b815260040161099190613368565b6009548103610d1b5760405162461bcd60e51b815260206004820152603260248201527f477261696c3a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d785760405162461bcd60e51b815260040161099190613368565b600060115411610dca5760405162461bcd60e51b815260206004820181905260248201527f477261696c3a204c61756e6368206d7573742068617665206f636375727265646044820152606401610991565b601054610100900460ff1615610e395760405162461bcd60e51b815260206004820152602e60248201527f477261696c3a204c61756e636820746f6b656e73206861766520616c7265616460448201526d1e481899595b8818db185a5b595960921b6064820152608401610991565b600560125443610e4991906133d0565b11610eab5760405162461bcd60e51b815260206004820152602c60248201527f477261696c3a204f6e6c7920636c61696d206c61756e636820746f6b656e732060448201526b0c2cce8cae440d8c2eadcc6d60a31b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f335760405162461bcd60e51b815260206004820152602e60248201527f477261696c3a2041207377617020616e64206c6971756966792068617320616c60448201526d1c9958591e481bd8d8dd5c9c995960921b6064820152608401610991565b60138054600091829055903063a9059cbb610f566000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc791906133e3565b905080156110095760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b031633146110385760405162461bcd60e51b815260040161099190613368565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b8185856110888383611d54565b6110929190613400565b611ebd565b6000546001600160a01b031633146110c15760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111575760405162461bcd60e51b815260206004820152603760248201527f477261696c3a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c7565200000000000000000006064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146111e15760405162461bcd60e51b815260040161099190613368565b6001600160a01b03811660009081526014602052604090205460ff166112495760405162461bcd60e51b815260206004820152601d60248201527f477261696c3a204163636f756e74206973206e6f7420626c636f6b65640000006044820152606401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112c05760405162461bcd60e51b815260040161099190613368565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113345760405162461bcd60e51b815260040161099190613368565b600c546001600160a01b03848116911614611429576001600160a01b0383166113af5760405162461bcd60e51b815260206004820152602760248201527f477261696c3a20546865206c69717569646974793157616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461151e576001600160a01b0382166114a45760405162461bcd60e51b815260206004820152602760248201527f477261696c3a20546865206c69717569646974793257616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614611009576001600160a01b0381166115995760405162461bcd60e51b815260206004820152602760248201527f477261696c3a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b031633146116435760405162461bcd60e51b815260040161099190613368565b611650600f84848461258c565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146116e75760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036117275760405162461bcd60e51b815260040161099190613413565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91016111ab565b6000546001600160a01b031633146117a95760405162461bcd60e51b815260040161099190613368565b6001600160a01b03811660009081526014602052604090205460ff161561181c5760405162461bcd60e51b815260206004820152602160248201527f477261696c3a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b6064820152608401610991565b60105460ff1615611898576202a3006011544261183991906133d0565b106118985760405162461bcd60e51b815260206004820152602960248201527f477261696c3a2054696d6520746f20626c6f636b206163636f756e74732068616044820152681cc8195e1c1a5c995960ba1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146119145760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036119545760405162461bcd60e51b815260040161099190613413565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111ab565b6060600580546108ca9061332e565b600033816119c98286611d54565b905083811015611a295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c7a8286868403611ebd565b60003361095b81858561205b565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b815260040161099190613368565b600b548103611ae55760405162461bcd60e51b815260206004820152603a60248201527f477261696c3a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c75650000000000006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260040161099190613368565b6006546001600160a01b0390811690821603611bb35760405162461bcd60e51b815260206004820152602a60248201527f477261696c3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c3a5760405162461bcd60e51b815260040161099190613368565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611c7a5760405162461bcd60e51b815260040161099190613413565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111ab565b6000546001600160a01b03163314611cfc5760405162461bcd60e51b815260040161099190613368565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111ab565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611da95760405162461bcd60e51b815260040161099190613368565b611db6600f848484612743565b6040516b62617365466565732d42757960a01b8152600c0161166a565b6000546001600160a01b03163314611dfd5760405162461bcd60e51b815260040161099190613368565b6001600160a01b038116611e625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f1f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611f805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611fed8484611d54565b9050600019811461205557818110156120485760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b6120558484848403611ebd565b50505050565b6001600160a01b0383166120815760405162461bcd60e51b815260040161099190613464565b6001600160a01b0382166120a75760405162461bcd60e51b8152600401610991906134a9565b806000036120bb57611009838360006128f7565b6001600160a01b03831660009081526015602052604090205460ff161580156120fd57506001600160a01b03821660009081526015602052604090205460ff16155b156123a357600654600160a01b900460ff166121695760405162461bcd60e51b815260206004820152602560248201527f477261696c3a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff16156121ce5760405162461bcd60e51b815260206004820152601960248201527811dc985a5b0e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122335760405162461bcd60e51b815260206004820152601960248201527811dc985a5b0e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff1615801561227557506001600160a01b03831660009081526018602052604090205460ff16155b156122e2576008548111156122e25760405162461bcd60e51b815260206004820152602d60248201527f477261696c3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff166123a35760095481612325846001600160a01b031660009081526001602052604090205490565b61232f9190613400565b11156123a35760405162461bcd60e51b815260206004820152603a60248201527f477261696c3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608401610991565b6001600160a01b038084166000908152601a60205260408082205492851682529020546123d89160ff90811691168585612a28565b600b543060009081526001602052604090205460065491111590600160a01b900460ff1680156124055750805b80156124145750600a5460ff16155b801561242b5750601b546301000000900460ff1615155b801561244f57506001600160a01b0383166000908152601a602052604090205460ff165b1561247457600a805460ff19166001179055612469612c50565b600a805460ff191690555b600a5460009060ff161580156124935750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff16806124d557506001600160a01b03841660009081526017602052604090205460ff165b156124de575060005b8080156124f65750601b546301000000900460ff1615155b1561257a57601b54600090606490612518906301000000900460ff16866134ec565b6125229190613519565b905061252e81856133d0565b93506000601154118015612550575060056012544361254d91906133d0565b11155b1561256d5780601360008282546125679190613400565b90915550505b6125788630836128f7565b505b6125858585856128f7565b5050505050565b835460ff848116600160c01b909204161461261c57604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b83048116929087169160008051602061364e833981519152916125fd9160489190911b9061352d565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b90920416146126ac57604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b83048116929086169160008051602061364e8339815191529161268d9160489190911b9061352d565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461205557604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b83048116929085169160008051602061364e8339815191529161271d9160489190911b9061352d565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b90920416146127d257604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b83048116929087169160008051602061364e833981519152916127b39160489190911b9061352d565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b909204161461286157604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b83048116929086169160008051602061364e833981519152916128429160489190911b9061352d565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461205557604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b83048116929085169160008051602061364e833981519152916128d19160489190911b9061352d565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b03831661291d5760405162461bcd60e51b815260040161099190613464565b6001600160a01b0382166129435760405162461bcd60e51b8152600401610991906134a9565b6001600160a01b038316600090815260016020526040902054818110156129bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a1b9086815260200190565b60405180910390a3612055565b601b805462ffffff191690558315612ab85760105460ff168015612a5a5750600560125442612a5791906133d0565b11155b15612a7157601b805460ff19166064179055612ab8565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612b0557600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612b11575083155b8015612b5757506001600160a01b03821660009081526016602052604090205460ff1680612b5757506001600160a01b03811660009081526016602052604090205460ff165b15612ba357600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612bc391610100820481169116613544565b612bcd9190613544565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612c819116866134ec565b612c8b9190613519565b612c959190613519565b90506000612ca382856133d0565b9050612cae81612de5565b6000612cba84476133d0565b601b54909150600090612cd29060029060ff1661355d565b601b54612ce991906301000000900460ff1661357f565b601b5460ff91821692506000916002918491612d069116866134ec565b612d109190613519565b612d1a9190613519565b601b549091506000908390612d3790610100900460ff16866134ec565b612d419190613519565b90506000612d4f8284613400565b612d5990866133d0565b600e54909150612d72906001600160a01b031682612f3f565b600d54612d88906001600160a01b031683612f3f565b8615612dda57612d988784613058565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e1a57612e1a613598565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e97919061339d565b81600181518110612eaa57612eaa613598565b6001600160a01b039283166020918202929092010152600654612ed09130911684611ebd565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f099085906001908690309042906004016135ae565b600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050505050565b80471015612f8f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b50509050806110095760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130709030906001600160a01b031684611ebd565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156130e0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612585919061361f565b600060208083528351808285015260005b8181101561313257858101830151858201604001528201613116565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461316857600080fd5b50565b6000806040838503121561317e57600080fd5b823561318981613153565b946020939093013593505050565b6000602082840312156131a957600080fd5b5035919050565b6000806000606084860312156131c557600080fd5b83356131d081613153565b925060208401356131e081613153565b929592945050506040919091013590565b801515811461316857600080fd5b6000806040838503121561321257600080fd5b823561321d81613153565b9150602083013561322d816131f1565b809150509250929050565b60006020828403121561324a57600080fd5b813561325581613153565b9392505050565b60008060006060848603121561327157600080fd5b833561327c81613153565b9250602084013561328c81613153565b9150604084013561329c81613153565b809150509250925092565b803560ff811681146132b857600080fd5b919050565b6000806000606084860312156132d257600080fd5b6132db846132a7565b92506132e9602085016132a7565b91506132f7604085016132a7565b90509250925092565b6000806040838503121561331357600080fd5b823561331e81613153565b9150602083013561322d81613153565b600181811c9082168061334257607f821691505b60208210810361336257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156133af57600080fd5b815161325581613153565b634e487b7160e01b600052601160045260246000fd5b81810381811115610961576109616133ba565b6000602082840312156133f557600080fd5b8151613255816131f1565b80820180821115610961576109616133ba565b60208082526031908201527f477261696c3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610961576109616133ba565b634e487b7160e01b600052601260045260246000fd5b60008261352857613528613503565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff8181168382160190811115610961576109616133ba565b600060ff83168061357057613570613503565b8060ff84160491505092915050565b60ff8281168282160390811115610961576109616133ba565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135fe5784516001600160a01b0316835293830193918301916001016135d9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561363457600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea2646970667358221220d5d35ad6098e075013e433ebaf9947d48b7bb89eddfe4497c1ef2a2690afb25464736f6c63430008110033

Deployed Bytecode Sourcemap

12438:19508:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12703:28;;;;;;;;;;-1:-1:-1;12703:28:0;;;;-1:-1:-1;;;12703:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12703:28:0;;;;;;;;7103:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8034:201::-;;;;;;;;;;-1:-1:-1;8034:201:0;;;;;:::i;:::-;;:::i;23851:341::-;;;;;;;;;;-1:-1:-1;23851:341:0;;;;;:::i;:::-;;:::i;:::-;;17159:321;;;;;;;;;;;;;:::i;13649:32::-;;;;;;;;;;-1:-1:-1;13649:32:0;;;;;;;;;;;12517:30;;;;;;;;;;-1:-1:-1;12517:30:0;;;;-1:-1:-1;;;;;12517:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;12517:30:0;1400:218:1;7423:108:0;;;;;;;;;;-1:-1:-1;7511:12:0;;7423:108;;;1769:25:1;;;1757:2;1742:18;7423:108:0;1623:177:1;22250:269:0;;;;;;;;;;-1:-1:-1;22250:269:0;;;;;:::i;:::-;;:::i;13773:27::-;;;;;;;;;;;;;;;;8245:295;;;;;;;;;;-1:-1:-1;8245:295:0;;;;;:::i;:::-;;:::i;22525:274::-;;;;;;;;;;-1:-1:-1;22525:274:0;;;;;:::i;:::-;;:::i;23134:711::-;;;;;;;;;;;;;:::i;7322:93::-;;;;;;;;;;-1:-1:-1;7322:93:0;;7405:2;2408:36:1;;2396:2;2381:18;7322:93:0;2266:184:1;17486:139:0;;;;;;;;;;;;;:::i;12740:49::-;;;;;;;;;;;;;;;;8548:238;;;;;;;;;;-1:-1:-1;8548:238:0;;;;;:::i;:::-;;:::i;18806:345::-;;;;;;;;;;-1:-1:-1;18806:345:0;;;;;:::i;:::-;;:::i;12554:38::-;;;;;;;;;;;;;;;18570:230;;;;;;;;;;-1:-1:-1;18570:230:0;;;;;:::i;:::-;;:::i;13156:31::-;;;;;;;;;;-1:-1:-1;13156:31:0;;;;-1:-1:-1;;;;;13156:31:0;;;7539:127;;;;;;;;;;-1:-1:-1;7539:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7640:18:0;7613:7;7640:18;;;:9;:18;;;;;;;7539:127;6290:148;;;;;;;;;;;;;:::i;20166:1065::-;;;;;;;;;;-1:-1:-1;20166:1065:0;;;;;:::i;:::-;;:::i;21594:345::-;;;;;;;;;;-1:-1:-1;21594:345:0;;;;;:::i;:::-;;:::i;19823:337::-;;;;;;;;;;-1:-1:-1;19823:337:0;;;;;:::i;:::-;;:::i;18175:389::-;;;;;;;;;;-1:-1:-1;18175:389:0;;;;;:::i;:::-;;:::i;19463:354::-;;;;;;;;;;-1:-1:-1;19463:354:0;;;;;:::i;:::-;;:::i;12851:42::-;;;;;;;;;;;;;;;;6076:79;;;;;;;;;;-1:-1:-1;6114:7:0;6141:6;-1:-1:-1;;;;;6141:6:0;6076:79;;13118:31;;;;;;;;;;-1:-1:-1;13118:31:0;;;;-1:-1:-1;;;;;13118:31:0;;;7211:104;;;;;;;;;;;;;:::i;8794:436::-;;;;;;;;;;-1:-1:-1;8794:436:0;;;;;:::i;:::-;;:::i;7674:193::-;;;;;;;;;;-1:-1:-1;7674:193:0;;;;;:::i;:::-;;:::i;12944:60::-;;;;;;;;;;;;;;;;22805:323;;;;;;;;;;-1:-1:-1;22805:323:0;;;;;:::i;:::-;;:::i;14199:57::-;;;;;;;;;;-1:-1:-1;14199:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21945:299;;;;;;;;;;-1:-1:-1;21945:299:0;;;;;:::i;:::-;;:::i;19157:300::-;;;;;;;;;;-1:-1:-1;19157:300:0;;;;;:::i;:::-;;:::i;24216:170::-;;;;;;;;;;-1:-1:-1;24303:5:0;:24;;-1:-1:-1;;;24303:24:0;;;;;-1:-1:-1;;;24328:24:0;;;;;-1:-1:-1;;;24353:24:0;;;;24216:170;;;;4667:4:1;4655:17;;;4637:36;;4709:17;;;4704:2;4689:18;;4682:45;4763:17;;4743:18;;;4736:45;;;;4625:2;4610:18;24216:170:0;4447:340:1;13042:67:0;;;;;;;;;;;;;;;;17952:217;;;;;;;;;;-1:-1:-1;17952:217:0;;;;;:::i;:::-;;:::i;7875:151::-;;;;;;;;;;-1:-1:-1;7875:151:0;;;;;:::i;:::-;;:::i;21255:333::-;;;;;;;;;;-1:-1:-1;21255:333:0;;;;;:::i;:::-;;:::i;6446:244::-;;;;;;;;;;-1:-1:-1;6446:244:0;;;;;:::i;:::-;;:::i;13194:31::-;;;;;;;;;;-1:-1:-1;13194:31:0;;;;-1:-1:-1;;;;;13194:31:0;;;24392:174;;;;;;;;;;-1:-1:-1;24480:5:0;:25;;-1:-1:-1;;;24480:25:0;;;;;-1:-1:-1;;;24506:25:0;;;;;-1:-1:-1;;;24532:25:0;;;;24392:174;;7103:100;7157:13;7190:5;7183:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7103:100;:::o;8034:201::-;8117:4;5489:10;8173:32;5489:10;8189:7;8198:6;8173:8;:32::i;:::-;8223:4;8216:11;;;8034:201;;;;;:::o;23851:341::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;;;;;;;;;23941:21:::1;23931:6;:31;;23923:89;;;::::0;-1:-1:-1;;;23923:89:0;;6133:2:1;23923:89:0::1;::::0;::::1;6115:21:1::0;6172:2;6152:18;;;6145:30;6211:34;6191:18;;;6184:62;-1:-1:-1;;;6262:18:1;;;6255:43;6315:19;;23923:89:0::1;5931:409:1::0;23923:89:0::1;24024:12;6141:6:::0;;24042:42:::1;::::0;-1:-1:-1;;;;;6141:6:0;;;;24072;;24024:12;24042:42;24024:12;24042:42;24072:6;6141;24042:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24023:61;;;24099:7;24095:90;;;24142:15;::::0;:22:::1;::::0;;-1:-1:-1;;;24142:22:0;;;;24128:45:::1;::::0;-1:-1:-1;;;;;24142:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24128:45;::::0;;-1:-1:-1;;;;;7003:32:1;;;6985:51;;7067:2;7052:18;;7045:34;;;6958:18;24128:45:0::1;;;;;;;24095:90;23912:280;23851:341:::0;:::o;17159:321::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;17216:16:::1;:23:::0;;-1:-1:-1;;;;17216:23:0::1;-1:-1:-1::0;;;17216:23:0::1;::::0;;17253:18:::1;::::0;17216:23;17253;17250:175:::1;;17314:12;17293:18;:33:::0;17365:15:::1;17341:21;:39:::0;17395:11:::1;:18:::0;;-1:-1:-1;;17395:18:0::1;-1:-1:-1::0;17395:18:0::1;::::0;;17250:175:::1;17440:32;::::0;17466:5:::1;::::0;17440:32;;::::1;::::0;17466:5;;17440:32:::1;17159:321::o:0;22250:269::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;22351:11:::1;;22339:8;:23:::0;22331:82:::1;;;::::0;-1:-1:-1;;;22331:82:0;;7292:2:1;22331:82:0::1;::::0;::::1;7274:21:1::0;7331:2;7311:18;;;7304:30;7370:34;7350:18;;;7343:62;-1:-1:-1;;;7421:18:1;;;7414:44;7475:19;;22331:82:0::1;7090:410:1::0;22331:82:0::1;22466:11;::::0;22429:49:::1;::::0;22456:8;;22429:49:::1;::::0;;;::::1;22489:11;:22:::0;22250:269::o;8245:295::-;8376:4;5489:10;8434:38;8450:4;5489:10;8465:6;8434:15;:38::i;:::-;8483:27;8493:4;8499:2;8503:6;8483:9;:27::i;:::-;-1:-1:-1;8528:4:0;;8245:295;-1:-1:-1;;;;8245:295:0:o;22525:274::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;22621:15:::1;;22609:8;:27:::0;22601:89:::1;;;::::0;-1:-1:-1;;;22601:89:0;;7707:2:1;22601:89:0::1;::::0;::::1;7689:21:1::0;7746:2;7726:18;;;7719:30;7785:34;7765:18;;;7758:62;-1:-1:-1;;;7836:18:1;;;7829:48;7894:19;;22601:89:0::1;7505:414:1::0;22601:89:0::1;22738:15;::::0;22706:48:::1;::::0;22728:8;;22706:48:::1;::::0;;;::::1;22765:15;:26:::0;22525:274::o;23134:711::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;23219:1:::1;23195:21;;:25;23187:70;;;::::0;-1:-1:-1;;;23187:70:0;;8126:2:1;23187:70:0::1;::::0;::::1;8108:21:1::0;;;8145:18;;;8138:30;8204:34;8184:18;;;8177:62;8256:18;;23187:70:0::1;7924:356:1::0;23187:70:0::1;23271:20;::::0;::::1;::::0;::::1;;;23270:21;23262:80;;;::::0;-1:-1:-1;;;23262:80:0;;8487:2:1;23262:80:0::1;::::0;::::1;8469:21:1::0;8526:2;8506:18;;;8499:30;8565:34;8545:18;;;8538:62;-1:-1:-1;;;8616:18:1;;;8609:44;8670:19;;23262:80:0::1;8285:410:1::0;23262:80:0::1;23391:1;23370:18;;23355:12;:33;;;;:::i;:::-;:37;23347:94;;;::::0;-1:-1:-1;;;23347:94:0;;9167:2:1;23347:94:0::1;::::0;::::1;9149:21:1::0;9206:2;9186:18;;;9179:30;9245:34;9225:18;;;9218:62;-1:-1:-1;;;9296:18:1;;;9289:42;9348:19;;23347:94:0::1;8965:408:1::0;23347:94:0::1;23487:4;23446:20;7640:18:::0;;;:9;:18;;;;;;23498:20:::1;:27:::0;;-1:-1:-1;;23498:27:0::1;;;::::0;;23538:12:::1;::::0;-1:-1:-1;;23538:28:0::1;23530:87;;;::::0;-1:-1:-1;;;23530:87:0;;9580:2:1;23530:87:0::1;::::0;::::1;9562:21:1::0;9619:2;9599:18;;;9592:30;9658:34;9638:18;;;9631:62;-1:-1:-1;;;9709:18:1;;;9702:44;9763:19;;23530:87:0::1;9378:410:1::0;23530:87:0::1;23639:12;::::0;;23622:14:::1;23656:16:::0;;;;23639:12;23715:4:::1;23700:30;23731:7;6114::::0;6141:6;-1:-1:-1;;;;;6141:6:0;;6076:79;23731:7:::1;23700:47;::::0;-1:-1:-1;;;;;;23700:47:0::1;::::0;;;;;;-1:-1:-1;;;;;7003:32:1;;;23700:47:0::1;::::0;::::1;6985:51:1::0;7052:18;;;7045:34;;;6958:18;;23700:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23683:64;;23762:7;23758:80;;;23790:36;::::0;;23812:4:::1;6985:51:1::0;;7067:2;7052:18;;7045:34;;;23790:36:0::1;::::0;6958:18:1;23790:36:0::1;;;;;;;23758:80;23182:663;;;23134:711::o:0;17486:139::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;17545:16:::1;:24:::0;;-1:-1:-1;;;;17545:24:0::1;::::0;;17585:32:::1;::::0;17545:24;;17564:5:::1;::::0;17585:32:::1;::::0;17564:5;;17585:32:::1;17486:139::o:0;8548:238::-;8636:4;5489:10;8692:64;5489:10;8708:7;8745:10;8717:25;5489:10;8708:7;8717:9;:25::i;:::-;:38;;;;:::i;:::-;8692:8;:64::i;18806:345::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18914:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;18906:114:::1;;;::::0;-1:-1:-1;;;18906:114:0;;10375:2:1;18906:114:0::1;::::0;::::1;10357:21:1::0;10414:2;10394:18;;;10387:30;10453:34;10433:18;;;10426:62;10524:25;10504:18;;;10497:53;10567:19;;18906:114:0::1;10173:419:1::0;18906:114:0::1;-1:-1:-1::0;;;;;19031:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;19031:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19093:50;;154:41:1;;;19093:50:0::1;::::0;127:18:1;19093:50:0::1;;;;;;;;18806:345:::0;;:::o;18570:230::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18649:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18641:61;;;::::0;-1:-1:-1;;;18641:61:0;;10799:2:1;18641:61:0::1;::::0;::::1;10781:21:1::0;10838:2;10818:18;;;10811:30;10877:31;10857:18;;;10850:59;10926:18;;18641:61:0::1;10597:353:1::0;18641:61:0::1;-1:-1:-1::0;;;;;18713:19:0;::::1;18735:5;18713:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;18713:27:0::1;::::0;;18756:36;18735:5;;18713:19;18756:36:::1;::::0;18735:5;;18756:36:::1;18570:230:::0;:::o;6290:148::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;6397:1:::1;6381:6:::0;;6360:40:::1;::::0;-1:-1:-1;;;;;6381:6:0;;::::1;::::0;6360:40:::1;::::0;6397:1;;6360:40:::1;6428:1;6411:19:::0;;-1:-1:-1;;;;;;6411:19:0::1;::::0;;6290:148::o;20166:1065::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;20305:16:::1;::::0;-1:-1:-1;;;;;20305:39:0;;::::1;:16:::0;::::1;:39;20301:301;;-1:-1:-1::0;;;;;20369:33:0;::::1;20361:85;;;::::0;-1:-1:-1;;;20361:85:0;;11157:2:1;20361:85:0::1;::::0;::::1;11139:21:1::0;11196:2;11176:18;;;11169:30;11235:34;11215:18;;;11208:62;-1:-1:-1;;;11286:18:1;;;11279:37;11333:19;;20361:85:0::1;10955:403:1::0;20361:85:0::1;20520:16;::::0;20466:71:::1;::::0;-1:-1:-1;;;11565:31:1;;-1:-1:-1;;;;;20520:16:0;;::::1;::::0;20466:71;::::1;::::0;11621:2:1;11612:12;20466:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20552:16;:38:::0;;-1:-1:-1;;;;;;20552:38:0::1;-1:-1:-1::0;;;;;20552:38:0;::::1;;::::0;;20301:301:::1;20616:16;::::0;-1:-1:-1;;;;;20616:39:0;;::::1;:16:::0;::::1;:39;20612:301;;-1:-1:-1::0;;;;;20680:33:0;::::1;20672:85;;;::::0;-1:-1:-1;;;20672:85:0;;11837:2:1;20672:85:0::1;::::0;::::1;11819:21:1::0;11876:2;11856:18;;;11849:30;11915:34;11895:18;;;11888:62;-1:-1:-1;;;11966:18:1;;;11959:37;12013:19;;20672:85:0::1;11635:403:1::0;20672:85:0::1;20831:16;::::0;20777:71:::1;::::0;-1:-1:-1;;;12245:31:1;;-1:-1:-1;;;;;20831:16:0;;::::1;::::0;20777:71;::::1;::::0;12301:2:1;12292:12;20777:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20863:16;:38:::0;;-1:-1:-1;;;;;;20863:38:0::1;-1:-1:-1::0;;;;;20863:38:0;::::1;;::::0;;20612:301:::1;20927:16;::::0;-1:-1:-1;;;;;20927:39:0;;::::1;:16:::0;::::1;:39;20923:301;;-1:-1:-1::0;;;;;20991:33:0;::::1;20983:85;;;::::0;-1:-1:-1;;;20983:85:0;;12517:2:1;20983:85:0::1;::::0;::::1;12499:21:1::0;12556:2;12536:18;;;12529:30;12595:34;12575:18;;;12568:62;-1:-1:-1;;;12646:18:1;;;12639:37;12693:19;;20983:85:0::1;12315:403:1::0;20983:85:0::1;21142:16;::::0;21088:71:::1;::::0;-1:-1:-1;;;12925:31:1;;-1:-1:-1;;;;;21142:16:0;;::::1;::::0;21088:71;::::1;::::0;12981:2:1;12972:12;21088:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21174:16;:38:::0;;-1:-1:-1;;;;;21174:38:0;::::1;-1:-1:-1::0;;;;;;21174:38:0;;::::1;;::::0;;20166:1065;;;:::o;21594:345::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;21733:93:::1;21757:5;21763:20;21784;21805;21733:23;:93::i;:::-;21842:89;::::0;-1:-1:-1;;;13197:28:1;;13250:2;13241:12;21842:89:0::1;;::::0;;;;;::::1;::::0;;4667:4:1;4655:17;;;4637:36;;4709:17;;;4704:2;4689:18;;4682:45;4763:17;;4743:18;;;4736:45;21842:89:0;;;;::::1;::::0;;;;;4625:2:1;21842:89:0;;::::1;21594:345:::0;;;:::o;19823:337::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19928:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;19920:111:::1;;;;-1:-1:-1::0;;;19920:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20042:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20042:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20107:45;;154:41:1;;;20107:45:0::1;::::0;127:18:1;20107:45:0::1;14:187:1::0;18175:389:0;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18253:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18252:20;18244:66;;;::::0;-1:-1:-1;;;18244:66:0;;13884:2:1;18244:66:0::1;::::0;::::1;13866:21:1::0;13923:2;13903:18;;;13896:30;13962:34;13942:18;;;13935:62;-1:-1:-1;;;14013:18:1;;;14006:31;14054:19;;18244:66:0::1;13682:397:1::0;18244:66:0::1;18325:11;::::0;::::1;;18321:148;;;18405:6;18380:21;;18362:15;:39;;;;:::i;:::-;18361:50;18353:104;;;::::0;-1:-1:-1;;;18353:104:0;;14286:2:1;18353:104:0::1;::::0;::::1;14268:21:1::0;14325:2;14305:18;;;14298:30;14364:34;14344:18;;;14337:62;-1:-1:-1;;;14415:18:1;;;14408:39;14464:19;;18353:104:0::1;14084:405:1::0;18353:104:0::1;-1:-1:-1::0;;;;;18479:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;18479:26:0::1;18501:4;18479:26:::0;;::::1;::::0;;;18521:35;;18501:4;;18479:19;18521:35:::1;::::0;::::1;18175:389:::0;:::o;19463:354::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19573:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19565:116:::1;;;;-1:-1:-1::0;;;19565:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19692:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19692:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19762:47;;154:41:1;;;19762:47:0::1;::::0;127:18:1;19762:47:0::1;14:187:1::0;7211:104:0;7267:13;7300:7;7293:14;;;;;:::i;8794:436::-;8887:4;5489:10;8887:4;8970:25;5489:10;8987:7;8970:9;:25::i;:::-;8943:52;;9034:15;9014:16;:35;;9006:85;;;;-1:-1:-1;;;9006:85:0;;14696:2:1;9006:85:0;;;14678:21:1;14735:2;14715:18;;;14708:30;14774:34;14754:18;;;14747:62;-1:-1:-1;;;14825:18:1;;;14818:35;14870:19;;9006:85:0;14494:401:1;9006:85:0;9127:60;9136:5;9143:7;9171:15;9152:16;:34;9127:8;:60::i;7674:193::-;7753:4;5489:10;7809:28;5489:10;7826:2;7830:6;7809:9;:28::i;22805:323::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;22909:23:::1;;22897:8;:35:::0;22889:105:::1;;;::::0;-1:-1:-1;;;22889:105:0;;15102:2:1;22889:105:0::1;::::0;::::1;15084:21:1::0;15141:2;15121:18;;;15114:30;15180:34;15160:18;;;15153:62;15251:28;15231:18;;;15224:56;15297:19;;22889:105:0::1;14900:422:1::0;22889:105:0::1;23051:23;::::0;23010:65:::1;::::0;23041:8;;23010:65:::1;::::0;;;::::1;23086:23;:34:::0;22805:323::o;21945:299::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;22051:15:::1;::::0;-1:-1:-1;;;;;22051:15:0;;::::1;22029:38:::0;;::::1;::::0;22021:92:::1;;;::::0;-1:-1:-1;;;22021:92:0;;15529:2:1;22021:92:0::1;::::0;::::1;15511:21:1::0;15568:2;15548:18;;;15541:30;15607:34;15587:18;;;15580:62;-1:-1:-1;;;15658:18:1;;;15651:40;15708:19;;22021:92:0::1;15327:406:1::0;22021:92:0::1;22171:15;::::0;22129:59:::1;::::0;-1:-1:-1;;;;;22171:15:0;;::::1;::::0;22129:59;::::1;::::0;::::1;::::0;22171:15:::1;::::0;22129:59:::1;22199:15;:37:::0;;-1:-1:-1;;;;;;22199:37:0::1;-1:-1:-1::0;;;;;22199:37:0;;;::::1;::::0;;;::::1;::::0;;21945:299::o;19157:300::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19252:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19244:100:::1;;;;-1:-1:-1::0;;;19244:100:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19355:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19355:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19409:40;;154:41:1;;;19409:40:0::1;::::0;127:18:1;19409:40:0::1;14:187:1::0;17952:217:0;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18047:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;18047:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18111:50;;154:41:1;;;18111:50:0::1;::::0;127:18:1;18111:50:0::1;14:187:1::0;7875:151:0;-1:-1:-1;;;;;7991:18:0;;;7964:7;7991:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7875:151::o;21255:333::-;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;21390:89:::1;21413:5;21419:19;21439;21459;21390:22;:89::i;:::-;21495:85;::::0;-1:-1:-1;;;15940:27:1;;15992:2;15983:12;21495:85:0::1;15738:263:1::0;6446:244:0;6203:6;;-1:-1:-1;;;;;6203:6:0;5489:10;6203:22;6195:67;;;;-1:-1:-1;;;6195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6535:22:0;::::1;6527:73;;;::::0;-1:-1:-1;;;6527:73:0;;16208:2:1;6527:73:0::1;::::0;::::1;16190:21:1::0;16247:2;16227:18;;;16220:30;16286:34;16266:18;;;16259:62;-1:-1:-1;;;16337:18:1;;;16330:36;16383:19;;6527:73:0::1;16006:402:1::0;6527:73:0::1;6637:6;::::0;;6616:38:::1;::::0;-1:-1:-1;;;;;6616:38:0;;::::1;::::0;6637:6;::::1;::::0;6616:38:::1;::::0;::::1;6665:6;:17:::0;;-1:-1:-1;;;;;;6665:17:0::1;-1:-1:-1::0;;;;;6665:17:0;;;::::1;::::0;;;::::1;::::0;;6446:244::o;11325:380::-;-1:-1:-1;;;;;11461:19:0;;11453:68;;;;-1:-1:-1;;;11453:68:0;;16615:2:1;11453:68:0;;;16597:21:1;16654:2;16634:18;;;16627:30;16693:34;16673:18;;;16666:62;-1:-1:-1;;;16744:18:1;;;16737:34;16788:19;;11453:68:0;16413:400:1;11453:68:0;-1:-1:-1;;;;;11540:21:0;;11532:68;;;;-1:-1:-1;;;11532:68:0;;17020:2:1;11532:68:0;;;17002:21:1;17059:2;17039:18;;;17032:30;17098:34;17078:18;;;17071:62;-1:-1:-1;;;17149:18:1;;;17142:32;17191:19;;11532:68:0;16818:398:1;11532:68:0;-1:-1:-1;;;;;11613:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11665:32;;1769:25:1;;;11665:32:0;;1742:18:1;11665:32:0;;;;;;;11325:380;;;:::o;11713:453::-;11848:24;11875:25;11885:5;11892:7;11875:9;:25::i;:::-;11848:52;;-1:-1:-1;;11915:16:0;:37;11911:248;;11997:6;11977:16;:26;;11969:68;;;;-1:-1:-1;;;11969:68:0;;17423:2:1;11969:68:0;;;17405:21:1;17462:2;17442:18;;;17435:30;17501:31;17481:18;;;17474:59;17550:18;;11969:68:0;17221:353:1;11969:68:0;12081:51;12090:5;12097:7;12125:6;12106:16;:25;12081:8;:51::i;:::-;11837:329;11713:453;;;:::o;24585:2146::-;-1:-1:-1;;;;;24717:18:0;;24709:68;;;;-1:-1:-1;;;24709:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24796:16:0;;24788:64;;;;-1:-1:-1;;;24788:64:0;;;;;;;:::i;:::-;24869:6;24879:1;24869:11;24865:93;;24897:28;24913:4;24919:2;24923:1;24897:15;:28::i;24865:93::-;-1:-1:-1;;;;;24975:35:0;;;;;;:29;:35;;;;;;;;24974:36;:74;;;;-1:-1:-1;;;;;;25015:33:0;;;;;;:29;:33;;;;;;;;25014:34;24974:74;24970:732;;;25073:16;;-1:-1:-1;;;25073:16:0;;;;25065:66;;;;-1:-1:-1;;;25065:66:0;;18591:2:1;25065:66:0;;;18573:21:1;18630:2;18610:18;;;18603:30;18669:34;18649:18;;;18642:62;-1:-1:-1;;;18720:18:1;;;18713:35;18765:19;;25065:66:0;18389:401:1;25065:66:0;-1:-1:-1;;;;;25155:14:0;;;;;;:10;:14;;;;;;;;25154:15;25146:53;;;;-1:-1:-1;;;25146:53:0;;18997:2:1;25146:53:0;;;18979:21:1;19036:2;19016:18;;;19009:30;-1:-1:-1;;;19055:18:1;;;19048:55;19120:18;;25146:53:0;18795:349:1;25146:53:0;-1:-1:-1;;;;;25223:16:0;;;;;;:10;:16;;;;;;;;25222:17;25214:55;;;;-1:-1:-1;;;25214:55:0;;18997:2:1;25214:55:0;;;18979:21:1;19036:2;19016:18;;;19009:30;-1:-1:-1;;;19055:18:1;;;19048:55;19120:18;;25214:55:0;18795:349:1;25214:55:0;-1:-1:-1;;;;;25289:38:0;;;;;;:34;:38;;;;;;;;25288:39;:84;;;;-1:-1:-1;;;;;;25332:40:0;;;;;;:34;:40;;;;;;;;25331:41;25288:84;25284:204;;;25411:11;;25401:6;:21;;25393:79;;;;-1:-1:-1;;;25393:79:0;;19351:2:1;25393:79:0;;;19333:21:1;19390:2;19370:18;;;19363:30;19429:34;19409:18;;;19402:62;-1:-1:-1;;;19480:18:1;;;19473:43;19533:19;;25393:79:0;19149:409:1;25393:79:0;-1:-1:-1;;;;;25507:33:0;;;;;;:29;:33;;;;;;;;25502:189;;25597:15;;25586:6;25570:13;25580:2;-1:-1:-1;;;;;7640:18:0;7613:7;7640:18;;;:9;:18;;;;;;;7539:127;25570:13;:22;;;;:::i;:::-;25569:43;;25561:114;;;;-1:-1:-1;;;25561:114:0;;19765:2:1;25561:114:0;;;19747:21:1;19804:2;19784:18;;;19777:30;19843:34;19823:18;;;19816:62;19914:28;19894:18;;;19887:56;19960:19;;25561:114:0;19563:422:1;25561:114:0;-1:-1:-1;;;;;25727:31:0;;;;;;;:25;:31;;;;;;;25760:29;;;;;;;;25714:86;;25727:31;;;;;25760:29;25753:4;25786:2;25714:12;:86::i;:::-;25854:23;;25844:4;25811:12;7640:18;;;:9;:18;;;;;;25908:16;;-1:-1:-1;;25826:51:0;;-1:-1:-1;;;25908:16:0;;;;:40;;;;;25941:7;25908:40;:67;;;;-1:-1:-1;25966:9:0;;;;25965:10;25908:67;:97;;;;-1:-1:-1;25992:9:0;;;;;;;:13;;25908:97;:143;;;;-1:-1:-1;;;;;;26022:29:0;;;;;;:25;:29;;;;;;;;25908:143;25890:280;;;26078:9;:16;;-1:-1:-1;;26078:16:0;26090:4;26078:16;;;26109:17;:15;:17::i;:::-;26141:9;:17;;-1:-1:-1;;26141:17:0;;;25890:280;26198:9;;26182:12;;26198:9;;26197:10;:30;;;;-1:-1:-1;26211:16:0;;-1:-1:-1;;;26211:16:0;;;;26197:30;-1:-1:-1;;;;;26244:24:0;;;;;;:18;:24;;;;;;26182:45;;-1:-1:-1;26244:24:0;;;:50;;-1:-1:-1;;;;;;26272:22:0;;;;;;:18;:22;;;;;;;;26244:50;26240:98;;;-1:-1:-1;26321:5:0;26240:98;26352:7;:24;;;;-1:-1:-1;26363:9:0;;;;;;;:13;;26352:24;26348:332;;;26417:9;;26393:11;;26430:3;;26408:18;;26417:9;;;;;26408:6;:18;:::i;:::-;26407:26;;;;:::i;:::-;26393:40;-1:-1:-1;26457:12:0;26393:40;26457:6;:12;:::i;:::-;26448:21;;26512:1;26488:21;;:25;:69;;;;;26555:1;26533:18;;26518:12;:33;;;;:::i;:::-;:38;;26488:69;26484:129;;;26594:3;26578:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;26484:129:0;26627:41;26643:4;26657;26664:3;26627:15;:41::i;:::-;26378:302;26348:332;26690:33;26706:4;26712:2;26716:6;26690:15;:33::i;:::-;24698:2033;;24585:2146;;;:::o;27971:939::-;28137:23;;:47;;;;-1:-1:-1;;;28137:23:0;;;;:47;28133:250;;28206:104;;-1:-1:-1;;;20622:34:1;;20681:2;20672:12;28206:104:0;;;;;;;;28249:23;;28206:104;;28249:23;-1:-1:-1;;;28249:23:0;;;;;28206:104;;;;-1:-1:-1;;;;;;;;;;;28206:104:0;;;28295:14;;;;;;28206:104;:::i;:::-;;;;;;;;28325:46;;-1:-1:-1;;;;28325:46:0;-1:-1:-1;;;28325:46:0;;;;;;;28133:250;28397:23;;:47;;;;-1:-1:-1;;;28397:23:0;;;;:47;28393:250;;28466:104;;-1:-1:-1;;;21111:34:1;;21170:2;21161:12;28466:104:0;;;;;;;;28509:23;;28466:104;;28509:23;-1:-1:-1;;;28509:23:0;;;;;28466:104;;;;-1:-1:-1;;;;;;;;;;;28466:104:0;;;28555:14;;;;;;28466:104;:::i;:::-;;;;;;;;28585:46;;-1:-1:-1;;;;28585:46:0;-1:-1:-1;;;28585:46:0;;;;;;;28393:250;28657:23;;:47;;;;-1:-1:-1;;;28657:23:0;;;;:47;28653:250;;28726:104;;-1:-1:-1;;;21386:34:1;;21445:2;21436:12;28726:104:0;;;;;;;;28769:23;;28726:104;;28769:23;-1:-1:-1;;;28769:23:0;;;;;28726:104;;;;-1:-1:-1;;;;;;;;;;;28726:104:0;;;28815:14;;;;;;28726:104;:::i;:::-;;;;;;;;28845:46;;;;;-1:-1:-1;;;28845:46:0;-1:-1:-1;;;;28845:46:0;;;;;;27971:939;;;;:::o;28916:914::-;29078:22;;:45;;;;-1:-1:-1;;;29078:22:0;;;;:45;29074:243;;29145:101;;-1:-1:-1;;;21661:33:1;;21719:2;21710:12;29145:101:0;;;;;;;;29187:22;;29145:101;;29187:22;-1:-1:-1;;;29187:22:0;;;;;29145:101;;;;-1:-1:-1;;;;;;;;;;;29145:101:0;;;29231:14;;;;;;29145:101;:::i;:::-;;;;;;;;29261:44;;-1:-1:-1;;;;29261:44:0;-1:-1:-1;;;29261:44:0;;;;;;;29074:243;29331:22;;:45;;;;-1:-1:-1;;;29331:22:0;;;;:45;29327:243;;29398:101;;-1:-1:-1;;;21935:33:1;;21993:2;21984:12;29398:101:0;;;;;;;;29440:22;;29398:101;;29440:22;-1:-1:-1;;;29440:22:0;;;;;29398:101;;;;-1:-1:-1;;;;;;;;;;;29398:101:0;;;29484:14;;;;;;29398:101;:::i;:::-;;;;;;;;29514:44;;-1:-1:-1;;;;29514:44:0;-1:-1:-1;;;29514:44:0;;;;;;;29327:243;29584:22;;:45;;;;-1:-1:-1;;;29584:22:0;;;;:45;29580:243;;29651:101;;-1:-1:-1;;;22209:33:1;;22267:2;22258:12;29651:101:0;;;;;;;;29693:22;;29651:101;;29693:22;-1:-1:-1;;;29693:22:0;;;;;29651:101;;;;-1:-1:-1;;;;;;;;;;;29651:101:0;;;29737:14;;;;;;29651:101;:::i;:::-;;;;;;;;29767:44;;;;;-1:-1:-1;;;29767:44:0;-1:-1:-1;;;;29767:44:0;;;;;;28916:914;;;;:::o;9238:840::-;-1:-1:-1;;;;;9369:18:0;;9361:68;;;;-1:-1:-1;;;9361:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9448:16:0;;9440:64;;;;-1:-1:-1;;;9440:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9590:15:0;;9568:19;9590:15;;;:9;:15;;;;;;9624:21;;;;9616:72;;;;-1:-1:-1;;;9616:72:0;;22483:2:1;9616:72:0;;;22465:21:1;22522:2;22502:18;;;22495:30;22561:34;22541:18;;;22534:62;-1:-1:-1;;;22612:18:1;;;22605:36;22658:19;;9616:72:0;22281:402:1;9616:72:0;-1:-1:-1;;;;;9724:15:0;;;;;;;:9;:15;;;;;;9742:20;;;9724:38;;9942:13;;;;;;;;;;:23;;;;;;9994:26;;;;;;9756:6;1769:25:1;;1757:2;1742:18;;1623:177;9994:26:0;;;;;;;;10033:37;23134:711;26739:1224;26838:14;:18;;-1:-1:-1;;26896:18:0;;;26927:362;;;;26963:11;;;;:56;;;;;27018:1;26996:18;;26978:15;:36;;;;:::i;:::-;:41;;26963:56;26959:319;;;27040:14;:20;;-1:-1:-1;;27040:20:0;27057:3;27040:20;;;26959:319;;;27118:5;:24;27101:14;:41;;-1:-1:-1;;;27118:24:0;;;;;;-1:-1:-1;;27161:41:0;;;;;;;27118:24;-1:-1:-1;;;27178:24:0;;;;27161:41;;-1:-1:-1;;27221:41:0;-1:-1:-1;;;27238:24:0;;;;27221:41;;;;;;;;26959:319;27303:10;27299:199;;;27347:5;:25;27330:14;:42;;-1:-1:-1;;;27347:25:0;;;;;;-1:-1:-1;;27387:42:0;;;;;;;27347:25;-1:-1:-1;;;27404:25:0;;;;27387:42;;-1:-1:-1;;27444:42:0;-1:-1:-1;;;27461:25:0;;;;27444:42;;;;;;;;27299:199;27513:10;27512:11;:27;;;;;27528:11;27527:12;27512:27;:105;;;;-1:-1:-1;;;;;;27544:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;27583:33:0;;;;;;:29;:33;;;;;;;;27544:72;27508:291;;;27651:5;:24;27634:14;:41;;-1:-1:-1;;;27651:24:0;;;;;;-1:-1:-1;;27690:41:0;;;;;;;27651:24;-1:-1:-1;;;27707:24:0;;;;27690:41;;-1:-1:-1;;27746:41:0;-1:-1:-1;;;27763:24:0;;;;27746:41;;;;;;;;27508:291;27855:14;;;;;;;;;27821:31;;27855:14;27838;;;;;27821;:31;:::i;:::-;:48;;;;:::i;:::-;27809:9;:60;;;;;;;;;;-1:-1:-1;;27809:60:0;;;;;;;;27885:70;;;27897:14;;;;;;;;;;23056:36:1;;27809:60:0;27913:14;;;;23123:2:1;23108:18;;23101:45;27929:14:0;;;;;23162:18:1;;;23155:45;27945:9:0;;;;;23231:2:1;23216:18;;23209:45;27885:70:0;;;;;;;23043:3:1;27885:70:0;;;26739:1224;;;;:::o;29838:1163::-;29928:4;29884:23;7640:18;;;:9;:18;;;;;;30070:9;;7640:18;;29973:21;;30082:1;;30070:9;;;;;;;30034:32;;30052:14;7640:18;30034:32;:::i;:::-;30033:46;;;;:::i;:::-;:50;;;;:::i;:::-;30007:76;-1:-1:-1;30094:20:0;30117:33;30007:76;30117:15;:33;:::i;:::-;30094:56;;30163:31;30181:12;30163:17;:31::i;:::-;30207:27;30237:41;30261:17;30237:21;:41;:::i;:::-;30324:14;;30207:71;;-1:-1:-1;30289:19:0;;30324:18;;30341:1;;30324:14;;:18;:::i;:::-;30311:9;;:32;;;:9;;;;;:32;:::i;:::-;30407:14;;30289:54;;;;;-1:-1:-1;30354:27:0;;30439:1;;30289:54;;30385:36;;30407:14;30385:19;:36;:::i;:::-;30384:52;;;;:::i;:::-;:56;;;;:::i;:::-;30504:14;;30354:86;;-1:-1:-1;30451:27:0;;30522:11;;30482:36;;30504:14;;;;;30482:19;:36;:::i;:::-;30481:52;;;;:::i;:::-;30451:82;-1:-1:-1;30544:27:0;30597:42;30451:82;30597:19;:42;:::i;:::-;30574:66;;:19;:66;:::i;:::-;30679:16;;30544:96;;-1:-1:-1;30653:64:0;;-1:-1:-1;;;;;30679:16:0;30544:96;30653:17;:64::i;:::-;30754:16;;30728:64;;-1:-1:-1;;;;;30754:16:0;30772:19;30728:17;:64::i;:::-;30809:19;;30805:189;;30845:51;30859:15;30876:19;30845:13;:51::i;:::-;30916:66;;;23793:25:1;;;23849:2;23834:18;;23827:34;;;23877:18;;;23870:34;;;30916:66:0;;23781:2:1;23766:18;30916:66:0;;;;;;;30805:189;29873:1128;;;;;;;;;29838:1163::o;31009:500::-;31100:16;;;31114:1;31100:16;;;;;;;;31076:21;;31100:16;;;;;;;;;;-1:-1:-1;31100:16:0;31076:40;;31145:4;31127;31132:1;31127:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31127:23:0;;;:7;;;;;;;;;;:23;;;;31171:15;;:22;;;-1:-1:-1;;;31171:22:0;;;;:15;;;;;:20;;:22;;;;;31127:7;;31171:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31161:4;31166:1;31161:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31161:32:0;;;:7;;;;;;;;;:32;31236:15;;31204:62;;31221:4;;31236:15;31254:11;31204:8;:62::i;:::-;31277:15;;:224;;-1:-1:-1;;;31277:224:0;;-1:-1:-1;;;;;31277:15:0;;;;:66;;:224;;31358:11;;31277:15;;31428:4;;31455;;31475:15;;31277:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31065:444;31009:500;:::o;2349:322::-;2463:6;2438:21;:31;;2425:86;;;;-1:-1:-1;;;2425:86:0;;25366:2:1;2425:86:0;;;25348:21:1;25405:2;25385:18;;;25378:30;25444:31;25424:18;;;25417:59;25493:18;;2425:86:0;25164:353:1;2425:86:0;2519:12;2537:9;-1:-1:-1;;;;;2537:14:0;2559:6;2537:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2518:52;;;2588:7;2575:91;;;;-1:-1:-1;;;2575:91:0;;25724:2:1;2575:91:0;;;25706:21:1;25763:2;25743:18;;;25736:30;25802:34;25782:18;;;25775:62;25873:28;25853:18;;;25846:56;25919:19;;2575:91:0;25522:422:1;31517:426:0;31631:15;;31599:62;;31616:4;;-1:-1:-1;;;;;31631:15:0;31649:11;31599:8;:62::i;:::-;31672:15;;31878:16;;31672:263;;-1:-1:-1;;;31672:263:0;;31746:4;31672:263;;;26290:34:1;26340:18;;;26333:34;;;31672:15:0;26383:18:1;;;26376:34;;;26426:18;;;26419:34;-1:-1:-1;;;;;31878:16:0;;;26469:19:1;;;26462:44;31909:15:0;26522:19:1;;;26515:35;31672:15:0;;;:31;;31712:9;;26224:19:1;;31672:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;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;814:70;759:131;:::o;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;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2455:118::-;2541:5;2534:13;2527:21;2520:5;2517:32;2507:60;;2563:1;2560;2553:12;2578:382;2643:6;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2885:2:1;2870:18;;2857:32;2898:30;2857:32;2898:30;:::i;:::-;2947:7;2937:17;;;2578:382;;;;;:::o;3173:247::-;3232:6;3285:2;3273:9;3264:7;3260:23;3256:32;3253:52;;;3301:1;3298;3291:12;3253:52;3340:9;3327:23;3359:31;3384:5;3359:31;:::i;:::-;3409:5;3173:247;-1:-1:-1;;;3173:247:1:o;3425:529::-;3502:6;3510;3518;3571:2;3559:9;3550:7;3546:23;3542:32;3539:52;;;3587:1;3584;3577:12;3539:52;3626:9;3613:23;3645:31;3670:5;3645:31;:::i;:::-;3695:5;-1:-1:-1;3752:2:1;3737:18;;3724:32;3765:33;3724:32;3765:33;:::i;:::-;3817:7;-1:-1:-1;3876:2:1;3861:18;;3848:32;3889:33;3848:32;3889:33;:::i;:::-;3941:7;3931:17;;;3425:529;;;;;:::o;3959:156::-;4025:20;;4085:4;4074:16;;4064:27;;4054:55;;4105:1;4102;4095:12;4054:55;3959:156;;;:::o;4120:322::-;4191:6;4199;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4299:27;4316:9;4299:27;:::i;:::-;4289:37;;4345:36;4377:2;4366:9;4362:18;4345:36;:::i;:::-;4335:46;;4400:36;4432:2;4421:9;4417:18;4400:36;:::i;:::-;4390:46;;4120:322;;;;;:::o;4792:388::-;4860:6;4868;4921:2;4909:9;4900:7;4896:23;4892:32;4889:52;;;4937:1;4934;4927:12;4889:52;4976:9;4963:23;4995:31;5020:5;4995:31;:::i;:::-;5045:5;-1:-1:-1;5102:2:1;5087:18;;5074:32;5115:33;5074:32;5115:33;:::i;5185:380::-;5264:1;5260:12;;;;5307;;;5328:61;;5382:4;5374:6;5370:17;5360:27;;5328:61;5435:2;5427:6;5424:14;5404:18;5401:38;5398:161;;5481:10;5476:3;5472:20;5469:1;5462:31;5516:4;5513:1;5506:15;5544:4;5541:1;5534:15;5398:161;;5185:380;;;:::o;5570:356::-;5772:2;5754:21;;;5791:18;;;5784:30;5850:34;5845:2;5830:18;;5823:62;5917:2;5902:18;;5570:356::o;6555:251::-;6625:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:52;;;6694:1;6691;6684:12;6646:52;6726:9;6720:16;6745:31;6770:5;6745:31;:::i;8700:127::-;8761:10;8756:3;8752:20;8749:1;8742:31;8792:4;8789:1;8782:15;8816:4;8813:1;8806:15;8832:128;8899:9;;;8920:11;;;8917:37;;;8934:18;;:::i;9793:245::-;9860:6;9913:2;9901:9;9892:7;9888:23;9884:32;9881:52;;;9929:1;9926;9919:12;9881:52;9961:9;9955:16;9980:28;10002:5;9980:28;:::i;10043:125::-;10108:9;;;10129:10;;;10126:36;;;10142:18;;:::i;13264:413::-;13466:2;13448:21;;;13505:2;13485:18;;;13478:30;13544:34;13539:2;13524:18;;13517:62;-1:-1:-1;;;13610:2:1;13595:18;;13588:47;13667:3;13652:19;;13264:413::o;17579:401::-;17781:2;17763:21;;;17820:2;17800:18;;;17793:30;17859:34;17854:2;17839:18;;17832:62;-1:-1:-1;;;17925:2:1;17910:18;;17903:35;17970:3;17955:19;;17579:401::o;17985:399::-;18187:2;18169:21;;;18226:2;18206:18;;;18199:30;18265:34;18260:2;18245:18;;18238:62;-1:-1:-1;;;18331:2:1;18316:18;;18309:33;18374:3;18359:19;;17985:399::o;19990:168::-;20063:9;;;20094;;20111:15;;;20105:22;;20091:37;20081:71;;20132:18;;:::i;20163:127::-;20224:10;20219:3;20215:20;20212:1;20205:31;20255:4;20252:1;20245:15;20279:4;20276:1;20269:15;20295:120;20335:1;20361;20351:35;;20366:18;;:::i;:::-;-1:-1:-1;20400:9:1;;20295:120::o;20695:209::-;-1:-1:-1;;20859:38:1;;;;20841:57;;20829:2;20814:18;;20695:209::o;22688:148::-;22776:4;22755:12;;;22769;;;22751:31;;22794:13;;22791:39;;;22810:18;;:::i;23265:165::-;23303:1;23337:4;23334:1;23330:12;23361:3;23351:37;;23368:18;;:::i;:::-;23420:3;23413:4;23410:1;23406:12;23402:22;23397:27;;;23265:165;;;;:::o;23435:151::-;23525:4;23518:12;;;23504;;;23500:31;;23543:14;;23540:40;;;23560:18;;:::i;24047:127::-;24108:10;24103:3;24099:20;24096:1;24089:31;24139:4;24136:1;24129:15;24163:4;24160:1;24153:15;24179:980;24441:4;24489:3;24478:9;24474:19;24520:6;24509:9;24502:25;24546:2;24584:6;24579:2;24568:9;24564:18;24557:34;24627:3;24622:2;24611:9;24607:18;24600:31;24651:6;24686;24680:13;24717:6;24709;24702:22;24755:3;24744:9;24740:19;24733:26;;24794:2;24786:6;24782:15;24768:29;;24815:1;24825:195;24839:6;24836:1;24833:13;24825:195;;;24904:13;;-1:-1:-1;;;;;24900:39:1;24888:52;;24995:15;;;;24960:12;;;;24936:1;24854:9;24825:195;;;-1:-1:-1;;;;;;;25076:32:1;;;;25071:2;25056:18;;25049:60;-1:-1:-1;;;25140:3:1;25125:19;25118:35;25037:3;24179:980;-1:-1:-1;;;24179:980:1:o;26561:306::-;26649:6;26657;26665;26718:2;26706:9;26697:7;26693:23;26689:32;26686:52;;;26734:1;26731;26724:12;26686:52;26763:9;26757:16;26747:26;;26813:2;26802:9;26798:18;26792:25;26782:35;;26857:2;26846:9;26842:18;26836:25;26826:35;;26561:306;;;;;:::o

Swarm Source

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