ETH Price: $3,114.19 (+1.49%)
Gas: 7 Gwei

Token

Omni Inu (OMNI)
 

Overview

Max Total Supply

996,975,323 OMNI

Holders

146

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
279,979.987374867680622519 OMNI

Value
$0.00
0xc38108ce29fda8b328b79144054541fa03deb24b
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:
OmniChainToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 10: OmniChainToken.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.4;

import "./IERC20.sol";
import "./ERC20.sol";
import "./Ownable.sol";


import "./ILayerZeroUserApplicationConfig.sol";
import "./ILayerZeroReceiver.sol";
import "./ILayerZeroEndpoint.sol";
import "./NonBlockingReceiver.sol";

// deploy this contract to 2+ chains for testing.
//
// sendTokens() function works like this:
//  1. burn local tokens on the source chain
//  2. send a LayerZero message to the destination OmniChainToken contract on another chain
//  3. mint tokens on destination in lzReceive()
contract OmniChainToken is ERC20, NonblockingReceiver, ILayerZeroUserApplicationConfig {


    mapping(uint16 => bytes) public remotes;

	address public marketingWallet = payable(0x335b5b3bE5D0cDBcbdb1CBaBEA26a43Ec01f84e9);
	
	address private uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
	//New Features
	mapping (address => bool) public automatedMarketMakerPairs;
	mapping (address => bool) private _isExcludedFromFees;
	mapping (address => bool) private bots;
	address[] public potentialBots;
	
	bool public tradingActive = false;
	
	uint256 private tradingBlock = 0;
	uint256 private sellFees = 14;
	uint256 private buyFees = 7;
	
	uint256 public maxTxAmount;
	uint256 public maxWallet;
	

	uint256 public fixedSupply = 1_000_000_000 * 10**18;
    // constructor mints tokens to the deployer
    constructor(string memory name_, string memory symbol_, address _layerZeroEndpoint) ERC20(name_, symbol_){
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        _mint(msg.sender, fixedSupply); // give the deployer initial supply
		
		maxTxAmount = fixedSupply * 1 / 100; //1% of supply
		maxWallet = fixedSupply * 1 / 100; //1% of supply
		
		
		excludeFromFees(owner(), true);
		excludeFromFees(address(this), true);
		excludeFromFees(marketingWallet, true);
    }
	
	function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        automatedMarketMakerPairs[pair] = value;
    }

	
	function setBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }
    
    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }
	
	function isBot(address bot) public view returns (bool) {
		return bots[bot];
	}
	
	function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
	
	function setMarketingWallet(address newWallet) public onlyOwner {
		marketingWallet = newWallet;
		excludeFromFees(newWallet, true);
	}

	function setFees(uint256 _buyFees, uint256 _sellFees) public onlyOwner {
		require(_buyFees <= 25 && _sellFees <= 25, "Fees must be under 25%");
		
		sellFees = _sellFees;
		buyFees = _buyFees;
		
	}
	
	function blackListPotentialBots() external onlyOwner {
		setBots(potentialBots);
	}
	
	function enableTrading() external onlyOwner {
		tradingBlock = block.number;
		tradingActive = true;
	}


    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= fixedSupply / 1000, "Cannot set maxTxAmount lower than 0.1%");
        maxTxAmount = newNum;
    }

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

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

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
		if (
			from != owner() &&
			to != owner() &&
			to != address(0) &&
			to != address(0xdead)
		){
			if(!tradingActive){
				require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
			}
			
			if (automatedMarketMakerPairs[from] && !_isExcludedFromFees[to]) {
				require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTxAmount.");
			}
                
			//when sell
			else if (automatedMarketMakerPairs[to] && !_isExcludedFromFees[from]) {
				require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTxAmount.");
			}
			
			if (!automatedMarketMakerPairs[to] && !_isExcludedFromFees[from]) {
                require(balanceOf(to) + amount < maxWallet, "TOKEN: Balance exceeds wallet size!");
            }
			
			if (tradingActive && block.number <= tradingBlock + 2 && automatedMarketMakerPairs[from] && to != uniswapV2Router && to != address(this)) {  
                potentialBots.push(to);
            }
		 
		}
        

        bool takeFee = true;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellFees > 0){
                fees = amount * sellFees / 100;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyFees > 0) {
        	    fees = amount * buyFees / 100;
            }
            
            if(fees > 0){    
                super._transfer(from, marketingWallet, fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }
	
	function manualSend() external onlyOwner {
		bool success;
		(success,) = address(marketingWallet).call{value: address(this).balance}("");
	}

    // send tokens to another chain.
    // this function sends the tokens from your address to the same address on the destination.
    function sendTokens(
        uint16 _chainId,                            // send tokens to this chainId
        bytes calldata _dstOmniChainTokenAddr,      // destination address of OmniChainToken
        uint _qty                                   // how many tokens to send
    )
        public
        payable
    {
        require(!bots[msg.sender]);
        // and burn the local tokens *poof*
        _burn(msg.sender, _qty);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, _qty);

        // send LayerZero message
        endpoint.send{value:msg.value}(
            _chainId,                       // destination chainId
            _dstOmniChainTokenAddr,         // destination address of OmniChainToken
            payload,                        // abi.encode()'ed bytes
            payable(msg.sender),            // refund address (LayerZero will refund any superflous gas back to caller of send()
            address(0x0),                   // 'zroPaymentAddress' unused for this mock/example
            bytes("")                       // 'txParameters' unused for this mock/example
        );
    }


    // receive the bytes payload from the source chain via LayerZero
    // _fromAddress is the source OmniChainToken address
     function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal override {
        // decode
        (address toAddr, uint qty) = abi.decode(_payload, (address, uint));

        // mint the tokens back into existence, to the toAddr from the message payload
        _mint(toAddr, qty);
    }
	
	//---------------------------DAO CALL----------------------------------------
    // generic config for user Application
    function setConfig(
        uint16 _version,
        uint16 _chainId,
        uint256 _configType,
        bytes calldata _config
    ) external override onlyOwner {
        endpoint.setConfig(_version, _chainId, _configType, _config);
    }

    function setSendVersion(uint16 _version) external override onlyOwner {
        endpoint.setSendVersion(_version);
    }

    function setReceiveVersion(uint16 _version) external override onlyOwner {
        endpoint.setReceiveVersion(_version);
    }

    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner {
        endpoint.forceResumeReceive(_srcChainId, _srcAddress);
    }
}

File 1 of 10: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 2 of 10: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    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;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    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);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 10: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 10: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 5 of 10: ILayerZeroEndpoint.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity >=0.5.0;

import "./ILayerZeroUserApplicationConfig.sol";

interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication) external view returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication) external view returns (uint16);
}

File 6 of 10: ILayerZeroReceiver.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external;
}

File 7 of 10: ILayerZeroUserApplicationConfig.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}

File 8 of 10: NonBlockingReceiver.sol
pragma solidity 0.8.4;

import "./Ownable.sol";

import "./ILayerZeroReceiver.sol";
import "./ILayerZeroEndpoint.sol";
import "./ILayerZeroReceiver.sol";

abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {
    ILayerZeroEndpoint public endpoint;

    struct FailedMessages {
        uint payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages;
    mapping(uint16 => bytes) public trustedSourceLookup;

    event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload);

    // abstract function
    function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal;

    function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(_srcAddress.length == trustedSourceLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedSourceLookup[_srcChainId]), "NonblockingReceiver: invalid source sending contract");

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload));
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public {
        // only internal transaction
        require(msg.sender == address(this) || msg.sender == owner(), "NonblockingReceiver: caller must be Trusted.");
        _LzReceive( _srcChainId, _srcAddress, _nonce, _payload);
    }

    function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal {
        endpoint.send{value: msg.value}(_dstChainId, trustedSourceLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam);
    }

    function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce];
        require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message");
        require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload");
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedSource(uint16 _chainId, bytes calldata _trustedSource) external onlyOwner {
        trustedSourceLookup[_chainId] = _trustedSource;
    }
}

File 10 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[],"name":"blackListPotentialBots","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":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fixedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"potentialBots","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"remotes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_dstOmniChainTokenAddr","type":"bytes"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"sendTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFees","type":"uint256"},{"internalType":"uint256","name":"_sellFees","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedSource","type":"bytes"}],"name":"setTrustedSource","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedSourceLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a80546001600160a01b031990811673335b5b3be5d0cdbcbdb1cbabea26a43ec01f84e917909155600b8054909116737a250d5630b4cf539739df2c5dacb4c659f2488d1790556010805460ff191690556000601155600e60125560076013556b033b2e3c9fd0803ce80000006016553480156200008257600080fd5b506040516200347f3803806200347f833981016040819052620000a591620004cd565b825183908390620000be90600390602085019062000374565b508051620000d490600490602084019062000374565b505050620000f1620000eb620001ae60201b60201c565b620001b2565b600680546001600160a01b0319166001600160a01b0383161790556016546200011c90339062000204565b606460165460016200012f919062000592565b6200013b919062000571565b6014556016546064906200015190600162000592565b6200015d919062000571565b6015556200017f620001776005546001600160a01b031690565b6001620002ed565b6200018c306001620002ed565b600a54620001a5906001600160a01b03166001620002ed565b5050506200061d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b806002600082825462000274919062000556565b90915550506001600160a01b03821660009081526020819052604081208054839290620002a390849062000556565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620003495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000257565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b8280546200038290620005b4565b90600052602060002090601f016020900481019282620003a65760008555620003f1565b82601f10620003c157805160ff1916838001178555620003f1565b82800160010185558215620003f1579182015b82811115620003f1578251825591602001919060010190620003d4565b50620003ff92915062000403565b5090565b5b80821115620003ff576000815560010162000404565b600082601f8301126200042b578081fd5b81516001600160401b038082111562000448576200044862000607565b604051601f8301601f19908116603f0116810190828211818310171562000473576200047362000607565b816040528381526020925086838588010111156200048f578485fd5b8491505b83821015620004b2578582018301518183018401529082019062000493565b83821115620004c357848385830101525b9695505050505050565b600080600060608486031215620004e2578283fd5b83516001600160401b0380821115620004f9578485fd5b62000507878388016200041a565b945060208601519150808211156200051d578384fd5b506200052c868287016200041a565b604086015190935090506001600160a01b03811681146200054b578182fd5b809150509250925092565b600082198211156200056c576200056c620005f1565b500190565b6000826200058d57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615620005af57620005af620005f1565b500290565b600181811c90821680620005c957607f821691505b60208210811415620005eb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612e52806200062d6000396000f3fe60806040526004361061027c5760003560e01c806381c986ee1161014f578063b62496f5116100c1578063d73f057e1161007a578063d73f057e146107df578063dd62ed3e146107ff578063f2fde38b14610845578063f429389014610865578063f8b45b051461087a578063ff99574b1461089057600080fd5b8063b62496f514610722578063bbc0c74214610752578063c02466681461076c578063c18bc1951461078c578063cbed8b9c146107ac578063d1deba1f146107cc57600080fd5b806395d89b411161011357806395d89b411461066d5780639a7a23d6146106825780639d1f6113146106a2578063a457c2d7146106c2578063a9059cbb146106e2578063b515566a1461070257600080fd5b806381c986ee146105995780638a8c523c146105b95780638c0b5e22146105ce5780638da5cb5b146105e45780638ee749121461060257600080fd5b8063273123b7116101f357806347853435116101ac57806347853435146104d95780635d098b38146104ee5780635e280f111461050e57806370a082311461052e578063715018a61461056457806375f0a8741461057957600080fd5b8063273123b714610411578063313ce5671461043157806336da46c91461044d57806339509351146104605780633bbac5791461048057806342d65a8d146104b957600080fd5b80630b78f9c0116102455780630b78f9c01461035257806310ddb1371461037257806318160ddd146103925780631c37a822146103b1578063203e727e146103d157806323b872dd146103f157600080fd5b80621d3567146102815780630265b3ab146102a357806306fdde03146102e057806307e0db1714610302578063095ea7b314610322575b600080fd5b34801561028d57600080fd5b506102a161029c366004612868565b6108a6565b005b3480156102af57600080fd5b506102c36102be366004612944565b610aa0565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ec57600080fd5b506102f5610aca565b6040516102d79190612a99565b34801561030e57600080fd5b506102a161031d3660046126cb565b610b5c565b34801561032e57600080fd5b5061034261033d3660046125ed565b610beb565b60405190151581526020016102d7565b34801561035e57600080fd5b506102a161036d36600461295c565b610c03565b34801561037e57600080fd5b506102a161038d3660046126cb565b610c8c565b34801561039e57600080fd5b506002545b6040519081526020016102d7565b3480156103bd57600080fd5b506102a16103cc366004612868565b610cea565b3480156103dd57600080fd5b506102a16103ec366004612944565b610d6f565b3480156103fd57600080fd5b5061034261040c36600461257c565b610e0c565b34801561041d57600080fd5b506102a161042c3660046124f4565b610e30565b34801561043d57600080fd5b50604051601281526020016102d7565b6102a161045b366004612735565b610e7b565b34801561046c57600080fd5b5061034261047b3660046125ed565b610f45565b34801561048c57600080fd5b5061034261049b3660046124f4565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156104c557600080fd5b506102a16104d43660046126e5565b610f84565b3480156104e557600080fd5b506102a1611019565b3480156104fa57600080fd5b506102a16105093660046124f4565b6110a8565b34801561051a57600080fd5b506006546102c3906001600160a01b031681565b34801561053a57600080fd5b506103a36105493660046124f4565b6001600160a01b031660009081526020819052604090205490565b34801561057057600080fd5b506102a16110fb565b34801561058557600080fd5b50600a546102c3906001600160a01b031681565b3480156105a557600080fd5b506102f56105b43660046126cb565b61112f565b3480156105c557600080fd5b506102a16111c9565b3480156105da57600080fd5b506103a360145481565b3480156105f057600080fd5b506005546001600160a01b03166102c3565b34801561060e57600080fd5b5061065861061d36600461278c565b600760209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b604080519283526020830191909152016102d7565b34801561067957600080fd5b506102f5611206565b34801561068e57600080fd5b506102a161069d3660046125bc565b611215565b3480156106ae57600080fd5b506102f56106bd3660046126cb565b61126a565b3480156106ce57600080fd5b506103426106dd3660046125ed565b611283565b3480156106ee57600080fd5b506103426106fd3660046125ed565b611315565b34801561070e57600080fd5b506102a161071d366004612618565b611323565b34801561072e57600080fd5b5061034261073d3660046124f4565b600c6020526000908152604090205460ff1681565b34801561075e57600080fd5b506010546103429060ff1681565b34801561077857600080fd5b506102a16107873660046125bc565b6113c7565b34801561079857600080fd5b506102a16107a7366004612944565b61141c565b3480156107b857600080fd5b506102a16107c73660046128e9565b6114c2565b6102a16107da3660046127e0565b61155d565b3480156107eb57600080fd5b506102a16107fa3660046126e5565b6116ca565b34801561080b57600080fd5b506103a361081a366004612544565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561085157600080fd5b506102a16108603660046124f4565b611712565b34801561087157600080fd5b506102a16117aa565b34801561088657600080fd5b506103a360155481565b34801561089c57600080fd5b506103a360165481565b6006546001600160a01b031633146108bd57600080fd5b61ffff8416600090815260086020526040902080546108db90612d85565b9050835114801561091a575061ffff841660009081526008602052604090819020905161090891906129fe565b60405180910390208380519060200120145b6109885760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a822906109b1908790879087908790600401612c44565b600060405180830381600087803b1580156109cb57600080fd5b505af19250505080156109dc575060015b610a9a576040518060400160405280825181526020018280519060200120815250600760008661ffff1661ffff16815260200190815260200160002084604051610a2691906129e2565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610a91908690869086908690612c44565b60405180910390a15b50505050565b600f8181548110610ab057600080fd5b6000918252602090912001546001600160a01b0316905081565b606060038054610ad990612d85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612d85565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b865760405162461bcd60e51b815260040161097f90612aef565b6006546040516307e0db1760e01b815261ffff831660048201526001600160a01b03909116906307e0db17906024015b600060405180830381600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b5050505050565b600033610bf9818585611821565b5060019392505050565b6005546001600160a01b03163314610c2d5760405162461bcd60e51b815260040161097f90612aef565b60198211158015610c3f575060198111155b610c845760405162461bcd60e51b815260206004820152601660248201527546656573206d75737420626520756e6465722032352560501b604482015260640161097f565b601255601355565b6005546001600160a01b03163314610cb65760405162461bcd60e51b815260040161097f90612aef565b6006546040516310ddb13760e01b815261ffff831660048201526001600160a01b03909116906310ddb13790602401610bb6565b33301480610d0257506005546001600160a01b031633145b610d635760405162461bcd60e51b815260206004820152602c60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526b103132902a393ab9ba32b21760a11b606482015260840161097f565b610a9a84848484611945565b6005546001600160a01b03163314610d995760405162461bcd60e51b815260040161097f90612aef565b6103e8601654610da99190612d03565b811015610e075760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420736574206d61785478416d6f756e74206c6f776572207468616044820152656e20302e312560d01b606482015260840161097f565b601455565b600033610e1a858285611972565b610e258585856119fe565b506001949350505050565b6005546001600160a01b03163314610e5a5760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b336000908152600e602052604090205460ff1615610e9857600080fd5b610ea23382611faa565b6040805133602082015290810182905260009060600160408051601f198184030181526006546020840183526000808552925162c5803160e81b81529194506001600160a01b03169263c5803100923492610f0c928b928b928b928a923392909190600401612b90565b6000604051808303818588803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b50505050505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bf99082908690610f7f908790612ceb565b611821565b6005546001600160a01b03163314610fae5760405162461bcd60e51b815260040161097f90612aef565b6006546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d90610fe290869086908690600401612b69565b600060405180830381600087803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b031633146110435760405162461bcd60e51b815260040161097f90612aef565b6110a6600f80548060200260200160405190810160405280929190818152602001828054801561109c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161107e575b5050505050611323565b565b6005546001600160a01b031633146110d25760405162461bcd60e51b815260040161097f90612aef565b600a80546001600160a01b0319166001600160a01b0383161790556110f88160016113c7565b50565b6005546001600160a01b031633146111255760405162461bcd60e51b815260040161097f90612aef565b6110a660006120f8565b6008602052600090815260409020805461114890612d85565b80601f016020809104026020016040519081016040528092919081815260200182805461117490612d85565b80156111c15780601f10611196576101008083540402835291602001916111c1565b820191906000526020600020905b8154815290600101906020018083116111a457829003601f168201915b505050505081565b6005546001600160a01b031633146111f35760405162461bcd60e51b815260040161097f90612aef565b436011556010805460ff19166001179055565b606060048054610ad990612d85565b6005546001600160a01b0316331461123f5760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6009602052600090815260409020805461114890612d85565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156113085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161097f565b610e258286868403611821565b600033610bf98185856119fe565b6005546001600160a01b0316331461134d5760405162461bcd60e51b815260040161097f90612aef565b60005b81518110156113c3576001600e600084848151811061137f57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806113bb81612dc0565b915050611350565b5050565b6005546001600160a01b031633146113f15760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114465760405162461bcd60e51b815260040161097f90612aef565b6103e860165460056114589190612d23565b6114629190612d03565b8110156114bd5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161097f565b601555565b6005546001600160a01b031633146114ec5760405162461bcd60e51b815260040161097f90612aef565b6006546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c906115249088908890889088908890600401612c8d565b600060405180830381600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050505050505050565b61ffff8516600090815260076020526040808220905161157e9087906129e2565b90815260408051602092819003830190206001600160401b03871660009081529252902060018101549091506116055760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b606482015260840161097f565b80548214801561162f5750806001015483836040516116259291906129d2565b6040518091039020145b61167b5760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000604482015260640161097f565b60008082556001820155604051630e1bd41160e11b81523090631c37a822906116b09089908990899089908990600401612bf9565b600060405180830381600087803b158015610f2557600080fd5b6005546001600160a01b031633146116f45760405162461bcd60e51b815260040161097f90612aef565b61ffff83166000908152600860205260409020610a9a90838361237d565b6005546001600160a01b0316331461173c5760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b0381166117a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f8816120f8565b6005546001600160a01b031633146117d45760405162461bcd60e51b815260040161097f90612aef565b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610a9a576040519150601f19603f3d011682016040523d82523d6000602084013e610a9a565b6001600160a01b0383166118835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161097f565b6001600160a01b0382166118e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161097f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000808280602001905181019061195c9190612517565b9150915061196a828261214a565b505050505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610a9a57818110156119f15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161097f565b610a9a8484848403611821565b6001600160a01b038316611a245760405162461bcd60e51b815260040161097f90612b24565b6001600160a01b038216611a4a5760405162461bcd60e51b815260040161097f90612aac565b6001600160a01b0383166000908152600e602052604090205460ff16158015611a8c57506001600160a01b0382166000908152600e602052604090205460ff16155b611a9557600080fd5b80611aab57611aa683836000612229565b505050565b6005546001600160a01b03848116911614801590611ad757506005546001600160a01b03838116911614155b8015611aeb57506001600160a01b03821615155b8015611b0257506001600160a01b03821661dead14155b15611e855760105460ff16611b95576001600160a01b0383166000908152600d602052604090205460ff1680611b5057506001600160a01b0382166000908152600d602052604090205460ff165b611b955760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161097f565b6001600160a01b0383166000908152600c602052604090205460ff168015611bd657506001600160a01b0382166000908152600d602052604090205460ff16155b15611c4757601454811115611c425760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c20b6b7bab73a1760a11b606482015260840161097f565b611cf5565b6001600160a01b0382166000908152600c602052604090205460ff168015611c8857506001600160a01b0383166000908152600d602052604090205460ff16155b15611cf557601454811115611cf55760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c20b6b7bab73a1760991b606482015260840161097f565b6001600160a01b0382166000908152600c602052604090205460ff16158015611d3757506001600160a01b0383166000908152600d602052604090205460ff16155b15611dc25760155481611d5f846001600160a01b031660009081526020819052604090205490565b611d699190612ceb565b10611dc25760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b606482015260840161097f565b60105460ff168015611de15750601154611ddd906002612ceb565b4311155b8015611e0557506001600160a01b0383166000908152600c602052604090205460ff165b8015611e1f5750600b546001600160a01b03838116911614155b8015611e3457506001600160a01b0382163014155b15611e8557600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b0383166000908152600d602052604090205460019060ff1680611ec757506001600160a01b0383166000908152600d602052604090205460ff165b15611ed0575060005b60008115611f9f576001600160a01b0384166000908152600c602052604090205460ff168015611f0257506000601254115b15611f2857606460125484611f179190612d23565b611f219190612d03565b9050611f74565b6001600160a01b0385166000908152600c602052604090205460ff168015611f5257506000601354115b15611f7457606460135484611f679190612d23565b611f719190612d03565b90505b8015611f9257600a54611f929086906001600160a01b031683612229565b611f9c8184612d42565b92505b610be4858585612229565b6001600160a01b03821661200a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161097f565b6001600160a01b0382166000908152602081905260409020548181101561207e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161097f565b6001600160a01b03831660009081526020819052604081208383039055600280548492906120ad908490612d42565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166121a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161097f565b80600260008282546121b29190612ceb565b90915550506001600160a01b038216600090815260208190526040812080548392906121df908490612ceb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831661224f5760405162461bcd60e51b815260040161097f90612b24565b6001600160a01b0382166122755760405162461bcd60e51b815260040161097f90612aac565b6001600160a01b038316600090815260208190526040902054818110156122ed5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161097f565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612324908490612ceb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237091815260200190565b60405180910390a3610a9a565b82805461238990612d85565b90600052602060002090601f0160209004810192826123ab57600085556123f1565b82601f106123c45782800160ff198235161785556123f1565b828001600101855582156123f1579182015b828111156123f15782358255916020019190600101906123d6565b506123fd929150612401565b5090565b5b808211156123fd5760008155600101612402565b60008083601f840112612427578182fd5b5081356001600160401b0381111561243d578182fd5b60208301915083602082850101111561245557600080fd5b9250929050565b600082601f83011261246c578081fd5b81356001600160401b0381111561248557612485612df1565b612498601f8201601f1916602001612cbb565b8181528460208386010111156124ac578283fd5b816020850160208301379081016020019190915292915050565b803561ffff811681146124d857600080fd5b919050565b80356001600160401b03811681146124d857600080fd5b600060208284031215612505578081fd5b813561251081612e07565b9392505050565b60008060408385031215612529578081fd5b825161253481612e07565b6020939093015192949293505050565b60008060408385031215612556578182fd5b823561256181612e07565b9150602083013561257181612e07565b809150509250929050565b600080600060608486031215612590578081fd5b833561259b81612e07565b925060208401356125ab81612e07565b929592945050506040919091013590565b600080604083850312156125ce578182fd5b82356125d981612e07565b915060208301358015158114612571578182fd5b600080604083850312156125ff578182fd5b823561260a81612e07565b946020939093013593505050565b6000602080838503121561262a578182fd5b82356001600160401b0380821115612640578384fd5b818501915085601f830112612653578384fd5b81358181111561266557612665612df1565b8060051b9150612676848301612cbb565b8181528481019084860184860187018a1015612690578788fd5b8795505b838610156126be57803594506126a985612e07565b84835260019590950194918601918601612694565b5098975050505050505050565b6000602082840312156126dc578081fd5b612510826124c6565b6000806000604084860312156126f9578283fd5b612702846124c6565b925060208401356001600160401b0381111561271c578283fd5b61272886828701612416565b9497909650939450505050565b6000806000806060858703121561274a578081fd5b612753856124c6565b935060208501356001600160401b0381111561276d578182fd5b61277987828801612416565b9598909750949560400135949350505050565b6000806000606084860312156127a0578283fd5b6127a9846124c6565b925060208401356001600160401b038111156127c3578283fd5b6127cf8682870161245c565b925050604084013590509250925092565b6000806000806000608086880312156127f7578283fd5b612800866124c6565b945060208601356001600160401b038082111561281b578485fd5b61282789838a0161245c565b9550612835604089016124dd565b9450606088013591508082111561284a578283fd5b5061285788828901612416565b969995985093965092949392505050565b6000806000806080858703121561287d578182fd5b612886856124c6565b935060208501356001600160401b03808211156128a1578384fd5b6128ad8883890161245c565b94506128bb604088016124dd565b935060608701359150808211156128d0578283fd5b506128dd8782880161245c565b91505092959194509250565b600080600080600060808688031215612900578283fd5b612909866124c6565b9450612917602087016124c6565b93506040860135925060608601356001600160401b03811115612938578182fd5b61285788828901612416565b600060208284031215612955578081fd5b5035919050565b6000806040838503121561296e578182fd5b50508035926020909101359150565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526129be816020860160208601612d59565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b600082516129f4818460208701612d59565b9190910192915050565b600080835482600182811c915080831680612a1a57607f831692505b6020808410821415612a3a57634e487b7160e01b87526022600452602487fd5b818015612a4e5760018114612a5f57612a8b565b60ff19861689528489019650612a8b565b60008a815260209020885b86811015612a835781548b820152908501908301612a6a565b505084890196505b509498975050505050505050565b60208152600061251060208301846129a6565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b61ffff84168152604060208201526000612b8760408301848661297d565b95945050505050565b61ffff8816815260c060208201526000612bae60c08301888a61297d565b8281036040840152612bc081886129a6565b6001600160a01b0387811660608601528616608085015283810360a08501529050612beb81856129a6565b9a9950505050505050505050565b61ffff86168152608060208201526000612c1660808301876129a6565b6001600160401b03861660408401528281036060840152612c3881858761297d565b98975050505050505050565b61ffff85168152608060208201526000612c6160808301866129a6565b6001600160401b03851660408401528281036060840152612c8281856129a6565b979650505050505050565b600061ffff808816835280871660208401525084604083015260806060830152612c8260808301848661297d565b604051601f8201601f191681016001600160401b0381118282101715612ce357612ce3612df1565b604052919050565b60008219821115612cfe57612cfe612ddb565b500190565b600082612d1e57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612d3d57612d3d612ddb565b500290565b600082821015612d5457612d54612ddb565b500390565b60005b83811015612d74578181015183820152602001612d5c565b83811115610a9a5750506000910152565b600181811c90821680612d9957607f821691505b60208210811415612dba57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dd457612dd4612ddb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110f857600080fdfea2646970667358221220db42293ac5de16c4690be27301c3496a8a8a2c2d400f4b369d2f9b946aa8fcc364736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000000084f6d6e6920496e7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f4d4e4900000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061027c5760003560e01c806381c986ee1161014f578063b62496f5116100c1578063d73f057e1161007a578063d73f057e146107df578063dd62ed3e146107ff578063f2fde38b14610845578063f429389014610865578063f8b45b051461087a578063ff99574b1461089057600080fd5b8063b62496f514610722578063bbc0c74214610752578063c02466681461076c578063c18bc1951461078c578063cbed8b9c146107ac578063d1deba1f146107cc57600080fd5b806395d89b411161011357806395d89b411461066d5780639a7a23d6146106825780639d1f6113146106a2578063a457c2d7146106c2578063a9059cbb146106e2578063b515566a1461070257600080fd5b806381c986ee146105995780638a8c523c146105b95780638c0b5e22146105ce5780638da5cb5b146105e45780638ee749121461060257600080fd5b8063273123b7116101f357806347853435116101ac57806347853435146104d95780635d098b38146104ee5780635e280f111461050e57806370a082311461052e578063715018a61461056457806375f0a8741461057957600080fd5b8063273123b714610411578063313ce5671461043157806336da46c91461044d57806339509351146104605780633bbac5791461048057806342d65a8d146104b957600080fd5b80630b78f9c0116102455780630b78f9c01461035257806310ddb1371461037257806318160ddd146103925780631c37a822146103b1578063203e727e146103d157806323b872dd146103f157600080fd5b80621d3567146102815780630265b3ab146102a357806306fdde03146102e057806307e0db1714610302578063095ea7b314610322575b600080fd5b34801561028d57600080fd5b506102a161029c366004612868565b6108a6565b005b3480156102af57600080fd5b506102c36102be366004612944565b610aa0565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ec57600080fd5b506102f5610aca565b6040516102d79190612a99565b34801561030e57600080fd5b506102a161031d3660046126cb565b610b5c565b34801561032e57600080fd5b5061034261033d3660046125ed565b610beb565b60405190151581526020016102d7565b34801561035e57600080fd5b506102a161036d36600461295c565b610c03565b34801561037e57600080fd5b506102a161038d3660046126cb565b610c8c565b34801561039e57600080fd5b506002545b6040519081526020016102d7565b3480156103bd57600080fd5b506102a16103cc366004612868565b610cea565b3480156103dd57600080fd5b506102a16103ec366004612944565b610d6f565b3480156103fd57600080fd5b5061034261040c36600461257c565b610e0c565b34801561041d57600080fd5b506102a161042c3660046124f4565b610e30565b34801561043d57600080fd5b50604051601281526020016102d7565b6102a161045b366004612735565b610e7b565b34801561046c57600080fd5b5061034261047b3660046125ed565b610f45565b34801561048c57600080fd5b5061034261049b3660046124f4565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156104c557600080fd5b506102a16104d43660046126e5565b610f84565b3480156104e557600080fd5b506102a1611019565b3480156104fa57600080fd5b506102a16105093660046124f4565b6110a8565b34801561051a57600080fd5b506006546102c3906001600160a01b031681565b34801561053a57600080fd5b506103a36105493660046124f4565b6001600160a01b031660009081526020819052604090205490565b34801561057057600080fd5b506102a16110fb565b34801561058557600080fd5b50600a546102c3906001600160a01b031681565b3480156105a557600080fd5b506102f56105b43660046126cb565b61112f565b3480156105c557600080fd5b506102a16111c9565b3480156105da57600080fd5b506103a360145481565b3480156105f057600080fd5b506005546001600160a01b03166102c3565b34801561060e57600080fd5b5061065861061d36600461278c565b600760209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b604080519283526020830191909152016102d7565b34801561067957600080fd5b506102f5611206565b34801561068e57600080fd5b506102a161069d3660046125bc565b611215565b3480156106ae57600080fd5b506102f56106bd3660046126cb565b61126a565b3480156106ce57600080fd5b506103426106dd3660046125ed565b611283565b3480156106ee57600080fd5b506103426106fd3660046125ed565b611315565b34801561070e57600080fd5b506102a161071d366004612618565b611323565b34801561072e57600080fd5b5061034261073d3660046124f4565b600c6020526000908152604090205460ff1681565b34801561075e57600080fd5b506010546103429060ff1681565b34801561077857600080fd5b506102a16107873660046125bc565b6113c7565b34801561079857600080fd5b506102a16107a7366004612944565b61141c565b3480156107b857600080fd5b506102a16107c73660046128e9565b6114c2565b6102a16107da3660046127e0565b61155d565b3480156107eb57600080fd5b506102a16107fa3660046126e5565b6116ca565b34801561080b57600080fd5b506103a361081a366004612544565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561085157600080fd5b506102a16108603660046124f4565b611712565b34801561087157600080fd5b506102a16117aa565b34801561088657600080fd5b506103a360155481565b34801561089c57600080fd5b506103a360165481565b6006546001600160a01b031633146108bd57600080fd5b61ffff8416600090815260086020526040902080546108db90612d85565b9050835114801561091a575061ffff841660009081526008602052604090819020905161090891906129fe565b60405180910390208380519060200120145b6109885760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a822906109b1908790879087908790600401612c44565b600060405180830381600087803b1580156109cb57600080fd5b505af19250505080156109dc575060015b610a9a576040518060400160405280825181526020018280519060200120815250600760008661ffff1661ffff16815260200190815260200160002084604051610a2691906129e2565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610a91908690869086908690612c44565b60405180910390a15b50505050565b600f8181548110610ab057600080fd5b6000918252602090912001546001600160a01b0316905081565b606060038054610ad990612d85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612d85565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b865760405162461bcd60e51b815260040161097f90612aef565b6006546040516307e0db1760e01b815261ffff831660048201526001600160a01b03909116906307e0db17906024015b600060405180830381600087803b158015610bd057600080fd5b505af1158015610be4573d6000803e3d6000fd5b5050505050565b600033610bf9818585611821565b5060019392505050565b6005546001600160a01b03163314610c2d5760405162461bcd60e51b815260040161097f90612aef565b60198211158015610c3f575060198111155b610c845760405162461bcd60e51b815260206004820152601660248201527546656573206d75737420626520756e6465722032352560501b604482015260640161097f565b601255601355565b6005546001600160a01b03163314610cb65760405162461bcd60e51b815260040161097f90612aef565b6006546040516310ddb13760e01b815261ffff831660048201526001600160a01b03909116906310ddb13790602401610bb6565b33301480610d0257506005546001600160a01b031633145b610d635760405162461bcd60e51b815260206004820152602c60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526b103132902a393ab9ba32b21760a11b606482015260840161097f565b610a9a84848484611945565b6005546001600160a01b03163314610d995760405162461bcd60e51b815260040161097f90612aef565b6103e8601654610da99190612d03565b811015610e075760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420736574206d61785478416d6f756e74206c6f776572207468616044820152656e20302e312560d01b606482015260840161097f565b601455565b600033610e1a858285611972565b610e258585856119fe565b506001949350505050565b6005546001600160a01b03163314610e5a5760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b336000908152600e602052604090205460ff1615610e9857600080fd5b610ea23382611faa565b6040805133602082015290810182905260009060600160408051601f198184030181526006546020840183526000808552925162c5803160e81b81529194506001600160a01b03169263c5803100923492610f0c928b928b928b928a923392909190600401612b90565b6000604051808303818588803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b50505050505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bf99082908690610f7f908790612ceb565b611821565b6005546001600160a01b03163314610fae5760405162461bcd60e51b815260040161097f90612aef565b6006546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d90610fe290869086908690600401612b69565b600060405180830381600087803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b031633146110435760405162461bcd60e51b815260040161097f90612aef565b6110a6600f80548060200260200160405190810160405280929190818152602001828054801561109c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161107e575b5050505050611323565b565b6005546001600160a01b031633146110d25760405162461bcd60e51b815260040161097f90612aef565b600a80546001600160a01b0319166001600160a01b0383161790556110f88160016113c7565b50565b6005546001600160a01b031633146111255760405162461bcd60e51b815260040161097f90612aef565b6110a660006120f8565b6008602052600090815260409020805461114890612d85565b80601f016020809104026020016040519081016040528092919081815260200182805461117490612d85565b80156111c15780601f10611196576101008083540402835291602001916111c1565b820191906000526020600020905b8154815290600101906020018083116111a457829003601f168201915b505050505081565b6005546001600160a01b031633146111f35760405162461bcd60e51b815260040161097f90612aef565b436011556010805460ff19166001179055565b606060048054610ad990612d85565b6005546001600160a01b0316331461123f5760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6009602052600090815260409020805461114890612d85565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156113085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161097f565b610e258286868403611821565b600033610bf98185856119fe565b6005546001600160a01b0316331461134d5760405162461bcd60e51b815260040161097f90612aef565b60005b81518110156113c3576001600e600084848151811061137f57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806113bb81612dc0565b915050611350565b5050565b6005546001600160a01b031633146113f15760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114465760405162461bcd60e51b815260040161097f90612aef565b6103e860165460056114589190612d23565b6114629190612d03565b8110156114bd5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161097f565b601555565b6005546001600160a01b031633146114ec5760405162461bcd60e51b815260040161097f90612aef565b6006546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c906115249088908890889088908890600401612c8d565b600060405180830381600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050505050505050565b61ffff8516600090815260076020526040808220905161157e9087906129e2565b90815260408051602092819003830190206001600160401b03871660009081529252902060018101549091506116055760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b606482015260840161097f565b80548214801561162f5750806001015483836040516116259291906129d2565b6040518091039020145b61167b5760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000604482015260640161097f565b60008082556001820155604051630e1bd41160e11b81523090631c37a822906116b09089908990899089908990600401612bf9565b600060405180830381600087803b158015610f2557600080fd5b6005546001600160a01b031633146116f45760405162461bcd60e51b815260040161097f90612aef565b61ffff83166000908152600860205260409020610a9a90838361237d565b6005546001600160a01b0316331461173c5760405162461bcd60e51b815260040161097f90612aef565b6001600160a01b0381166117a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161097f565b6110f8816120f8565b6005546001600160a01b031633146117d45760405162461bcd60e51b815260040161097f90612aef565b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610a9a576040519150601f19603f3d011682016040523d82523d6000602084013e610a9a565b6001600160a01b0383166118835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161097f565b6001600160a01b0382166118e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161097f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000808280602001905181019061195c9190612517565b9150915061196a828261214a565b505050505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610a9a57818110156119f15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161097f565b610a9a8484848403611821565b6001600160a01b038316611a245760405162461bcd60e51b815260040161097f90612b24565b6001600160a01b038216611a4a5760405162461bcd60e51b815260040161097f90612aac565b6001600160a01b0383166000908152600e602052604090205460ff16158015611a8c57506001600160a01b0382166000908152600e602052604090205460ff16155b611a9557600080fd5b80611aab57611aa683836000612229565b505050565b6005546001600160a01b03848116911614801590611ad757506005546001600160a01b03838116911614155b8015611aeb57506001600160a01b03821615155b8015611b0257506001600160a01b03821661dead14155b15611e855760105460ff16611b95576001600160a01b0383166000908152600d602052604090205460ff1680611b5057506001600160a01b0382166000908152600d602052604090205460ff165b611b955760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161097f565b6001600160a01b0383166000908152600c602052604090205460ff168015611bd657506001600160a01b0382166000908152600d602052604090205460ff16155b15611c4757601454811115611c425760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c20b6b7bab73a1760a11b606482015260840161097f565b611cf5565b6001600160a01b0382166000908152600c602052604090205460ff168015611c8857506001600160a01b0383166000908152600d602052604090205460ff16155b15611cf557601454811115611cf55760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c20b6b7bab73a1760991b606482015260840161097f565b6001600160a01b0382166000908152600c602052604090205460ff16158015611d3757506001600160a01b0383166000908152600d602052604090205460ff16155b15611dc25760155481611d5f846001600160a01b031660009081526020819052604090205490565b611d699190612ceb565b10611dc25760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b606482015260840161097f565b60105460ff168015611de15750601154611ddd906002612ceb565b4311155b8015611e0557506001600160a01b0383166000908152600c602052604090205460ff165b8015611e1f5750600b546001600160a01b03838116911614155b8015611e3457506001600160a01b0382163014155b15611e8557600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b0383166000908152600d602052604090205460019060ff1680611ec757506001600160a01b0383166000908152600d602052604090205460ff165b15611ed0575060005b60008115611f9f576001600160a01b0384166000908152600c602052604090205460ff168015611f0257506000601254115b15611f2857606460125484611f179190612d23565b611f219190612d03565b9050611f74565b6001600160a01b0385166000908152600c602052604090205460ff168015611f5257506000601354115b15611f7457606460135484611f679190612d23565b611f719190612d03565b90505b8015611f9257600a54611f929086906001600160a01b031683612229565b611f9c8184612d42565b92505b610be4858585612229565b6001600160a01b03821661200a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161097f565b6001600160a01b0382166000908152602081905260409020548181101561207e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161097f565b6001600160a01b03831660009081526020819052604081208383039055600280548492906120ad908490612d42565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166121a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161097f565b80600260008282546121b29190612ceb565b90915550506001600160a01b038216600090815260208190526040812080548392906121df908490612ceb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831661224f5760405162461bcd60e51b815260040161097f90612b24565b6001600160a01b0382166122755760405162461bcd60e51b815260040161097f90612aac565b6001600160a01b038316600090815260208190526040902054818110156122ed5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161097f565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612324908490612ceb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237091815260200190565b60405180910390a3610a9a565b82805461238990612d85565b90600052602060002090601f0160209004810192826123ab57600085556123f1565b82601f106123c45782800160ff198235161785556123f1565b828001600101855582156123f1579182015b828111156123f15782358255916020019190600101906123d6565b506123fd929150612401565b5090565b5b808211156123fd5760008155600101612402565b60008083601f840112612427578182fd5b5081356001600160401b0381111561243d578182fd5b60208301915083602082850101111561245557600080fd5b9250929050565b600082601f83011261246c578081fd5b81356001600160401b0381111561248557612485612df1565b612498601f8201601f1916602001612cbb565b8181528460208386010111156124ac578283fd5b816020850160208301379081016020019190915292915050565b803561ffff811681146124d857600080fd5b919050565b80356001600160401b03811681146124d857600080fd5b600060208284031215612505578081fd5b813561251081612e07565b9392505050565b60008060408385031215612529578081fd5b825161253481612e07565b6020939093015192949293505050565b60008060408385031215612556578182fd5b823561256181612e07565b9150602083013561257181612e07565b809150509250929050565b600080600060608486031215612590578081fd5b833561259b81612e07565b925060208401356125ab81612e07565b929592945050506040919091013590565b600080604083850312156125ce578182fd5b82356125d981612e07565b915060208301358015158114612571578182fd5b600080604083850312156125ff578182fd5b823561260a81612e07565b946020939093013593505050565b6000602080838503121561262a578182fd5b82356001600160401b0380821115612640578384fd5b818501915085601f830112612653578384fd5b81358181111561266557612665612df1565b8060051b9150612676848301612cbb565b8181528481019084860184860187018a1015612690578788fd5b8795505b838610156126be57803594506126a985612e07565b84835260019590950194918601918601612694565b5098975050505050505050565b6000602082840312156126dc578081fd5b612510826124c6565b6000806000604084860312156126f9578283fd5b612702846124c6565b925060208401356001600160401b0381111561271c578283fd5b61272886828701612416565b9497909650939450505050565b6000806000806060858703121561274a578081fd5b612753856124c6565b935060208501356001600160401b0381111561276d578182fd5b61277987828801612416565b9598909750949560400135949350505050565b6000806000606084860312156127a0578283fd5b6127a9846124c6565b925060208401356001600160401b038111156127c3578283fd5b6127cf8682870161245c565b925050604084013590509250925092565b6000806000806000608086880312156127f7578283fd5b612800866124c6565b945060208601356001600160401b038082111561281b578485fd5b61282789838a0161245c565b9550612835604089016124dd565b9450606088013591508082111561284a578283fd5b5061285788828901612416565b969995985093965092949392505050565b6000806000806080858703121561287d578182fd5b612886856124c6565b935060208501356001600160401b03808211156128a1578384fd5b6128ad8883890161245c565b94506128bb604088016124dd565b935060608701359150808211156128d0578283fd5b506128dd8782880161245c565b91505092959194509250565b600080600080600060808688031215612900578283fd5b612909866124c6565b9450612917602087016124c6565b93506040860135925060608601356001600160401b03811115612938578182fd5b61285788828901612416565b600060208284031215612955578081fd5b5035919050565b6000806040838503121561296e578182fd5b50508035926020909101359150565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526129be816020860160208601612d59565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b600082516129f4818460208701612d59565b9190910192915050565b600080835482600182811c915080831680612a1a57607f831692505b6020808410821415612a3a57634e487b7160e01b87526022600452602487fd5b818015612a4e5760018114612a5f57612a8b565b60ff19861689528489019650612a8b565b60008a815260209020885b86811015612a835781548b820152908501908301612a6a565b505084890196505b509498975050505050505050565b60208152600061251060208301846129a6565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b61ffff84168152604060208201526000612b8760408301848661297d565b95945050505050565b61ffff8816815260c060208201526000612bae60c08301888a61297d565b8281036040840152612bc081886129a6565b6001600160a01b0387811660608601528616608085015283810360a08501529050612beb81856129a6565b9a9950505050505050505050565b61ffff86168152608060208201526000612c1660808301876129a6565b6001600160401b03861660408401528281036060840152612c3881858761297d565b98975050505050505050565b61ffff85168152608060208201526000612c6160808301866129a6565b6001600160401b03851660408401528281036060840152612c8281856129a6565b979650505050505050565b600061ffff808816835280871660208401525084604083015260806060830152612c8260808301848661297d565b604051601f8201601f191681016001600160401b0381118282101715612ce357612ce3612df1565b604052919050565b60008219821115612cfe57612cfe612ddb565b500190565b600082612d1e57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612d3d57612d3d612ddb565b500290565b600082821015612d5457612d54612ddb565b500390565b60005b83811015612d74578181015183820152602001612d5c565b83811115610a9a5750506000910152565b600181811c90821680612d9957607f821691505b60208210811415612dba57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dd457612dd4612ddb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110f857600080fdfea2646970667358221220db42293ac5de16c4690be27301c3496a8a8a2c2d400f4b369d2f9b946aa8fcc364736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000000084f6d6e6920496e7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f4d4e4900000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Omni Inu
Arg [1] : symbol_ (string): OMNI
Arg [2] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 4f6d6e6920496e75000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4f4d4e4900000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

570:7769:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;789:935:7;;;;;;;;;;-1:-1:-1;789:935:7;;;;;:::i;:::-;;:::i;:::-;;1050:30:8;;;;;;;;;;-1:-1:-1;1050:30:8;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;11580:32:10;;;11562:51;;11550:2;11535:18;1050:30:8;;;;;;;;2135:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7907:119:8:-;;;;;;;;;;-1:-1:-1;7907:119:8;;;;;:::i;:::-;;:::i;4412:197:1:-;;;;;;;;;;-1:-1:-1;4412:197:1;;;;;:::i;:::-;;:::i;:::-;;;12068:14:10;;12061:22;12043:41;;12031:2;12016:18;4412:197:1;11998:92:10;2624:199:8;;;;;;;;;;-1:-1:-1;2624:199:8;;;;;:::i;:::-;;:::i;8032:125::-;;;;;;;;;;-1:-1:-1;8032:125:8;;;;;:::i;:::-;;:::i;3223:106:1:-;;;;;;;;;;-1:-1:-1;3310:12:1;;3223:106;;;25027:25:10;;;25015:2;25000:18;3223:106:1;24982:76:10;1732:344:7;;;;;;;;;;-1:-1:-1;1732:344:7;;;;;:::i;:::-;;:::i;3024:189:8:-;;;;;;;;;;-1:-1:-1;3024:189:8;;;;;:::i;:::-;;:::i;5171:286:1:-;;;;;;;;;;-1:-1:-1;5171:286:1;;;;;:::i;:::-;;:::i;2179:86:8:-;;;;;;;;;;-1:-1:-1;2179:86:8;;;;;:::i;:::-;;:::i;3072:91:1:-;;;;;;;;;;-1:-1:-1;3072:91:1;;3154:2;25458:36:10;;25446:2;25431:18;3072:91:1;25413:87:10;5876:1182:8;;;;;;:::i;:::-;;:::i;5852:236:1:-;;;;;;;;;;-1:-1:-1;5852:236:1;;;;;:::i;:::-;;:::i;2269:79:8:-;;;;;;;;;;-1:-1:-1;2269:79:8;;;;;:::i;:::-;-1:-1:-1;;;;;2335:9:8;2318:4;2335:9;;;:4;:9;;;;;;;;;2269:79;8163:174;;;;;;;;;;-1:-1:-1;8163:174:8;;;;;:::i;:::-;;:::i;2827:83::-;;;;;;;;;;;;;:::i;2486:135::-;;;;;;;;;;-1:-1:-1;2486:135:8;;;;;:::i;:::-;;:::i;239:34:7:-;;;;;;;;;;-1:-1:-1;239:34:7;;;;-1:-1:-1;;;;;239:34:7;;;3387:125:1;;;;;;;;;;-1:-1:-1;3387:125:1;;;;;:::i;:::-;-1:-1:-1;;;;;3487:18:1;3461:7;3487:18;;;;;;;;;;;;3387:125;1661:101:9;;;;;;;;;;;;;:::i;708:84:8:-;;;;;;;;;;-1:-1:-1;708:84:8;;;;-1:-1:-1;;;;;708:84:8;;;476:51:7;;;;;;;;;;-1:-1:-1;476:51:7;;;;;:::i;:::-;;:::i;2914:103:8:-;;;;;;;;;;;;;:::i;1222:26::-;;;;;;;;;;;;;;;;1029:85:9;;;;;;;;;;-1:-1:-1;1101:6:9;;-1:-1:-1;;;;;1101:6:9;1029:85;;379:90:7;;;;;;;;;;-1:-1:-1;379:90:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25237:25:10;;;25293:2;25278:18;;25271:34;;;;25210:18;379:90:7;25192:119:10;2346:102:1;;;;;;;;;;;;;:::i;1868:136:8:-;;;;;;;;;;-1:-1:-1;1868:136:8;;;;;:::i;:::-;;:::i;665:39::-;;;;;;;;;;-1:-1:-1;665:39:8;;;;;:::i;:::-;;:::i;6575:429:1:-;;;;;;;;;;-1:-1:-1;6575:429:1;;;;;:::i;:::-;;:::i;3708:189::-;;;;;;;;;;-1:-1:-1;3708:189:1;;;;;:::i;:::-;;:::i;2009:160:8:-;;;;;;;;;;-1:-1:-1;2009:160:8;;;;;:::i;:::-;;:::i;892:58::-;;;;;;;;;;-1:-1:-1;892:58:8;;;;;:::i;:::-;;;;;;;;;;;;;;;;1085:33;;;;;;;;;;-1:-1:-1;1085:33:8;;;;;;;;2352:130;;;;;;;;;;-1:-1:-1;2352:130:8;;;;;:::i;:::-;;:::i;3219:195::-;;;;;;;;;;-1:-1:-1;3219:195:8;;;;;:::i;:::-;;:::i;7660:241::-;;;;;;;;;;-1:-1:-1;7660:241:8;;;;;:::i;:::-;;:::i;2397:758:7:-;;;;;;:::i;:::-;;:::i;3163:158::-;;;;;;;;;;-1:-1:-1;3163:158:7;;;;;:::i;:::-;;:::i;3955:149:1:-;;;;;;;;;;-1:-1:-1;3955:149:1;;;;;:::i;:::-;-1:-1:-1;;;;;4070:18:1;;;4044:7;4070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3955:149;1911:198:9;;;;;;;;;;-1:-1:-1;1911:198:9;;;;;:::i;:::-;;:::i;5596:141:8:-;;;;;;;;;;;;;:::i;1251:24::-;;;;;;;;;;;;;;;;1281:51;;;;;;;;;;;;;;;;789:935:7;951:8;;-1:-1:-1;;;;;951:8:7;929:10;:31;921:40;;;;;;1072:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;1050:11;:18;:61;:134;;;;-1:-1:-1;1151:32:7;;;;;;;:19;:32;;;;;;;1141:43;;;;1151:32;1141:43;:::i;:::-;;;;;;;;1125:11;1115:22;;;;;;:69;1050:134;1042:199;;;;-1:-1:-1;;;1042:199:7;;18009:2:10;1042:199:7;;;17991:21:10;18048:2;18028:18;;;18021:30;18087:34;18067:18;;;18060:62;-1:-1:-1;;;18138:18:10;;;18131:50;18198:19;;1042:199:7;;;;;;;;;1369:60;;-1:-1:-1;;;1369:60:7;;:4;;:16;;:60;;1386:11;;1399;;1412:6;;1420:8;;1369:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1365:352;;1576:52;;;;;;;;1591:8;:15;1576:52;;;;1618:8;1608:19;;;;;;1576:52;;;1525:14;:27;1540:11;1525:27;;;;;;;;;;;;;;;1553:11;1525:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1525:48:7;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;1648:57;;;;1662:11;;1675;;1566:6;;1696:8;;1648:57;:::i;:::-;;;;;;;;1365:352;789:935;;;;:::o;1050:30:8:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1050:30:8;;-1:-1:-1;1050:30:8;:::o;2135:98:1:-;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;7907:119:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;7986:8:8::1;::::0;:33:::1;::::0;-1:-1:-1;;;7986:33:8;;22012:6:10;22000:19;;7986:33:8::1;::::0;::::1;21982:38:10::0;-1:-1:-1;;;;;7986:8:8;;::::1;::::0;:23:::1;::::0;21955:18:10;;7986:33:8::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7907:119:::0;:::o;4412:197:1:-;4495:4;719:10:0;4549:32:1;719:10:0;4565:7:1;4574:6;4549:8;:32::i;:::-;-1:-1:-1;4598:4:1;;4412:197;-1:-1:-1;;;4412:197:1:o;2624:199:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2719:2:8::1;2707:8;:14;;:33;;;;;2738:2;2725:9;:15;;2707:33;2699:68;;;::::0;-1:-1:-1;;;2699:68:8;;17297:2:10;2699:68:8::1;::::0;::::1;17279:21:10::0;17336:2;17316:18;;;17309:30;-1:-1:-1;;;17355:18:10;;;17348:52;17417:18;;2699:68:8::1;17269:172:10::0;2699:68:8::1;2774:8;:20:::0;2798:7:::1;:18:::0;2624:199::o;8032:125::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;8114:8:8::1;::::0;:36:::1;::::0;-1:-1:-1;;;8114:36:8;;22012:6:10;22000:19;;8114:36:8::1;::::0;::::1;21982:38:10::0;-1:-1:-1;;;;;8114:8:8;;::::1;::::0;:26:::1;::::0;21955:18:10;;8114:36:8::1;21937:89:10::0;1732:344:7;1901:10;1923:4;1901:27;;:52;;-1:-1:-1;1101:6:9;;-1:-1:-1;;;;;1101:6:9;1932:10:7;:21;1901:52;1893:109;;;;-1:-1:-1;;;1893:109:7;;16115:2:10;1893:109:7;;;16097:21:10;16154:2;16134:18;;;16127:30;16193:34;16173:18;;;16166:62;-1:-1:-1;;;16244:18:10;;;16237:42;16296:19;;1893:109:7;16087:234:10;1893:109:7;2013:55;2025:11;2038;2051:6;2059:8;2013:10;:55::i;3024:189:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3129:4:8::1;3115:11;;:18;;;;:::i;:::-;3105:6;:28;;3097:79;;;::::0;-1:-1:-1;;;3097:79:8;;20867:2:10;3097:79:8::1;::::0;::::1;20849:21:10::0;20906:2;20886:18;;;20879:30;20945:34;20925:18;;;20918:62;-1:-1:-1;;;20996:18:10;;;20989:36;21042:19;;3097:79:8::1;20839:228:10::0;3097:79:8::1;3186:11;:20:::0;3024:189::o;5171:286:1:-;5298:4;719:10:0;5354:38:1;5370:4;719:10:0;5385:6:1;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;-1:-1:-1;5446:4:1;;5171:286;-1:-1:-1;;;;5171:286:1:o;2179:86:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;2238:12:8::1;2253:5;2238:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;2238:20:8::1;::::0;;2179:86::o;5876:1182::-;6217:10;6212:16;;;;:4;:16;;;;;;;;6211:17;6203:26;;;;;;6283:23;6289:10;6301:4;6283:5;:23::i;:::-;6400:28;;;6411:10;6400:28;;;11798:51:10;11865:18;;;11858:34;;;6377:20:8;;11771:18:10;;6400:28:8;;;-1:-1:-1;;6400:28:8;;;;;;6473:8;;6400:28;6963:9;;;;6473:8;6963:9;;;6473:578;;-1:-1:-1;;;6473:578:8;;6400:28;;-1:-1:-1;;;;;;6473:8:8;;:13;;6493:9;;6473:578;;6517:8;;6584:22;;;;6400:28;;6746:10;;6473:8;;6400:28;6473:578;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5876:1182;;;;;:::o;5852:236:1:-;719:10:0;5940:4:1;6019:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6019:27:1;;;;;;;;;;5940:4;;719:10:0;5994:66:1;;719:10:0;;6019:27:1;;:40;;6049:10;;6019:40;:::i;:::-;5994:8;:66::i;8163:174:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;8277:8:8::1;::::0;:53:::1;::::0;-1:-1:-1;;;8277:53:8;;-1:-1:-1;;;;;8277:8:8;;::::1;::::0;:27:::1;::::0;:53:::1;::::0;8305:11;;8318;;;;8277:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8163:174:::0;;;:::o;2827:83::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2884:22:8::1;2892:13;2884:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;2884:22:8::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;:7;:22::i;:::-;2827:83::o:0;2486:135::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2554:15:8::1;:27:::0;;-1:-1:-1;;;;;;2554:27:8::1;-1:-1:-1::0;;;;;2554:27:8;::::1;;::::0;;2585:32:::1;2554:27:::0;-1:-1:-1;2585:15:8::1;:32::i;:::-;2486:135:::0;:::o;1661:101:9:-;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;476:51:7:-:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2914:103:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2977:12:8::1;2962;:27:::0;2993:13:::1;:20:::0;;-1:-1:-1;;2993:20:8::1;3009:4;2993:20;::::0;;2914:103::o;2346:102:1:-;2402:13;2434:7;2427:14;;;;;:::i;1868:136:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1958:31:8;;;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;1958:39:8::1;::::0;::::1;;::::0;;;::::1;::::0;;1868:136::o;665:39::-;;;;;;;;;;;;;;;;:::i;6575:429:1:-;719:10:0;6668:4:1;6749:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6749:27:1;;;;;;;;;;6668:4;;719:10:0;6794:35:1;;;;6786:85;;;;-1:-1:-1;;;6786:85:1;;21274:2:10;6786:85:1;;;21256:21:10;21313:2;21293:18;;;21286:30;21352:34;21332:18;;;21325:62;-1:-1:-1;;;21403:18:10;;;21396:35;21448:19;;6786:85:1;21246:227:10;6786:85:1;6905:60;6914:5;6921:7;6949:15;6930:16;:34;6905:8;:60::i;3708:189::-;3787:4;719:10:0;3841:28:1;719:10:0;3858:2:1;3862:6;3841:9;:28::i;2009:160:8:-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;2082:6:8::1;2077:86;2098:5;:12;2094:1;:16;2077:86;;;2148:4;2131;:14;2136:5;2142:1;2136:8;;;;;;-1:-1:-1::0;;;2136:8:8::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2131:14:8::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;2131:14:8;:21;;-1:-1:-1;;2131:21:8::1;::::0;::::1;;::::0;;;::::1;::::0;;2112:3;::::1;::::0;::::1;:::i;:::-;;;;2077:86;;;;2009:160:::0;:::o;2352:130::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;2436:28:8;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;2436:39:8::1;::::0;::::1;;::::0;;;::::1;::::0;;2352:130::o;3219:195::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3332:4:8::1;3314:11;;3328:1;3314:15;;;;:::i;:::-;:22;;;;:::i;:::-;3303:6;:34;;3295:83;;;::::0;-1:-1:-1;;;3295:83:8;;14945:2:10;3295:83:8::1;::::0;::::1;14927:21:10::0;14984:2;14964:18;;;14957:30;15023:34;15003:18;;;14996:62;-1:-1:-1;;;15074:18:10;;;15067:34;15118:19;;3295:83:8::1;14917:226:10::0;3295:83:8::1;3388:9;:18:::0;3219:195::o;7660:241::-;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;7834:8:8::1;::::0;:60:::1;::::0;-1:-1:-1;;;7834:60:8;;-1:-1:-1;;;;;7834:8:8;;::::1;::::0;:18:::1;::::0;:60:::1;::::0;7853:8;;7863;;7873:11;;7886:7;;;;7834:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7660:241:::0;;;;;:::o;2397:758:7:-;2613:27;;;2578:32;2613:27;;;:14;:27;;;;;;:40;;;;2641:11;;2613:40;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2613:48:7;;;;;;;;;;2680:21;;;;2613:48;;-1:-1:-1;2672:86:7;;;;-1:-1:-1;;;2672:86:7;;20460:2:10;2672:86:7;;;20442:21:10;20499:2;20479:18;;;20472:30;20538:34;20518:18;;;20511:62;-1:-1:-1;;;20589:18:10;;;20582:36;20635:19;;2672:86:7;20432:228:10;2672:86:7;2796:23;;2777:42;;:90;;;;;2846:9;:21;;;2833:8;;2823:19;;;;;;;:::i;:::-;;;;;;;;:44;2777:90;2769:129;;;;-1:-1:-1;;;2769:129:7;;16528:2:10;2769:129:7;;;16510:21:10;16567:2;16547:18;;;16540:30;16606:28;16586:18;;;16579:56;16652:18;;2769:129:7;16500:176:10;2769:129:7;2972:1;2946:27;;;2984:21;;;:34;3087:60;;-1:-1:-1;;;3087:60:7;;:4;;:16;;:60;;3104:11;;3117;;3130:6;;3138:8;;;;3087:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;3163:158;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;3267:29:7::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;3299:14;;3267:46:::1;:::i;1911:198:9:-:0;1101:6;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:9;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:9;;14135:2:10;1991:73:9::1;::::0;::::1;14117:21:10::0;14174:2;14154:18;;;14147:30;14213:34;14193:18;;;14186:62;-1:-1:-1;;;14264:18:10;;;14257:36;14310:19;;1991:73:9::1;14107:228:10::0;1991:73:9::1;2074:28;2093:8;2074:18;:28::i;5596:141:8:-:0;1101:6:9;;-1:-1:-1;;;;;1101:6:9;719:10:0;1241:23:9;1233:68;;;;-1:-1:-1;;;1233:68:9;;;;;;;:::i;:::-;5678:15:8::1;::::0;5670:63:::1;::::0;5641:12:::1;::::0;-1:-1:-1;;;;;5678:15:8::1;::::0;5707:21:::1;::::0;5641:12;5670:63;5641:12;5670:63;5707:21;5678:15;5670:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10102:370:1::0;-1:-1:-1;;;;;10233:19:1;;10225:68;;;;-1:-1:-1;;;10225:68:1;;20055:2:10;10225:68:1;;;20037:21:10;20094:2;20074:18;;;20067:30;20133:34;20113:18;;;20106:62;-1:-1:-1;;;20184:18:10;;;20177:34;20228:19;;10225:68:1;20027:226:10;10225:68:1;-1:-1:-1;;;;;10311:21:1;;10303:68;;;;-1:-1:-1;;;10303:68:1;;14542:2:10;10303:68:1;;;14524:21:10;14581:2;14561:18;;;14554:30;14620:34;14600:18;;;14593:62;-1:-1:-1;;;14671:18:10;;;14664:32;14713:19;;10303:68:1;14514:224:10;10303:68:1;-1:-1:-1;;;;;10382:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10433:32;;25027:25:10;;;10433:32:1;;25000:18:10;10433:32:1;;;;;;;10102:370;;;:::o;7192:339:8:-;7343:14;7359:8;7382;7371:37;;;;;;;;;;;;:::i;:::-;7342:66;;;;7506:18;7512:6;7520:3;7506:5;:18::i;:::-;7192:339;;;;;;:::o;10749:441:1:-;-1:-1:-1;;;;;4070:18:1;;;10879:24;4070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10945:37:1;;10941:243;;11026:6;11006:16;:26;;10998:68;;;;-1:-1:-1;;;10998:68:1;;15350:2:10;10998:68:1;;;15332:21:10;15389:2;15369:18;;;15362:30;15428:31;15408:18;;;15401:59;15477:18;;10998:68:1;15322:179:10;10998:68:1;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;3420:2172:8:-;-1:-1:-1;;;;;3541:18:8;;3533:68;;;;-1:-1:-1;;;3533:68:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;3619:16:8;;3611:64;;;;-1:-1:-1;;;3611:64:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;3688:10:8;;;;;;:4;:10;;;;;;;;3687:11;:24;;;;-1:-1:-1;;;;;;3703:8:8;;;;;;:4;:8;;;;;;;;3702:9;3687:24;3679:33;;;;;;3726:11;3723:89;;3753:28;3769:4;3775:2;3779:1;3753:15;:28::i;:::-;3420:2172;;;:::o;3723:89::-;1101:6:9;;-1:-1:-1;;;;;3832:15:8;;;1101:6:9;;3832:15:8;;;;:35;;-1:-1:-1;1101:6:9;;-1:-1:-1;;;;;3854:13:8;;;1101:6:9;;3854:13:8;;3832:35;:58;;;;-1:-1:-1;;;;;;3874:16:8;;;;3832:58;:86;;;;-1:-1:-1;;;;;;3897:21:8;;3911:6;3897:21;;3832:86;3824:980;;;3931:13;;;;3927:117;;-1:-1:-1;;;;;3959:25:8;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;3988:23:8;;;;;;:19;:23;;;;;;;;3959:52;3951:87;;;;-1:-1:-1;;;3951:87:8;;13784:2:10;3951:87:8;;;13766:21:10;13823:2;13803:18;;;13796:30;-1:-1:-1;;;13842:18:10;;;13835:52;13904:18;;3951:87:8;13756:172:10;3951:87:8;-1:-1:-1;;;;;4056:31:8;;;;;;:25;:31;;;;;;;;:59;;;;-1:-1:-1;;;;;;4092:23:8;;;;;;:19;:23;;;;;;;;4091:24;4056:59;4052:352;;;4141:11;;4131:6;:21;;4123:78;;;;-1:-1:-1;;;4123:78:8;;19642:2:10;4123:78:8;;;19624:21:10;19681:2;19661:18;;;19654:30;19720:34;19700:18;;;19693:62;-1:-1:-1;;;19771:18:10;;;19764:42;19823:19;;4123:78:8;19614:234:10;4123:78:8;4052:352;;;-1:-1:-1;;;;;4252:29:8;;;;;;:25;:29;;;;;;;;:59;;;;-1:-1:-1;;;;;;4286:25:8;;;;;;:19;:25;;;;;;;;4285:26;4252:59;4248:156;;;4337:11;;4327:6;:21;;4319:79;;;;-1:-1:-1;;;4319:79:8;;16883:2:10;4319:79:8;;;16865:21:10;16922:2;16902:18;;;16895:30;16961:34;16941:18;;;16934:62;-1:-1:-1;;;17012:18:10;;;17005:43;17065:19;;4319:79:8;16855:235:10;4319:79:8;-1:-1:-1;;;;;4417:29:8;;;;;;:25;:29;;;;;;;;4416:30;:60;;;;-1:-1:-1;;;;;;4451:25:8;;;;;;:19;:25;;;;;;;;4450:26;4416:60;4412:181;;;4529:9;;4520:6;4504:13;4514:2;-1:-1:-1;;;;;3487:18:1;3461:7;3487:18;;;;;;;;;;;;3387:125;4504:13:8;:22;;;;:::i;:::-;:34;4496:82;;;;-1:-1:-1;;;4496:82:8;;19238:2:10;4496:82:8;;;19220:21:10;19277:2;19257:18;;;19250:30;19316:34;19296:18;;;19289:62;-1:-1:-1;;;19367:18:10;;;19360:33;19410:19;;4496:82:8;19210:225:10;4496:82:8;4605:13;;;;:49;;;;-1:-1:-1;4638:12:8;;:16;;4653:1;4638:16;:::i;:::-;4622:12;:32;;4605:49;:84;;;;-1:-1:-1;;;;;;4658:31:8;;;;;;:25;:31;;;;;;;;4605:84;:109;;;;-1:-1:-1;4699:15:8;;-1:-1:-1;;;;;4693:21:8;;;4699:15;;4693:21;;4605:109;:132;;;;-1:-1:-1;;;;;;4718:19:8;;4732:4;4718:19;;4605:132;4601:195;;;4759:13;:22;;;;;;;-1:-1:-1;4759:22:8;;;;;;;;-1:-1:-1;;;;;;4759:22:8;-1:-1:-1;;;;;4759:22:8;;;;;4601:195;-1:-1:-1;;;;;4856:25:8;;4823:12;4856:25;;;:19;:25;;;;;;4838:4;;4856:25;;;:52;;-1:-1:-1;;;;;;4885:23:8;;;;;;:19;:23;;;;;;;;4856:52;4853:97;;;-1:-1:-1;4934:5:8;4853:97;4968:12;5070:7;5067:475;;;-1:-1:-1;;;;;5119:29:8;;;;;;:25;:29;;;;;;;;:45;;;;;5163:1;5152:8;;:12;5119:45;5115:263;;;5210:3;5199:8;;5190:6;:17;;;;:::i;:::-;:23;;;;:::i;:::-;5183:30;;5115:263;;;-1:-1:-1;;;;;5271:31:8;;;;;;:25;:31;;;;;;;;:46;;;;;5316:1;5306:7;;:11;5271:46;5268:110;;;5360:3;5350:7;;5341:6;:16;;;;:::i;:::-;:22;;;;:::i;:::-;5334:29;;5268:110;5407:8;;5404:93;;5460:15;;5438:44;;5454:4;;-1:-1:-1;;;;;5460:15:8;5477:4;5438:15;:44::i;:::-;5517:14;5527:4;5517:14;;:::i;:::-;;;5067:475;5552:33;5568:4;5574:2;5578:6;5552:15;:33::i;9103:576:1:-;-1:-1:-1;;;;;9186:21:1;;9178:67;;;;-1:-1:-1;;;9178:67:1;;18430:2:10;9178:67:1;;;18412:21:10;18469:2;18449:18;;;18442:30;18508:34;18488:18;;;18481:62;-1:-1:-1;;;18559:18:10;;;18552:31;18600:19;;9178:67:1;18402:223:10;9178:67:1;-1:-1:-1;;;;;9341:18:1;;9316:22;9341:18;;;;;;;;;;;9377:24;;;;9369:71;;;;-1:-1:-1;;;9369:71:1;;13381:2:10;9369:71:1;;;13363:21:10;13420:2;13400:18;;;13393:30;13459:34;13439:18;;;13432:62;-1:-1:-1;;;13510:18:10;;;13503:32;13552:19;;9369:71:1;13353:224:10;9369:71:1;-1:-1:-1;;;;;9474:18:1;;:9;:18;;;;;;;;;;9495:23;;;9474:44;;9538:12;:22;;9512:6;;9474:9;9538:22;;9512:6;;9538:22;:::i;:::-;;;;-1:-1:-1;;9576:37:1;;25027:25:10;;;9602:1:1;;-1:-1:-1;;;;;9576:37:1;;;;;25015:2:10;25000:18;9576:37:1;;;;;;;3420:2172:8;;;:::o;2263:187:9:-;2355:6;;;-1:-1:-1;;;;;2371:17:9;;;-1:-1:-1;;;;;;2371:17:9;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2263:187;;:::o;8394:389:1:-;-1:-1:-1;;;;;8477:21:1;;8469:65;;;;-1:-1:-1;;;8469:65:1;;21680:2:10;8469:65:1;;;21662:21:10;21719:2;21699:18;;;21692:30;21758:33;21738:18;;;21731:61;21809:18;;8469:65:1;21652:181:10;8469:65:1;8621:6;8605:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8637:18:1;;:9;:18;;;;;;;;;;:28;;8659:6;;8637:9;:28;;8659:6;;8637:28;:::i;:::-;;;;-1:-1:-1;;8680:37:1;;25027:25:10;;;-1:-1:-1;;;;;8680:37:1;;;8697:1;;8680:37;;25015:2:10;25000:18;8680:37:1;;;;;;;2077:86:8::1;2009:160:::0;:::o;7467:651:1:-;-1:-1:-1;;;;;7593:18:1;;7585:68;;;;-1:-1:-1;;;7585:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7671:16:1;;7663:64;;;;-1:-1:-1;;;7663:64:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7809:15:1;;7787:19;7809:15;;;;;;;;;;;7842:21;;;;7834:72;;;;-1:-1:-1;;;7834:72:1;;15708:2:10;7834:72:1;;;15690:21:10;15747:2;15727:18;;;15720:30;15786:34;15766:18;;;15759:62;-1:-1:-1;;;15837:18:10;;;15830:36;15883:19;;7834:72:1;15680:228:10;7834:72:1;-1:-1:-1;;;;;7940:15:1;;;:9;:15;;;;;;;;;;;7958:20;;;7940:38;;7998:13;;;;;;;;:23;;7972:6;;7940:9;7998:23;;7972:6;;7998:23;:::i;:::-;;;;;;;;8052:2;-1:-1:-1;;;;;8037:26:1;8046:4;-1:-1:-1;;;;;8037:26:1;;8056:6;8037:26;;;;25027:25:10;;25015:2;25000:18;;24982:76;8037:26:1;;;;;;;;8074:37;3420:2172:8;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:375:10;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:2;;154:8;144;137:26;96:2;-1:-1:-1;184:20:10;;-1:-1:-1;;;;;216:30:10;;213:2;;;266:8;256;249:26;213:2;310:4;302:6;298:17;286:29;;362:3;355:4;346:6;338;334:19;330:30;327:39;324:2;;;379:1;376;369:12;324:2;86:303;;;;;:::o;394:550::-;436:5;489:3;482:4;474:6;470:17;466:27;456:2;;511:5;504;497:20;456:2;551:6;538:20;-1:-1:-1;;;;;573:2:10;570:26;567:2;;;599:18;;:::i;:::-;643:55;686:2;667:13;;-1:-1:-1;;663:27:10;692:4;659:38;643:55;:::i;:::-;723:2;714:7;707:19;769:3;762:4;757:2;749:6;745:15;741:26;738:35;735:2;;;790:5;783;776:20;735:2;859;852:4;844:6;840:17;833:4;824:7;820:18;807:55;882:16;;;900:4;878:27;871:42;;;;886:7;446:498;-1:-1:-1;;446:498:10:o;949:159::-;1016:20;;1076:6;1065:18;;1055:29;;1045:2;;1098:1;1095;1088:12;1045:2;997:111;;;:::o;1113:171::-;1180:20;;-1:-1:-1;;;;;1229:30:10;;1219:41;;1209:2;;1274:1;1271;1264:12;1289:257;1348:6;1401:2;1389:9;1380:7;1376:23;1372:32;1369:2;;;1422:6;1414;1407:22;1369:2;1466:9;1453:23;1485:31;1510:5;1485:31;:::i;:::-;1535:5;1359:187;-1:-1:-1;;;1359:187:10:o;1551:330::-;1638:6;1646;1699:2;1687:9;1678:7;1674:23;1670:32;1667:2;;;1720:6;1712;1705:22;1667:2;1757:9;1751:16;1776:31;1801:5;1776:31;:::i;:::-;1871:2;1856:18;;;;1850:25;1826:5;;1850:25;;-1:-1:-1;;;1657:224:10:o;1886:398::-;1954:6;1962;2015:2;2003:9;1994:7;1990:23;1986:32;1983:2;;;2036:6;2028;2021:22;1983:2;2080:9;2067:23;2099:31;2124:5;2099:31;:::i;:::-;2149:5;-1:-1:-1;2206:2:10;2191:18;;2178:32;2219:33;2178:32;2219:33;:::i;:::-;2271:7;2261:17;;;1973:311;;;;;:::o;2289:466::-;2366:6;2374;2382;2435:2;2423:9;2414:7;2410:23;2406:32;2403:2;;;2456:6;2448;2441:22;2403:2;2500:9;2487:23;2519:31;2544:5;2519:31;:::i;:::-;2569:5;-1:-1:-1;2626:2:10;2611:18;;2598:32;2639:33;2598:32;2639:33;:::i;:::-;2393:362;;2691:7;;-1:-1:-1;;;2745:2:10;2730:18;;;;2717:32;;2393:362::o;2760:436::-;2825:6;2833;2886:2;2874:9;2865:7;2861:23;2857:32;2854:2;;;2907:6;2899;2892:22;2854:2;2951:9;2938:23;2970:31;2995:5;2970:31;:::i;:::-;3020:5;-1:-1:-1;3077:2:10;3062:18;;3049:32;3119:15;;3112:23;3100:36;;3090:2;;3155:6;3147;3140:22;3201:325;3269:6;3277;3330:2;3318:9;3309:7;3305:23;3301:32;3298:2;;;3351:6;3343;3336:22;3298:2;3395:9;3382:23;3414:31;3439:5;3414:31;:::i;:::-;3464:5;3516:2;3501:18;;;;3488:32;;-1:-1:-1;;;3288:238:10:o;3531:1077::-;3615:6;3646:2;3689;3677:9;3668:7;3664:23;3660:32;3657:2;;;3710:6;3702;3695:22;3657:2;3755:9;3742:23;-1:-1:-1;;;;;3825:2:10;3817:6;3814:14;3811:2;;;3846:6;3838;3831:22;3811:2;3889:6;3878:9;3874:22;3864:32;;3934:7;3927:4;3923:2;3919:13;3915:27;3905:2;;3961:6;3953;3946:22;3905:2;4002;3989:16;4024:2;4020;4017:10;4014:2;;;4030:18;;:::i;:::-;4076:2;4073:1;4069:10;4059:20;;4099:28;4123:2;4119;4115:11;4099:28;:::i;:::-;4161:15;;;4192:12;;;;4224:11;;;4254;;;4250:20;;4247:33;-1:-1:-1;4244:2:10;;;4298:6;4290;4283:22;4244:2;4325:6;4316:15;;4340:238;4354:2;4351:1;4348:9;4340:238;;;4425:3;4412:17;4399:30;;4442:31;4467:5;4442:31;:::i;:::-;4486:18;;;4372:1;4365:9;;;;;4524:12;;;;4556;;4340:238;;;-1:-1:-1;4597:5:10;3626:982;-1:-1:-1;;;;;;;;3626:982:10:o;4613:194::-;4671:6;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;4745:6;4737;4730:22;4692:2;4773:28;4791:9;4773:28;:::i;4812:501::-;4890:6;4898;4906;4959:2;4947:9;4938:7;4934:23;4930:32;4927:2;;;4980:6;4972;4965:22;4927:2;5008:28;5026:9;5008:28;:::i;:::-;4998:38;;5087:2;5076:9;5072:18;5059:32;-1:-1:-1;;;;;5106:6:10;5103:30;5100:2;;;5151:6;5143;5136:22;5100:2;5195:58;5245:7;5236:6;5225:9;5221:22;5195:58;:::i;:::-;4917:396;;5272:8;;-1:-1:-1;5169:84:10;;-1:-1:-1;;;;4917:396:10:o;5318:569::-;5405:6;5413;5421;5429;5482:2;5470:9;5461:7;5457:23;5453:32;5450:2;;;5503:6;5495;5488:22;5450:2;5531:28;5549:9;5531:28;:::i;:::-;5521:38;;5610:2;5599:9;5595:18;5582:32;-1:-1:-1;;;;;5629:6:10;5626:30;5623:2;;;5674:6;5666;5659:22;5623:2;5718:58;5768:7;5759:6;5748:9;5744:22;5718:58;:::i;:::-;5440:447;;5795:8;;-1:-1:-1;5692:84:10;;5877:2;5862:18;5849:32;;5440:447;-1:-1:-1;;;;5440:447:10:o;5892:480::-;5977:6;5985;5993;6046:2;6034:9;6025:7;6021:23;6017:32;6014:2;;;6067:6;6059;6052:22;6014:2;6095:28;6113:9;6095:28;:::i;:::-;6085:38;;6174:2;6163:9;6159:18;6146:32;-1:-1:-1;;;;;6193:6:10;6190:30;6187:2;;;6238:6;6230;6223:22;6187:2;6266:49;6307:7;6298:6;6287:9;6283:22;6266:49;:::i;:::-;6256:59;;;6362:2;6351:9;6347:18;6334:32;6324:42;;6004:368;;;;;:::o;6377:803::-;6481:6;6489;6497;6505;6513;6566:3;6554:9;6545:7;6541:23;6537:33;6534:2;;;6588:6;6580;6573:22;6534:2;6616:28;6634:9;6616:28;:::i;:::-;6606:38;;6695:2;6684:9;6680:18;6667:32;-1:-1:-1;;;;;6759:2:10;6751:6;6748:14;6745:2;;;6780:6;6772;6765:22;6745:2;6808:49;6849:7;6840:6;6829:9;6825:22;6808:49;:::i;:::-;6798:59;;6876:37;6909:2;6898:9;6894:18;6876:37;:::i;:::-;6866:47;;6966:2;6955:9;6951:18;6938:32;6922:48;;6995:2;6985:8;6982:16;6979:2;;;7016:6;7008;7001:22;6979:2;;7060:60;7112:7;7101:8;7090:9;7086:24;7060:60;:::i;:::-;6524:656;;;;-1:-1:-1;6524:656:10;;-1:-1:-1;7139:8:10;;7034:86;6524:656;-1:-1:-1;;;6524:656:10:o;7185:714::-;7287:6;7295;7303;7311;7364:3;7352:9;7343:7;7339:23;7335:33;7332:2;;;7386:6;7378;7371:22;7332:2;7414:28;7432:9;7414:28;:::i;:::-;7404:38;;7493:2;7482:9;7478:18;7465:32;-1:-1:-1;;;;;7557:2:10;7549:6;7546:14;7543:2;;;7578:6;7570;7563:22;7543:2;7606:49;7647:7;7638:6;7627:9;7623:22;7606:49;:::i;:::-;7596:59;;7674:37;7707:2;7696:9;7692:18;7674:37;:::i;:::-;7664:47;;7764:2;7753:9;7749:18;7736:32;7720:48;;7793:2;7783:8;7780:16;7777:2;;;7814:6;7806;7799:22;7777:2;;7842:51;7885:7;7874:8;7863:9;7859:24;7842:51;:::i;:::-;7832:61;;;7322:577;;;;;;;:::o;7904:642::-;7999:6;8007;8015;8023;8031;8084:3;8072:9;8063:7;8059:23;8055:33;8052:2;;;8106:6;8098;8091:22;8052:2;8134:28;8152:9;8134:28;:::i;:::-;8124:38;;8181:37;8214:2;8203:9;8199:18;8181:37;:::i;:::-;8171:47;;8265:2;8254:9;8250:18;8237:32;8227:42;;8320:2;8309:9;8305:18;8292:32;-1:-1:-1;;;;;8339:6:10;8336:30;8333:2;;;8384:6;8376;8369:22;8333:2;8428:58;8478:7;8469:6;8458:9;8454:22;8428:58;:::i;8551:190::-;8610:6;8663:2;8651:9;8642:7;8638:23;8634:32;8631:2;;;8684:6;8676;8669:22;8631:2;-1:-1:-1;8712:23:10;;8621:120;-1:-1:-1;8621:120:10:o;8746:258::-;8814:6;8822;8875:2;8863:9;8854:7;8850:23;8846:32;8843:2;;;8896:6;8888;8881:22;8843:2;-1:-1:-1;;8924:23:10;;;8994:2;8979:18;;;8966:32;;-1:-1:-1;8833:171:10:o;9009:268::-;9097:6;9092:3;9085:19;9149:6;9142:5;9135:4;9130:3;9126:14;9113:43;-1:-1:-1;9067:3:10;9176:16;;;9194:4;9172:27;;;9165:40;;;;9259:2;9238:15;;;-1:-1:-1;;9234:29:10;9225:39;;;9221:50;;9075:202::o;9282:257::-;9323:3;9361:5;9355:12;9388:6;9383:3;9376:19;9404:63;9460:6;9453:4;9448:3;9444:14;9437:4;9430:5;9426:16;9404:63;:::i;:::-;9521:2;9500:15;-1:-1:-1;;9496:29:10;9487:39;;;;9528:4;9483:50;;9331:208;-1:-1:-1;;9331:208:10:o;9544:273::-;9727:6;9719;9714:3;9701:33;9683:3;9753:16;;9778:15;;;9753:16;9691:126;-1:-1:-1;9691:126:10:o;9822:274::-;9951:3;9989:6;9983:13;10005:53;10051:6;10046:3;10039:4;10031:6;10027:17;10005:53;:::i;:::-;10074:16;;;;;9959:137;-1:-1:-1;;9959:137:10:o;10101:1100::-;10227:3;10256;10291:6;10285:13;10321:3;10343:1;10371:9;10367:2;10363:18;10353:28;;10431:2;10420:9;10416:18;10453;10443:2;;10497:4;10489:6;10485:17;10475:27;;10443:2;10523;10571;10563:6;10560:14;10540:18;10537:38;10534:2;;;-1:-1:-1;;;10598:33:10;;10654:4;10651:1;10644:15;10684:4;10605:3;10672:17;10534:2;10715:18;10742:104;;;;10860:1;10855:321;;;;10708:468;;10742:104;-1:-1:-1;;10775:24:10;;10763:37;;10820:16;;;;-1:-1:-1;10742:104:10;;10855:321;25831:4;25850:17;;;25900:4;25884:21;;10949:3;10965:165;10979:6;10976:1;10973:13;10965:165;;;11057:14;;11044:11;;;11037:35;11100:16;;;;10994:10;;10965:165;;;10969:3;;11159:6;11154:3;11150:16;11143:23;;10708:468;-1:-1:-1;11192:3:10;;10235:966;-1:-1:-1;;;;;;;;10235:966:10:o;12095:217::-;12242:2;12231:9;12224:21;12205:4;12262:44;12302:2;12291:9;12287:18;12279:6;12262:44;:::i;12775:399::-;12977:2;12959:21;;;13016:2;12996:18;;;12989:30;13055:34;13050:2;13035:18;;13028:62;-1:-1:-1;;;13121:2:10;13106:18;;13099:33;13164:3;13149:19;;12949:225::o;17446:356::-;17648:2;17630:21;;;17667:18;;;17660:30;17726:34;17721:2;17706:18;;17699:62;17793:2;17778:18;;17620:182::o;18630:401::-;18832:2;18814:21;;;18871:2;18851:18;;;18844:30;18910:34;18905:2;18890:18;;18883:62;-1:-1:-1;;;18976:2:10;18961:18;;18954:35;19021:3;19006:19;;18804:227::o;22031:326::-;22226:6;22218;22214:19;22203:9;22196:38;22270:2;22265;22254:9;22250:18;22243:30;22177:4;22290:61;22347:2;22336:9;22332:18;22324:6;22316;22290:61;:::i;:::-;22282:69;22186:171;-1:-1:-1;;;;;22186:171:10:o;22362:864::-;22721:6;22713;22709:19;22698:9;22691:38;22765:3;22760:2;22749:9;22745:18;22738:31;22672:4;22792:62;22849:3;22838:9;22834:19;22826:6;22818;22792:62;:::i;:::-;22902:9;22894:6;22890:22;22885:2;22874:9;22870:18;22863:50;22936:32;22961:6;22953;22936:32;:::i;:::-;-1:-1:-1;;;;;23042:15:10;;;23037:2;23022:18;;23015:43;23095:15;;23089:3;23074:19;;23067:44;23148:22;;;22995:3;23127:19;;23120:51;22922:46;-1:-1:-1;23188:32:10;22922:46;23205:6;23188:32;:::i;:::-;23180:40;22681:545;-1:-1:-1;;;;;;;;;;22681:545:10:o;23231:582::-;23498:6;23490;23486:19;23475:9;23468:38;23542:3;23537:2;23526:9;23522:18;23515:31;23449:4;23569:45;23609:3;23598:9;23594:19;23586:6;23569:45;:::i;:::-;-1:-1:-1;;;;;23654:6:10;23650:31;23645:2;23634:9;23630:18;23623:59;23730:9;23722:6;23718:22;23713:2;23702:9;23698:18;23691:50;23758:49;23800:6;23792;23784;23758:49;:::i;:::-;23750:57;23458:355;-1:-1:-1;;;;;;;;23458:355:10:o;23818:555::-;24075:6;24067;24063:19;24052:9;24045:38;24119:3;24114:2;24103:9;24099:18;24092:31;24026:4;24146:45;24186:3;24175:9;24171:19;24163:6;24146:45;:::i;:::-;-1:-1:-1;;;;;24231:6:10;24227:31;24222:2;24211:9;24207:18;24200:59;24307:9;24299:6;24295:22;24290:2;24279:9;24275:18;24268:50;24335:32;24360:6;24352;24335:32;:::i;:::-;24327:40;24035:338;-1:-1:-1;;;;;;;24035:338:10:o;24378:498::-;24578:4;24607:6;24652:2;24644:6;24640:15;24629:9;24622:34;24704:2;24696:6;24692:15;24687:2;24676:9;24672:18;24665:43;;24744:6;24739:2;24728:9;24724:18;24717:34;24787:3;24782:2;24771:9;24767:18;24760:31;24808:62;24865:3;24854:9;24850:19;24842:6;24834;24808:62;:::i;25505:275::-;25576:2;25570:9;25641:2;25622:13;;-1:-1:-1;;25618:27:10;25606:40;;-1:-1:-1;;;;;25661:34:10;;25697:22;;;25658:62;25655:2;;;25723:18;;:::i;:::-;25759:2;25752:22;25550:230;;-1:-1:-1;25550:230:10:o;25916:128::-;25956:3;25987:1;25983:6;25980:1;25977:13;25974:2;;;25993:18;;:::i;:::-;-1:-1:-1;26029:9:10;;25964:80::o;26049:217::-;26089:1;26115;26105:2;;-1:-1:-1;;;26140:31:10;;26194:4;26191:1;26184:15;26222:4;26147:1;26212:15;26105:2;-1:-1:-1;26251:9:10;;26095:171::o;26271:168::-;26311:7;26377:1;26373;26369:6;26365:14;26362:1;26359:21;26354:1;26347:9;26340:17;26336:45;26333:2;;;26384:18;;:::i;:::-;-1:-1:-1;26424:9:10;;26323:116::o;26444:125::-;26484:4;26512:1;26509;26506:8;26503:2;;;26517:18;;:::i;:::-;-1:-1:-1;26554:9:10;;26493:76::o;26574:258::-;26646:1;26656:113;26670:6;26667:1;26664:13;26656:113;;;26746:11;;;26740:18;26727:11;;;26720:39;26692:2;26685:10;26656:113;;;26787:6;26784:1;26781:13;26778:2;;;-1:-1:-1;;26822:1:10;26804:16;;26797:27;26627:205::o;26837:380::-;26916:1;26912:12;;;;26959;;;26980:2;;27034:4;27026:6;27022:17;27012:27;;26980:2;27087;27079:6;27076:14;27056:18;27053:38;27050:2;;;27133:10;27128:3;27124:20;27121:1;27114:31;27168:4;27165:1;27158:15;27196:4;27193:1;27186:15;27050:2;;26892:325;;;:::o;27222:135::-;27261:3;-1:-1:-1;;27282:17:10;;27279:2;;;27302:18;;:::i;:::-;-1:-1:-1;27349:1:10;27338:13;;27269:88::o;27362:127::-;27423:10;27418:3;27414:20;27411:1;27404:31;27454:4;27451:1;27444:15;27478:4;27475:1;27468:15;27494:127;27555:10;27550:3;27546:20;27543:1;27536:31;27586:4;27583:1;27576:15;27610:4;27607:1;27600:15;27626:131;-1:-1:-1;;;;;27701:31:10;;27691:42;;27681:2;;27747:1;27744;27737:12

Swarm Source

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