ETH Price: $3,398.54 (+1.51%)

Token

Exponential Capital (EXPO)
 

Overview

Max Total Supply

999,999,999,999,994,164,656,845,716.433926467097581591 EXPO

Holders

1,073 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
rinaldhy.eth
Balance
49,150,513.24921200820654748 EXPO

Value
$0.00
0x2f50c4ACd80017be4284C87B4708A956ee97Fa33
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:
EXPO

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-19
*/

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @openzeppelin/contracts/utils/Context.sol


// 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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @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 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: hardhat/console.sol


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

// File: contracts/PlatypusPrinter.sol



pragma solidity ^0.8.0;

contract EXPO is ERC20, Ownable {
    modifier lockSwap {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    uint256 internal _maxTransfer = 10;
    uint256 internal _maxWallet = 30;

    uint256 internal _marketingFee = 5;
    uint256 internal _treasuryFee = 7;
    uint256 internal _autoLiquidityRate = 3;

    uint256 internal _marketingFeeEarlySell = 9;
    uint256 internal _treasuryFeeEarlySell = 13;

    uint256 internal _reflectRate = 10;
    uint256 internal _autoBurnRate = 2;
    uint256 internal _cooldown = 30 seconds;

    uint256 internal _totalFees = _marketingFee + _treasuryFee + _autoLiquidityRate;
    uint256 internal _TotalEarlySellFees = _marketingFeeEarlySell + _treasuryFeeEarlySell + _autoLiquidityRate;

    uint256 internal _swapFeesAt = 1000 ether;
    bool internal useEarlySellTime = true;
    bool internal useBuyCooldown = true;
    bool internal _swapFees = true;

    // total wei reflected ever
    uint256 internal _ethReflectionBasis;
    uint256 internal _totalReflected;
    uint256 internal _totalTreasuryFees;
    uint256 internal _totalMarketingFees;
    uint256 internal _totalLiquidityFees;

    address payable public _marketingWallet;
    address payable public _treasuryWallet;
    address payable public _burnWallet;
    address payable public _liquidityWallet;

    uint256 internal _totalSupply = 0;
    uint256 public _totalBurned;
    uint256 public _totalDistributed;
	uint256 public earlySellTime = 24 hours;

    IUniswapV2Router02 internal _router = IUniswapV2Router02(address(0));
    address internal _pair;
    bool internal _inSwap = false;
    bool internal _inLiquidityAdd = false;
    bool internal _tradingActive = false;
    uint256 internal _tradingStartBlock = 0;

    mapping(address => uint256) private _balances;
    mapping(address => bool) private _reflectionExcluded;
    mapping(address => bool) private _taxExcluded;
    mapping(address => bool) private _bot;
    mapping(address => uint256) private _lastBuy;
    mapping(address => uint256) private _lastReflectionBasis;
    mapping(address => uint256) private _totalWalletRewards;

    address[] internal _reflectionExcludedList;

    constructor(
        address uniswapFactory,
        address uniswapRouter,
        address payable treasuryWallet,
        address payable marketingWallet,
        address payable liquidityWallet


    ) ERC20("Exponential Capital", "EXPO") Ownable() {
        addTaxExcluded(owner());
        addTaxExcluded(treasuryWallet);
        addTaxExcluded(address(this));

        _liquidityWallet = liquidityWallet;
        _treasuryWallet = treasuryWallet;
        _marketingWallet = marketingWallet;
        _burnWallet = payable(0x000000000000000000000000000000000000dEaD);

        _router = IUniswapV2Router02(uniswapRouter);
        IUniswapV2Factory uniswapContract = IUniswapV2Factory(uniswapFactory);
        _pair = uniswapContract.createPair(address(this), _router.WETH());
    }

    function launch(uint256 tokens) public payable onlyOwner() liquidityAdd {
        _mint(address(this), tokens);

        addLiquidity(tokens, msg.value);

        if (!_tradingActive) {
            _tradingActive = true;
            _tradingStartBlock = block.number;
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(_router), tokenAmount);

        // add the liquidity
        _router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function addReflection() public payable {
        _ethReflectionBasis += msg.value;
    }

    function isReflectionExcluded(address account) public view returns (bool) {
        return _reflectionExcluded[account];
    }

    function removeReflectionExcluded(address account) public onlyOwner() {
        require(isReflectionExcluded(account), "Account must be excluded");

        _reflectionExcluded[account] = false;
    }

    function addReflectionExcluded(address account) public onlyOwner() {
        _addReflectionExcluded(account);
    }

    function _addReflectionExcluded(address account) internal {
        require(!isReflectionExcluded(account), "Account must not be excluded");
        _reflectionExcluded[account] = true;
    }

    function isTaxExcluded(address account) public view returns (bool) {
        return _taxExcluded[account];
    }

    function addTaxExcluded(address account) public onlyOwner() {
        require(!isTaxExcluded(account), "Account must not be excluded");

        _taxExcluded[account] = true;
    }

    function removeTaxExcluded(address account) public onlyOwner() {
        require(isTaxExcluded(account), "Account must not be excluded");

        _taxExcluded[account] = false;
    }

    function isBot(address account) public view returns (bool) {
        return _bot[account];
    }

    function addBot(address account) internal {
        _addBot(account);
    }

    function _addBot(address account) internal {
        require(!isBot(account), "Account must not be flagged");
        require(account != address(_router), "Account must not be uniswap router");
        require(account != _pair, "Account must not be uniswap pair");

        _bot[account] = true;
        _addReflectionExcluded(account);
    }

    function removeBot(address account) public onlyOwner() {
        require(isBot(account), "Account must be flagged");

        _bot[account] = false;
        removeReflectionExcluded(account);
    }

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

    function _addBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] - amount;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        if (isTaxExcluded(sender) || isTaxExcluded(recipient)) {
            _rawTransfer(sender, recipient, amount);
            return;
        }

        require(!isBot(sender), "Sender locked as bot");
        require(!isBot(recipient), "Recipient locked as bot");
        uint256 maxTxAmount = totalSupply() * _maxTransfer / 1000;
        uint256 maxWalletAmount = totalSupply() * _maxWallet / 1000;
        require(amount <= maxTxAmount  || _inLiquidityAdd || _inSwap || recipient == address(_router), "Exceeds max transaction amount");

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= _swapFeesAt;

        if (_lastReflectionBasis[recipient] <= 0) {
            _lastReflectionBasis[recipient] = _ethReflectionBasis;
        }

        if(contractTokenBalance >= maxTxAmount) {
            contractTokenBalance = maxTxAmount;
        }

        if (
            overMinTokenBalance &&
            !_inSwap &&
            sender != _pair &&
            _swapFees
        ) {
            _swap(contractTokenBalance);
        }

        _claimReflection(payable(sender));
        _claimReflection(payable(recipient));

        uint256 send = amount;
        uint256 reflect = 0;
        uint256 marketing  = 0;
        uint256 liquidity  = 0;
        uint256 treasury  = 0;
        uint256 burn  = 0;

        if (sender == _pair && _tradingActive) {
            // Buy, apply buy fee schedule
			require((_balances[recipient] + amount) <= maxWalletAmount);

            send = amount * (100 - _totalFees) / 100;
            reflect = amount * _reflectRate / 100;
            burn = amount * _autoBurnRate / 100;

            require((!useBuyCooldown || block.timestamp - _lastBuy[tx.origin] > _cooldown) || _inSwap, "hit cooldown, try again later");
            _autoBurnTokens(sender, burn);
            _lastBuy[tx.origin] = block.timestamp;
            _reflect(sender, reflect);
        } else if (recipient == _pair && _tradingActive) {
            // Sell, apply sell fee schedule			
            if (useEarlySellTime && _lastBuy[tx.origin] + (earlySellTime) >= block.timestamp){
                send = amount * (100 - _TotalEarlySellFees) / 100;
                marketing = amount * _marketingFeeEarlySell / 100;
                liquidity = amount * _autoLiquidityRate / 100;
                treasury = amount * _treasuryFeeEarlySell / 100;
            }
            else{
                send = amount * (100 - _totalFees) / 100;
                marketing = amount * _marketingFee / 100;
                liquidity = amount * _autoLiquidityRate / 100;
                treasury = amount * _treasuryFee / 100;
            }
            
            _takeMarketing(sender, marketing);
            _takeTreasury(sender, treasury);
            _takeLiquidity(sender, liquidity);
        }

        _rawTransfer(sender, recipient, send);
        
        if (_tradingActive && block.number == _tradingStartBlock && !isTaxExcluded(tx.origin)) {
            if (tx.origin == address(_pair)) {
                if (sender == address(_pair)) {
                    _addBot(recipient);
                } else {
                    _addBot(sender);
                }
            } else {
                _addBot(tx.origin);
            }
        }
    }

    function _claimReflection(address payable addr) internal {

        if (addr == _pair || addr == address(_router)) return;

        uint256 basisDifference = _ethReflectionBasis - _lastReflectionBasis[addr];
        uint256 owed = basisDifference * balanceOf(addr) / _totalSupply;

        _lastReflectionBasis[addr] = _ethReflectionBasis;
        if (owed == 0) {
                return;
        }
        addr.transfer(owed);
		_totalWalletRewards[addr] += owed;
        _totalDistributed += owed;
    }

    function claimReflection() public {
        _claimReflection(payable(msg.sender));
    }
    
    function pendingRewards(address addr) public view returns (uint256) {
        uint256 basisDifference = _ethReflectionBasis - _lastReflectionBasis[addr];
        uint256 owed = basisDifference * balanceOf(addr) / _totalSupply;
        return owed;
    }

    function totalRewardsDistributed() public view returns (uint256) {
        return _totalDistributed;
    }
	
	function totalWalletRewards(address addr) public view returns (uint256) {
        return _totalWalletRewards[addr];
    }

    function _swap(uint256 amount) internal lockSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();

        _approve(address(this), address(_router), amount);

        uint256 contractEthBalance = address(this).balance;

        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 tradeValue = address(this).balance - contractEthBalance;

        uint256 marketingAmount = amount * _totalMarketingFees / (_totalReflected + _totalMarketingFees + _totalTreasuryFees + _totalLiquidityFees);
        uint256 treasuryAmount = amount * _totalTreasuryFees / (_totalReflected + _totalMarketingFees + _totalTreasuryFees + _totalLiquidityFees);
        uint256 liquidityAmount = amount * _totalLiquidityFees / (_totalReflected + _totalMarketingFees + _totalTreasuryFees + _totalLiquidityFees);

        uint256 reflectedAmount = amount - (marketingAmount + treasuryAmount + liquidityAmount);

        uint256 marketingEth = tradeValue * _totalMarketingFees / (_totalReflected + _totalMarketingFees + _totalTreasuryFees + _totalLiquidityFees);
        uint256 treasuryEth = tradeValue * _totalTreasuryFees / (_totalReflected + _totalMarketingFees + _totalTreasuryFees + _totalLiquidityFees);
        uint256 liquidityEth = tradeValue * _totalLiquidityFees / (_totalReflected + _totalMarketingFees + _totalTreasuryFees + _totalLiquidityFees);
        uint256 reflectedEth = tradeValue - (marketingEth + treasuryEth + liquidityEth);

        if (marketingEth > 0) {
            _liquidityWallet.transfer(liquidityEth);
            _marketingWallet.transfer(marketingEth);
            _treasuryWallet.transfer(treasuryEth);
        }

        _totalMarketingFees -= marketingAmount;
        _totalTreasuryFees -= treasuryAmount;
        _totalLiquidityFees -= liquidityAmount;
        _totalReflected -= reflectedAmount;
        _ethReflectionBasis += reflectedEth;
    }

    function swapAll() public {
        uint256 maxTxAmount = totalSupply() * _maxTransfer / 1000;
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= maxTxAmount)
        {
            contractTokenBalance = maxTxAmount;
        }

        if (
            !_inSwap
        ) {
            _swap(contractTokenBalance);
        }
    }

    function withdrawAll() public onlyOwner() {
        uint256 split = address(this).balance / 2;
        _marketingWallet.transfer(split);
        _treasuryWallet.transfer(address(this).balance - split);
    }

    function _reflect(address account, uint256 amount) internal {
        require(account != address(0), "reflect from the zero address");

        _rawTransfer(account, address(this), amount);
        _totalReflected += amount;
        emit Transfer(account, address(this), amount);
    }

    function _takeMarketing(address account, uint256 amount) internal {
        require(account != address(0), "take marketing from the zero address");

        _rawTransfer(account, address(this), amount);
        _totalMarketingFees += amount;
        emit Transfer(account, address(this), amount);
    }

    function _takeTreasury(address account, uint256 amount) internal {
        require(account != address(0), "take treasury from the zero address");

        _rawTransfer(account, address(this), amount);
        _totalTreasuryFees += amount;
        emit Transfer(account, address(this), amount);
    }

    function _takeLiquidity(address account, uint256 amount) internal {
        require(account != address(0), "take liquidity from the zero address");

        _rawTransfer(account, address(this), amount);
        _totalLiquidityFees += amount;
        emit Transfer(account, address(this), amount);
    }

    function _autoBurnTokens(address _account, uint _amount) private {  
        require( _amount <= balanceOf(_account));
        _balances[_account] = (_balances[_account] - _amount);
        _totalSupply = (_totalSupply - _amount);
        _totalBurned = (_totalBurned + _amount);
        emit Transfer(_account, address(0), _amount);
    }

    // modified from OpenZeppelin ERC20
    function _rawTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), "transfer from the zero address");
        require(recipient != address(0), "transfer to the zero address");

        uint256 senderBalance = balanceOf(sender);
        require(senderBalance >= amount, "transfer amount exceeds balance");
        unchecked {
            _subtractBalance(sender, amount);
        }
        _addBalance(recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

    function setMaxTransfer(uint256 maxTransfer) public onlyOwner() {
        _maxTransfer = maxTransfer;
    }

    function setSwapFees(bool swapFees) public onlyOwner() {
        _swapFees = swapFees;
    }

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

    function _mint(address account, uint256 amount) internal override {
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }

    function mint(address account, uint256 amount) public onlyOwner() {
        _mint(account, amount);
    }

    function airdrop(address[] memory accounts, uint256[] memory amounts) public onlyOwner() {
        require(accounts.length == amounts.length, "array lengths must match");

        for (uint256 i = 0; i < accounts.length; i++) {
            _mint(accounts[i], amounts[i]);
        }
    }
    function totalBurned() public view returns (uint256) {
        return _totalBurned;
    }

    function updateSellFees(uint256 _sellMarketingFee, uint256 _sellTreasuryFee, uint256 _liquidityFee, uint256 _reflectionFee, uint256 _autoBurnFee, uint256 _earlySellTreasuryFee, uint256 _earlySellMarketingFee) external onlyOwner {
        _marketingFee = _sellMarketingFee;
        _treasuryFee = _sellTreasuryFee;
        _autoLiquidityRate = _liquidityFee;

        _reflectRate = _reflectionFee;
        _autoBurnRate = _autoBurnFee;

        _treasuryFeeEarlySell = _earlySellTreasuryFee;
        _marketingFeeEarlySell = _earlySellMarketingFee;

        _totalFees = (_marketingFee + _autoLiquidityRate + _treasuryFee);
        _TotalEarlySellFees = (_marketingFeeEarlySell + _treasuryFeeEarlySell + _autoLiquidityRate);
        require(_totalFees <= 25, "Must keep fees at 25% or less");
        require(_TotalEarlySellFees <= 25, "Must keep fees at 25% or less");
    }

    function getTotalFee() public view returns (uint256) {
        return _totalFees;
    }

    function getTotalEarlySellFee() public view returns (uint256) {
        return _TotalEarlySellFees;
    }

    function setMaxWallet(uint256 amount) public onlyOwner() {
        require(amount >= _totalSupply / 1000);
        _maxWallet = amount;
    }

    function setMaxTransaction(uint256 amount) public onlyOwner() {
        require(amount >= _totalSupply / 1000);
        _maxTransfer = amount;
    }

	function setSwapFeesAt(uint256 amount) public onlyOwner() {
        _swapFeesAt = amount;
    }

    function setTradingActive(bool active) public onlyOwner() {
        _tradingActive = active;
    }

	function setUseEarlySellTime(bool useSellTime) public onlyOwner() {
        useEarlySellTime = useSellTime;
    }

	function setUseCooldown(bool useCooldown) public onlyOwner() {
        useBuyCooldown = useCooldown;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"uniswapFactory","type":"address"},{"internalType":"address","name":"uniswapRouter","type":"address"},{"internalType":"address payable","name":"treasuryWallet","type":"address"},{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"liquidityWallet","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addReflection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalEarlySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"name":"setMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapFees","type":"bool"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapFeesAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"useCooldown","type":"bool"}],"name":"setUseCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"useSellTime","type":"bool"}],"name":"setUseEarlySellTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"totalWalletRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_autoBurnFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a600655601e600755600560085560076009556003600a556009600b55600d600c55600a600d556002600e55601e600f55600a546009546008546200004b919062000510565b62000057919062000510565b601055600a54600c54600b546200006f919062000510565b6200007b919062000510565b601155683635c9adc5dea000006012556013805462ffffff1916620101011790556000601d81905562015180602055602180546001600160a01b03191690556022805462ffffff60a01b19169055602355348015620000d957600080fd5b506040516200360138038062003601833981016040819052620000fc9162000550565b604080518082018252601381527f4578706f6e656e7469616c204361706974616c000000000000000000000000006020808301918252835180850190945260048452634558504f60e01b9084015281519192916200015d916003916200046a565b508051620001739060049060208401906200046a565b505050620001906200018a6200032560201b60201c565b62000329565b620001ad620001a76005546001600160a01b031690565b6200037b565b620001b8836200037b565b620001c3306200037b565b601c80546001600160a01b038084166001600160a01b031992831617909255601a805486841690831617905560198054858416908316179055601b8054821661dead17905560218054878416921682179055604080516315ab88c960e31b81529051889384169263c9c6539692309263ad5c4648916004808201926020929091908290030181865afa1580156200025e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002849190620005d0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f89190620005d0565b602280546001600160a01b0319166001600160a01b03929092169190911790555062000634945050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526026602052604090205460ff1615620004465760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206e6f74206265206578636c75646564000000006044820152606401620003d2565b6001600160a01b03166000908152602660205260409020805460ff19166001179055565b8280546200047890620005f7565b90600052602060002090601f0160209004810192826200049c5760008555620004e7565b82601f10620004b757805160ff1916838001178555620004e7565b82800160010185558215620004e7579182015b82811115620004e7578251825591602001919060010190620004ca565b50620004f5929150620004f9565b5090565b5b80821115620004f55760008155600101620004fa565b600082198211156200053257634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146200054d57600080fd5b50565b600080600080600060a086880312156200056957600080fd5b8551620005768162000537565b6020870151909550620005898162000537565b60408701519094506200059c8162000537565b6060870151909350620005af8162000537565b6080870151909250620005c28162000537565b809150509295509295909350565b600060208284031215620005e357600080fd5b8151620005f08162000537565b9392505050565b600181811c908216806200060c57607f821691505b602082108114156200062e57634e487b7160e01b600052602260045260246000fd5b50919050565b612fbd80620006446000396000f3fe6080604052600436106102e85760003560e01c8063715018a611610190578063a9059cbb116100dc578063dd62ed3e11610095578063ee1725461161006f578063ee172546146108c6578063efeaf784146108db578063f2fde38b146108fb578063fd01bd4c1461091b57600080fd5b8063dd62ed3e14610840578063e3f9fc6314610886578063e9a7e633146108a657600080fd5b8063a9059cbb14610795578063ab5a1887146107b5578063b41356c9146107d5578063bc9c3b77146107f5578063c6fe97271461080b578063d89135cd1461082b57600080fd5b80638da5cb5b1161014957806395d89b411161012357806395d89b4114610720578063962dfc75146107355780639daa30e314610755578063a457c2d71461077557600080fd5b80638da5cb5b146106a95780639045be58146106c7578063959bd6c21461070057600080fd5b8063715018a61461061757806377348de91461062c5780637ae316d01461064c578063853828b61461066157806385b12c7c146106765780638c369d3b1461068957600080fd5b806340c10f191161024f578063586509cf11610208578063644ce4be116101e2578063644ce4be146105a157806367243482146105b757806369ec8e9c146105d757806370a08231146105f757600080fd5b8063586509cf146105415780635d0044ca146105615780635fecd9261461058157600080fd5b806340c10f191461048e578063488981c8146104ae5780634d48b105146104c35780634e6be544146104f95780634fb0b7e7146105015780635196aadb1461052157600080fd5b8063313ce567116102a1578063313ce567146103e657806331d7a26214610402578063375632931461042257806339509351146104395780633bbac579146104595780633e9ffbea1461047957600080fd5b806306fdde03146102f4578063095ea7b31461031f57806318160ddd1461034f57806323b872dd1461036e578063243a7e311461038e578063269d1faa146103c657600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610931565b60405161031691906129fa565b60405180910390f35b34801561032b57600080fd5b5061033f61033a366004612a64565b6109c3565b6040519015158152602001610316565b34801561035b57600080fd5b50601d545b604051908152602001610316565b34801561037a57600080fd5b5061033f610389366004612a90565b6109d9565b34801561039a57600080fd5b50601c546103ae906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103d257600080fd5b50601a546103ae906001600160a01b031681565b3480156103f257600080fd5b5060405160128152602001610316565b34801561040e57600080fd5b5061036061041d366004612ad1565b610a88565b34801561042e57600080fd5b50610437610adb565b005b34801561044557600080fd5b5061033f610454366004612a64565b610ae6565b34801561046557600080fd5b5061033f610474366004612ad1565b610b22565b34801561048557600080fd5b50610437610b40565b34801561049a57600080fd5b506104376104a9366004612a64565b610b9c565b3480156104ba57600080fd5b50601154610360565b3480156104cf57600080fd5b506103606104de366004612ad1565b6001600160a01b03166000908152602a602052604090205490565b610437610bd0565b34801561050d57600080fd5b5061043761051c366004612ad1565b610be9565b34801561052d57600080fd5b5061043761053c366004612ad1565b610c5d565b34801561054d57600080fd5b5061043761055c366004612af5565b610c93565b34801561056d57600080fd5b5061043761057c366004612af5565b610cc2565b34801561058d57600080fd5b5061043761059c366004612ad1565b610d0d565b3480156105ad57600080fd5b5061036060205481565b3480156105c357600080fd5b506104376105d2366004612be4565b610db5565b3480156105e357600080fd5b5061033f6105f2366004612ad1565b610e8f565b34801561060357600080fd5b50610360610612366004612ad1565b610ead565b34801561062357600080fd5b50610437610ec8565b34801561063857600080fd5b50610437610647366004612af5565b610efc565b34801561065857600080fd5b50601054610360565b34801561066d57600080fd5b50610437610f2b565b610437610684366004612af5565b610fdf565b34801561069557600080fd5b50601b546103ae906001600160a01b031681565b3480156106b557600080fd5b506005546001600160a01b03166103ae565b3480156106d357600080fd5b5061033f6106e2366004612ad1565b6001600160a01b031660009081526025602052604090205460ff1690565b34801561070c57600080fd5b5061043761071b366004612ca6565b611069565b34801561072c57600080fd5b506103096110b1565b34801561074157600080fd5b506019546103ae906001600160a01b031681565b34801561076157600080fd5b50610437610770366004612ad1565b6110c0565b34801561078157600080fd5b5061033f610790366004612a64565b611173565b3480156107a157600080fd5b5061033f6107b0366004612a64565b61120c565b3480156107c157600080fd5b506104376107d0366004612af5565b611219565b3480156107e157600080fd5b506104376107f0366004612ad1565b61125f565b34801561080157600080fd5b50610360601f5481565b34801561081757600080fd5b50610437610826366004612ca6565b6112cf565b34801561083757600080fd5b50601e54610360565b34801561084c57600080fd5b5061036061085b366004612cc8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561089257600080fd5b506104376108a1366004612ca6565b611313565b3480156108b257600080fd5b506104376108c1366004612ca6565b611359565b3480156108d257600080fd5b50601f54610360565b3480156108e757600080fd5b506104376108f6366004612d01565b611396565b34801561090757600080fd5b50610437610916366004612ad1565b6114ca565b34801561092757600080fd5b50610360601e5481565b60606003805461094090612d4d565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90612d4d565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b60006109d0338484611562565b50600192915050565b60006109e6848484611686565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a7d8533858403611562565b506001949350505050565b6001600160a01b0381166000908152602960205260408120546014548291610aaf91612d9e565b90506000601d54610abf85610ead565b610ac99084612db5565b610ad39190612dd4565b949350505050565b610ae433611c81565b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109d0918590610b1d908690612df6565b611562565b6001600160a01b031660009081526027602052604090205460ff1690565b60006103e8600654610b51601d5490565b610b5b9190612db5565b610b659190612dd4565b90506000610b7230610ead565b9050818110610b7e5750805b602254600160a01b900460ff16610b9857610b9881611da6565b5050565b6005546001600160a01b03163314610bc65760405162461bcd60e51b8152600401610a6790612e0e565b610b988282612251565b3460146000828254610be29190612df6565b9091555050565b6005546001600160a01b03163314610c135760405162461bcd60e51b8152600401610a6790612e0e565b610c1c81610e8f565b15610c395760405162461bcd60e51b8152600401610a6790612e43565b6001600160a01b03166000908152602660205260409020805460ff19166001179055565b6005546001600160a01b03163314610c875760405162461bcd60e51b8152600401610a6790612e0e565b610c90816122a7565b50565b6005546001600160a01b03163314610cbd5760405162461bcd60e51b8152600401610a6790612e0e565b601255565b6005546001600160a01b03163314610cec5760405162461bcd60e51b8152600401610a6790612e0e565b6103e8601d54610cfc9190612dd4565b811015610d0857600080fd5b600755565b6005546001600160a01b03163314610d375760405162461bcd60e51b8152600401610a6790612e0e565b610d4081610b22565b610d8c5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206d75737420626520666c61676765640000000000000000006044820152606401610a67565b6001600160a01b0381166000908152602760205260409020805460ff19169055610c90816110c0565b6005546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610a6790612e0e565b8051825114610e305760405162461bcd60e51b815260206004820152601860248201527f6172726179206c656e67746873206d757374206d6174636800000000000000006044820152606401610a67565b60005b8251811015610e8a57610e78838281518110610e5157610e51612e7a565b6020026020010151838381518110610e6b57610e6b612e7a565b6020026020010151612251565b80610e8281612e90565b915050610e33565b505050565b6001600160a01b031660009081526026602052604090205460ff1690565b6001600160a01b031660009081526024602052604090205490565b6005546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610a6790612e0e565b610ae46000612304565b6005546001600160a01b03163314610f265760405162461bcd60e51b8152600401610a6790612e0e565b600655565b6005546001600160a01b03163314610f555760405162461bcd60e51b8152600401610a6790612e0e565b6000610f62600247612dd4565b6019546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610f9d573d6000803e3d6000fd5b50601a546001600160a01b03166108fc610fb78347612d9e565b6040518115909202916000818181858888f19350505050158015610b98573d6000803e3d6000fd5b6005546001600160a01b031633146110095760405162461bcd60e51b8152600401610a6790612e0e565b6022805460ff60a81b1916600160a81b1790556110263082612251565b6110308134612356565b602254600160b01b900460ff16611059576022805460ff60b01b1916600160b01b179055436023555b506022805460ff60a81b19169055565b6005546001600160a01b031633146110935760405162461bcd60e51b8152600401610a6790612e0e565b60228054911515600160b01b0260ff60b01b19909216919091179055565b60606004805461094090612d4d565b6005546001600160a01b031633146110ea5760405162461bcd60e51b8152600401610a6790612e0e565b6001600160a01b03811660009081526025602052604090205460ff166111525760405162461bcd60e51b815260206004820152601860248201527f4163636f756e74206d757374206265206578636c7564656400000000000000006044820152606401610a67565b6001600160a01b03166000908152602560205260409020805460ff19169055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111f55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a67565b6112023385858403611562565b5060019392505050565b60006109d0338484611686565b6005546001600160a01b031633146112435760405162461bcd60e51b8152600401610a6790612e0e565b6103e8601d546112539190612dd4565b811015610f2657600080fd5b6005546001600160a01b031633146112895760405162461bcd60e51b8152600401610a6790612e0e565b61129281610e8f565b6112ae5760405162461bcd60e51b8152600401610a6790612e43565b6001600160a01b03166000908152602660205260409020805460ff19169055565b6005546001600160a01b031633146112f95760405162461bcd60e51b8152600401610a6790612e0e565b601380549115156101000261ff0019909216919091179055565b6005546001600160a01b0316331461133d5760405162461bcd60e51b8152600401610a6790612e0e565b60138054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146113835760405162461bcd60e51b8152600401610a6790612e0e565b6013805460ff1916911515919091179055565b6005546001600160a01b031633146113c05760405162461bcd60e51b8152600401610a6790612e0e565b60088790556009869055600a859055600d849055600e839055600c829055600b819055856113ee8689612df6565b6113f89190612df6565b601055600a54600c54600b5461140e9190612df6565b6114189190612df6565b6011556010546019101561146e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610a67565b601960115411156114c15760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610a67565b50505050505050565b6005546001600160a01b031633146114f45760405162461bcd60e51b8152600401610a6790612e0e565b6001600160a01b0381166115595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a67565b610c9081612304565b6001600160a01b0383166115c45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a67565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61168f83610e8f565b8061169e575061169e82610e8f565b156116ae57610e8a83838361242b565b6116b783610b22565b156116fb5760405162461bcd60e51b815260206004820152601460248201527314d95b99195c881b1bd8dad95908185cc8189bdd60621b6044820152606401610a67565b61170482610b22565b156117515760405162461bcd60e51b815260206004820152601760248201527f526563697069656e74206c6f636b656420617320626f740000000000000000006044820152606401610a67565b60006103e8600654611762601d5490565b61176c9190612db5565b6117769190612dd4565b905060006103e8600754611789601d5490565b6117939190612db5565b61179d9190612dd4565b905081831115806117b75750602254600160a81b900460ff165b806117cb5750602254600160a01b900460ff165b806117e357506021546001600160a01b038581169116145b61182f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e7400006044820152606401610a67565b600061183a30610ead565b6012546001600160a01b0387166000908152602960205260409020549192508210159061187e576014546001600160a01b0387166000908152602960205260409020555b838210611889578391505b8080156118a05750602254600160a01b900460ff16155b80156118ba57506022546001600160a01b03888116911614155b80156118ce575060135462010000900460ff165b156118dc576118dc82611da6565b6118e587611c81565b6118ee86611c81565b602254859060009081908190819081906001600160a01b038e811691161480156119215750602254600160b01b900460ff165b15611a73576001600160a01b038c16600090815260246020526040902054899061194c908d90612df6565b111561195757600080fd5b606460105460646119689190612d9e565b611972908d612db5565b61197c9190612dd4565b95506064600d548c61198e9190612db5565b6119989190612dd4565b94506064600e548c6119aa9190612db5565b6119b49190612dd4565b601354909150610100900460ff1615806119e85750600f54326000908152602860205260409020546119e69042612d9e565b115b806119fc5750602254600160a01b900460ff165b611a485760405162461bcd60e51b815260206004820152601d60248201527f68697420636f6f6c646f776e2c2074727920616761696e206c617465720000006044820152606401610a67565b611a528d82612589565b326000908152602860205260409020429055611a6e8d86612629565b611bed565b6022546001600160a01b038d81169116148015611a995750602254600160b01b900460ff165b15611bed5760135460ff168015611ace57506020805432600090815260289092526040909120544291611acb91612df6565b10155b15611b535760646011546064611ae49190612d9e565b611aee908d612db5565b611af89190612dd4565b95506064600b548c611b0a9190612db5565b611b149190612dd4565b93506064600a548c611b269190612db5565b611b309190612dd4565b92506064600c548c611b429190612db5565b611b4c9190612dd4565b9150611bcf565b60646010546064611b649190612d9e565b611b6e908d612db5565b611b789190612dd4565b955060646008548c611b8a9190612db5565b611b949190612dd4565b93506064600a548c611ba69190612db5565b611bb09190612dd4565b925060646009548c611bc29190612db5565b611bcc9190612dd4565b91505b611bd98d856126cc565b611be38d8361274b565b611bed8d846127ca565b611bf88d8d8861242b565b602254600160b01b900460ff168015611c12575060235443145b8015611c245750611c2232610e8f565b155b15611c72576022546001600160a01b0316321415611c69576022546001600160a01b038e811691161415611c6057611c5b8c612849565b611c72565b611c5b8d612849565b611c7232612849565b50505050505050505050505050565b6022546001600160a01b0382811691161480611caa57506021546001600160a01b038281169116145b15611cb25750565b6001600160a01b038116600090815260296020526040812054601454611cd89190612d9e565b90506000601d54611ce884610ead565b611cf29084612db5565b611cfc9190612dd4565b6014546001600160a01b038516600090815260296020526040902055905080611d2457505050565b6040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611d5a573d6000803e3d6000fd5b506001600160a01b0383166000908152602a602052604081208054839290611d83908490612df6565b9250508190555080601f6000828254611d9c9190612df6565b9091555050505050565b6022805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611dee57611dee612e7a565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6b9190612eab565b81600181518110611e7e57611e7e612e7a565b6001600160a01b039283166020918202929092010152602154611ea49130911684611562565b60215460405163791ac94760e01b815247916001600160a01b03169063791ac94790611edd908690600090879030904290600401612ec8565b600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b5050505060008147611f1d9190612d9e565b90506000601854601654601754601554611f379190612df6565b611f419190612df6565b611f4b9190612df6565b601754611f589087612db5565b611f629190612dd4565b90506000601854601654601754601554611f7c9190612df6565b611f869190612df6565b611f909190612df6565b601654611f9d9088612db5565b611fa79190612dd4565b90506000601854601654601754601554611fc19190612df6565b611fcb9190612df6565b611fd59190612df6565b601854611fe29089612db5565b611fec9190612dd4565b9050600081611ffb8486612df6565b6120059190612df6565b61200f9089612d9e565b905060006018546016546017546015546120299190612df6565b6120339190612df6565b61203d9190612df6565b60175461204a9088612db5565b6120549190612dd4565b9050600060185460165460175460155461206e9190612df6565b6120789190612df6565b6120829190612df6565b60165461208f9089612db5565b6120999190612dd4565b905060006018546016546017546015546120b39190612df6565b6120bd9190612df6565b6120c79190612df6565b6018546120d4908a612db5565b6120de9190612dd4565b90506000816120ed8486612df6565b6120f79190612df6565b612101908a612d9e565b905083156121bb57601c546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612143573d6000803e3d6000fd5b506019546040516001600160a01b039091169085156108fc029086906000818181858888f1935050505015801561217e573d6000803e3d6000fd5b50601a546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156121b9573d6000803e3d6000fd5b505b87601760008282546121cd9190612d9e565b9250508190555086601660008282546121e69190612d9e565b9250508190555085601860008282546121ff9190612d9e565b9250508190555084601560008282546122189190612d9e565b9250508190555080601460008282546122319190612df6565b90915550506022805460ff60a01b19169055505050505050505050505050565b80601d60008282546122639190612df6565b9091555061227390508282612992565b6040518181526001600160a01b03831690600090600080516020612f68833981519152906020015b60405180910390a35050565b6001600160a01b03811660009081526025602052604090205460ff16156122e05760405162461bcd60e51b8152600401610a6790612e43565b6001600160a01b03166000908152602560205260409020805460ff19166001179055565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60215461236e9030906001600160a01b031684611562565b6021546001600160a01b031663f305d7198230856000806123976005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156123ff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124249190612f39565b5050505050565b6001600160a01b0383166124815760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a67565b6001600160a01b0382166124d75760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a67565b60006124e284610ead565b9050818110156125345760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610a67565b61253e84836129d6565b6125488383612992565b826001600160a01b0316846001600160a01b0316600080516020612f688339815191528460405161257b91815260200190565b60405180910390a350505050565b61259282610ead565b81111561259e57600080fd5b6001600160a01b0382166000908152602460205260409020546125c2908290612d9e565b6001600160a01b038316600090815260246020526040902055601d546125e9908290612d9e565b601d55601e546125fa908290612df6565b601e556040518181526000906001600160a01b03841690600080516020612f688339815191529060200161229b565b6001600160a01b03821661267f5760405162461bcd60e51b815260206004820152601d60248201527f7265666c6563742066726f6d20746865207a65726f20616464726573730000006044820152606401610a67565b61268a82308361242b565b806015600082825461269c9190612df6565b909155505060405181815230906001600160a01b03841690600080516020612f688339815191529060200161229b565b6001600160a01b03821661272e5760405162461bcd60e51b8152602060048201526024808201527f74616b65206d61726b6574696e672066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a67565b61273982308361242b565b806017600082825461269c9190612df6565b6001600160a01b0382166127ad5760405162461bcd60e51b815260206004820152602360248201527f74616b652074726561737572792066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610a67565b6127b882308361242b565b806016600082825461269c9190612df6565b6001600160a01b03821661282c5760405162461bcd60e51b8152602060048201526024808201527f74616b65206c69717569646974792066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a67565b61283782308361242b565b806018600082825461269c9190612df6565b61285281610b22565b1561289f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e74206d757374206e6f7420626520666c616767656400000000006044820152606401610a67565b6021546001600160a01b03828116911614156129085760405162461bcd60e51b815260206004820152602260248201527f4163636f756e74206d757374206e6f7420626520756e697377617020726f757460448201526132b960f11b6064820152608401610a67565b6022546001600160a01b03828116911614156129665760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206d757374206e6f7420626520756e697377617020706169726044820152606401610a67565b6001600160a01b0381166000908152602760205260409020805460ff19166001179055610c90816122a7565b6001600160a01b0382166000908152602460205260409020546129b6908290612df6565b6001600160a01b0390921660009081526024602052604090209190915550565b6001600160a01b0382166000908152602460205260409020546129b6908290612d9e565b600060208083528351808285015260005b81811015612a2757858101830151858201604001528201612a0b565b81811115612a39576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c9057600080fd5b60008060408385031215612a7757600080fd5b8235612a8281612a4f565b946020939093013593505050565b600080600060608486031215612aa557600080fd5b8335612ab081612a4f565b92506020840135612ac081612a4f565b929592945050506040919091013590565b600060208284031215612ae357600080fd5b8135612aee81612a4f565b9392505050565b600060208284031215612b0757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b4d57612b4d612b0e565b604052919050565b600067ffffffffffffffff821115612b6f57612b6f612b0e565b5060051b60200190565b600082601f830112612b8a57600080fd5b81356020612b9f612b9a83612b55565b612b24565b82815260059290921b84018101918181019086841115612bbe57600080fd5b8286015b84811015612bd95780358352918301918301612bc2565b509695505050505050565b60008060408385031215612bf757600080fd5b823567ffffffffffffffff80821115612c0f57600080fd5b818501915085601f830112612c2357600080fd5b81356020612c33612b9a83612b55565b82815260059290921b84018101918181019089841115612c5257600080fd5b948201945b83861015612c79578535612c6a81612a4f565b82529482019490820190612c57565b96505086013592505080821115612c8f57600080fd5b50612c9c85828601612b79565b9150509250929050565b600060208284031215612cb857600080fd5b81358015158114612aee57600080fd5b60008060408385031215612cdb57600080fd5b8235612ce681612a4f565b91506020830135612cf681612a4f565b809150509250929050565b600080600080600080600060e0888a031215612d1c57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600181811c90821680612d6157607f821691505b60208210811415612d8257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612db057612db0612d88565b500390565b6000816000190483118215151615612dcf57612dcf612d88565b500290565b600082612df157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612e0957612e09612d88565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ea457612ea4612d88565b5060010190565b600060208284031215612ebd57600080fd5b8151612aee81612a4f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f185784516001600160a01b031683529383019391830191600101612ef3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f4e57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220505468b67790e03ef4b7ad7cae13da93786787149a2300c0fb303e37d836f4bc64736f6c634300080b00330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000009e2f500a31f5b6ec0bdfc87957587307d247a5950000000000000000000000003ab55bc1d111a4a93c9f486ddc944d821b1effe0000000000000000000000000a1073568dca251c5be5bce11691035378f3b1585

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063715018a611610190578063a9059cbb116100dc578063dd62ed3e11610095578063ee1725461161006f578063ee172546146108c6578063efeaf784146108db578063f2fde38b146108fb578063fd01bd4c1461091b57600080fd5b8063dd62ed3e14610840578063e3f9fc6314610886578063e9a7e633146108a657600080fd5b8063a9059cbb14610795578063ab5a1887146107b5578063b41356c9146107d5578063bc9c3b77146107f5578063c6fe97271461080b578063d89135cd1461082b57600080fd5b80638da5cb5b1161014957806395d89b411161012357806395d89b4114610720578063962dfc75146107355780639daa30e314610755578063a457c2d71461077557600080fd5b80638da5cb5b146106a95780639045be58146106c7578063959bd6c21461070057600080fd5b8063715018a61461061757806377348de91461062c5780637ae316d01461064c578063853828b61461066157806385b12c7c146106765780638c369d3b1461068957600080fd5b806340c10f191161024f578063586509cf11610208578063644ce4be116101e2578063644ce4be146105a157806367243482146105b757806369ec8e9c146105d757806370a08231146105f757600080fd5b8063586509cf146105415780635d0044ca146105615780635fecd9261461058157600080fd5b806340c10f191461048e578063488981c8146104ae5780634d48b105146104c35780634e6be544146104f95780634fb0b7e7146105015780635196aadb1461052157600080fd5b8063313ce567116102a1578063313ce567146103e657806331d7a26214610402578063375632931461042257806339509351146104395780633bbac579146104595780633e9ffbea1461047957600080fd5b806306fdde03146102f4578063095ea7b31461031f57806318160ddd1461034f57806323b872dd1461036e578063243a7e311461038e578063269d1faa146103c657600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610931565b60405161031691906129fa565b60405180910390f35b34801561032b57600080fd5b5061033f61033a366004612a64565b6109c3565b6040519015158152602001610316565b34801561035b57600080fd5b50601d545b604051908152602001610316565b34801561037a57600080fd5b5061033f610389366004612a90565b6109d9565b34801561039a57600080fd5b50601c546103ae906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103d257600080fd5b50601a546103ae906001600160a01b031681565b3480156103f257600080fd5b5060405160128152602001610316565b34801561040e57600080fd5b5061036061041d366004612ad1565b610a88565b34801561042e57600080fd5b50610437610adb565b005b34801561044557600080fd5b5061033f610454366004612a64565b610ae6565b34801561046557600080fd5b5061033f610474366004612ad1565b610b22565b34801561048557600080fd5b50610437610b40565b34801561049a57600080fd5b506104376104a9366004612a64565b610b9c565b3480156104ba57600080fd5b50601154610360565b3480156104cf57600080fd5b506103606104de366004612ad1565b6001600160a01b03166000908152602a602052604090205490565b610437610bd0565b34801561050d57600080fd5b5061043761051c366004612ad1565b610be9565b34801561052d57600080fd5b5061043761053c366004612ad1565b610c5d565b34801561054d57600080fd5b5061043761055c366004612af5565b610c93565b34801561056d57600080fd5b5061043761057c366004612af5565b610cc2565b34801561058d57600080fd5b5061043761059c366004612ad1565b610d0d565b3480156105ad57600080fd5b5061036060205481565b3480156105c357600080fd5b506104376105d2366004612be4565b610db5565b3480156105e357600080fd5b5061033f6105f2366004612ad1565b610e8f565b34801561060357600080fd5b50610360610612366004612ad1565b610ead565b34801561062357600080fd5b50610437610ec8565b34801561063857600080fd5b50610437610647366004612af5565b610efc565b34801561065857600080fd5b50601054610360565b34801561066d57600080fd5b50610437610f2b565b610437610684366004612af5565b610fdf565b34801561069557600080fd5b50601b546103ae906001600160a01b031681565b3480156106b557600080fd5b506005546001600160a01b03166103ae565b3480156106d357600080fd5b5061033f6106e2366004612ad1565b6001600160a01b031660009081526025602052604090205460ff1690565b34801561070c57600080fd5b5061043761071b366004612ca6565b611069565b34801561072c57600080fd5b506103096110b1565b34801561074157600080fd5b506019546103ae906001600160a01b031681565b34801561076157600080fd5b50610437610770366004612ad1565b6110c0565b34801561078157600080fd5b5061033f610790366004612a64565b611173565b3480156107a157600080fd5b5061033f6107b0366004612a64565b61120c565b3480156107c157600080fd5b506104376107d0366004612af5565b611219565b3480156107e157600080fd5b506104376107f0366004612ad1565b61125f565b34801561080157600080fd5b50610360601f5481565b34801561081757600080fd5b50610437610826366004612ca6565b6112cf565b34801561083757600080fd5b50601e54610360565b34801561084c57600080fd5b5061036061085b366004612cc8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561089257600080fd5b506104376108a1366004612ca6565b611313565b3480156108b257600080fd5b506104376108c1366004612ca6565b611359565b3480156108d257600080fd5b50601f54610360565b3480156108e757600080fd5b506104376108f6366004612d01565b611396565b34801561090757600080fd5b50610437610916366004612ad1565b6114ca565b34801561092757600080fd5b50610360601e5481565b60606003805461094090612d4d565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90612d4d565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b60006109d0338484611562565b50600192915050565b60006109e6848484611686565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a7d8533858403611562565b506001949350505050565b6001600160a01b0381166000908152602960205260408120546014548291610aaf91612d9e565b90506000601d54610abf85610ead565b610ac99084612db5565b610ad39190612dd4565b949350505050565b610ae433611c81565b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109d0918590610b1d908690612df6565b611562565b6001600160a01b031660009081526027602052604090205460ff1690565b60006103e8600654610b51601d5490565b610b5b9190612db5565b610b659190612dd4565b90506000610b7230610ead565b9050818110610b7e5750805b602254600160a01b900460ff16610b9857610b9881611da6565b5050565b6005546001600160a01b03163314610bc65760405162461bcd60e51b8152600401610a6790612e0e565b610b988282612251565b3460146000828254610be29190612df6565b9091555050565b6005546001600160a01b03163314610c135760405162461bcd60e51b8152600401610a6790612e0e565b610c1c81610e8f565b15610c395760405162461bcd60e51b8152600401610a6790612e43565b6001600160a01b03166000908152602660205260409020805460ff19166001179055565b6005546001600160a01b03163314610c875760405162461bcd60e51b8152600401610a6790612e0e565b610c90816122a7565b50565b6005546001600160a01b03163314610cbd5760405162461bcd60e51b8152600401610a6790612e0e565b601255565b6005546001600160a01b03163314610cec5760405162461bcd60e51b8152600401610a6790612e0e565b6103e8601d54610cfc9190612dd4565b811015610d0857600080fd5b600755565b6005546001600160a01b03163314610d375760405162461bcd60e51b8152600401610a6790612e0e565b610d4081610b22565b610d8c5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206d75737420626520666c61676765640000000000000000006044820152606401610a67565b6001600160a01b0381166000908152602760205260409020805460ff19169055610c90816110c0565b6005546001600160a01b03163314610ddf5760405162461bcd60e51b8152600401610a6790612e0e565b8051825114610e305760405162461bcd60e51b815260206004820152601860248201527f6172726179206c656e67746873206d757374206d6174636800000000000000006044820152606401610a67565b60005b8251811015610e8a57610e78838281518110610e5157610e51612e7a565b6020026020010151838381518110610e6b57610e6b612e7a565b6020026020010151612251565b80610e8281612e90565b915050610e33565b505050565b6001600160a01b031660009081526026602052604090205460ff1690565b6001600160a01b031660009081526024602052604090205490565b6005546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610a6790612e0e565b610ae46000612304565b6005546001600160a01b03163314610f265760405162461bcd60e51b8152600401610a6790612e0e565b600655565b6005546001600160a01b03163314610f555760405162461bcd60e51b8152600401610a6790612e0e565b6000610f62600247612dd4565b6019546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610f9d573d6000803e3d6000fd5b50601a546001600160a01b03166108fc610fb78347612d9e565b6040518115909202916000818181858888f19350505050158015610b98573d6000803e3d6000fd5b6005546001600160a01b031633146110095760405162461bcd60e51b8152600401610a6790612e0e565b6022805460ff60a81b1916600160a81b1790556110263082612251565b6110308134612356565b602254600160b01b900460ff16611059576022805460ff60b01b1916600160b01b179055436023555b506022805460ff60a81b19169055565b6005546001600160a01b031633146110935760405162461bcd60e51b8152600401610a6790612e0e565b60228054911515600160b01b0260ff60b01b19909216919091179055565b60606004805461094090612d4d565b6005546001600160a01b031633146110ea5760405162461bcd60e51b8152600401610a6790612e0e565b6001600160a01b03811660009081526025602052604090205460ff166111525760405162461bcd60e51b815260206004820152601860248201527f4163636f756e74206d757374206265206578636c7564656400000000000000006044820152606401610a67565b6001600160a01b03166000908152602560205260409020805460ff19169055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111f55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a67565b6112023385858403611562565b5060019392505050565b60006109d0338484611686565b6005546001600160a01b031633146112435760405162461bcd60e51b8152600401610a6790612e0e565b6103e8601d546112539190612dd4565b811015610f2657600080fd5b6005546001600160a01b031633146112895760405162461bcd60e51b8152600401610a6790612e0e565b61129281610e8f565b6112ae5760405162461bcd60e51b8152600401610a6790612e43565b6001600160a01b03166000908152602660205260409020805460ff19169055565b6005546001600160a01b031633146112f95760405162461bcd60e51b8152600401610a6790612e0e565b601380549115156101000261ff0019909216919091179055565b6005546001600160a01b0316331461133d5760405162461bcd60e51b8152600401610a6790612e0e565b60138054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146113835760405162461bcd60e51b8152600401610a6790612e0e565b6013805460ff1916911515919091179055565b6005546001600160a01b031633146113c05760405162461bcd60e51b8152600401610a6790612e0e565b60088790556009869055600a859055600d849055600e839055600c829055600b819055856113ee8689612df6565b6113f89190612df6565b601055600a54600c54600b5461140e9190612df6565b6114189190612df6565b6011556010546019101561146e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610a67565b601960115411156114c15760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610a67565b50505050505050565b6005546001600160a01b031633146114f45760405162461bcd60e51b8152600401610a6790612e0e565b6001600160a01b0381166115595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a67565b610c9081612304565b6001600160a01b0383166115c45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a67565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61168f83610e8f565b8061169e575061169e82610e8f565b156116ae57610e8a83838361242b565b6116b783610b22565b156116fb5760405162461bcd60e51b815260206004820152601460248201527314d95b99195c881b1bd8dad95908185cc8189bdd60621b6044820152606401610a67565b61170482610b22565b156117515760405162461bcd60e51b815260206004820152601760248201527f526563697069656e74206c6f636b656420617320626f740000000000000000006044820152606401610a67565b60006103e8600654611762601d5490565b61176c9190612db5565b6117769190612dd4565b905060006103e8600754611789601d5490565b6117939190612db5565b61179d9190612dd4565b905081831115806117b75750602254600160a81b900460ff165b806117cb5750602254600160a01b900460ff165b806117e357506021546001600160a01b038581169116145b61182f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e7400006044820152606401610a67565b600061183a30610ead565b6012546001600160a01b0387166000908152602960205260409020549192508210159061187e576014546001600160a01b0387166000908152602960205260409020555b838210611889578391505b8080156118a05750602254600160a01b900460ff16155b80156118ba57506022546001600160a01b03888116911614155b80156118ce575060135462010000900460ff165b156118dc576118dc82611da6565b6118e587611c81565b6118ee86611c81565b602254859060009081908190819081906001600160a01b038e811691161480156119215750602254600160b01b900460ff165b15611a73576001600160a01b038c16600090815260246020526040902054899061194c908d90612df6565b111561195757600080fd5b606460105460646119689190612d9e565b611972908d612db5565b61197c9190612dd4565b95506064600d548c61198e9190612db5565b6119989190612dd4565b94506064600e548c6119aa9190612db5565b6119b49190612dd4565b601354909150610100900460ff1615806119e85750600f54326000908152602860205260409020546119e69042612d9e565b115b806119fc5750602254600160a01b900460ff165b611a485760405162461bcd60e51b815260206004820152601d60248201527f68697420636f6f6c646f776e2c2074727920616761696e206c617465720000006044820152606401610a67565b611a528d82612589565b326000908152602860205260409020429055611a6e8d86612629565b611bed565b6022546001600160a01b038d81169116148015611a995750602254600160b01b900460ff165b15611bed5760135460ff168015611ace57506020805432600090815260289092526040909120544291611acb91612df6565b10155b15611b535760646011546064611ae49190612d9e565b611aee908d612db5565b611af89190612dd4565b95506064600b548c611b0a9190612db5565b611b149190612dd4565b93506064600a548c611b269190612db5565b611b309190612dd4565b92506064600c548c611b429190612db5565b611b4c9190612dd4565b9150611bcf565b60646010546064611b649190612d9e565b611b6e908d612db5565b611b789190612dd4565b955060646008548c611b8a9190612db5565b611b949190612dd4565b93506064600a548c611ba69190612db5565b611bb09190612dd4565b925060646009548c611bc29190612db5565b611bcc9190612dd4565b91505b611bd98d856126cc565b611be38d8361274b565b611bed8d846127ca565b611bf88d8d8861242b565b602254600160b01b900460ff168015611c12575060235443145b8015611c245750611c2232610e8f565b155b15611c72576022546001600160a01b0316321415611c69576022546001600160a01b038e811691161415611c6057611c5b8c612849565b611c72565b611c5b8d612849565b611c7232612849565b50505050505050505050505050565b6022546001600160a01b0382811691161480611caa57506021546001600160a01b038281169116145b15611cb25750565b6001600160a01b038116600090815260296020526040812054601454611cd89190612d9e565b90506000601d54611ce884610ead565b611cf29084612db5565b611cfc9190612dd4565b6014546001600160a01b038516600090815260296020526040902055905080611d2457505050565b6040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611d5a573d6000803e3d6000fd5b506001600160a01b0383166000908152602a602052604081208054839290611d83908490612df6565b9250508190555080601f6000828254611d9c9190612df6565b9091555050505050565b6022805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611dee57611dee612e7a565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6b9190612eab565b81600181518110611e7e57611e7e612e7a565b6001600160a01b039283166020918202929092010152602154611ea49130911684611562565b60215460405163791ac94760e01b815247916001600160a01b03169063791ac94790611edd908690600090879030904290600401612ec8565b600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b5050505060008147611f1d9190612d9e565b90506000601854601654601754601554611f379190612df6565b611f419190612df6565b611f4b9190612df6565b601754611f589087612db5565b611f629190612dd4565b90506000601854601654601754601554611f7c9190612df6565b611f869190612df6565b611f909190612df6565b601654611f9d9088612db5565b611fa79190612dd4565b90506000601854601654601754601554611fc19190612df6565b611fcb9190612df6565b611fd59190612df6565b601854611fe29089612db5565b611fec9190612dd4565b9050600081611ffb8486612df6565b6120059190612df6565b61200f9089612d9e565b905060006018546016546017546015546120299190612df6565b6120339190612df6565b61203d9190612df6565b60175461204a9088612db5565b6120549190612dd4565b9050600060185460165460175460155461206e9190612df6565b6120789190612df6565b6120829190612df6565b60165461208f9089612db5565b6120999190612dd4565b905060006018546016546017546015546120b39190612df6565b6120bd9190612df6565b6120c79190612df6565b6018546120d4908a612db5565b6120de9190612dd4565b90506000816120ed8486612df6565b6120f79190612df6565b612101908a612d9e565b905083156121bb57601c546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612143573d6000803e3d6000fd5b506019546040516001600160a01b039091169085156108fc029086906000818181858888f1935050505015801561217e573d6000803e3d6000fd5b50601a546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156121b9573d6000803e3d6000fd5b505b87601760008282546121cd9190612d9e565b9250508190555086601660008282546121e69190612d9e565b9250508190555085601860008282546121ff9190612d9e565b9250508190555084601560008282546122189190612d9e565b9250508190555080601460008282546122319190612df6565b90915550506022805460ff60a01b19169055505050505050505050505050565b80601d60008282546122639190612df6565b9091555061227390508282612992565b6040518181526001600160a01b03831690600090600080516020612f68833981519152906020015b60405180910390a35050565b6001600160a01b03811660009081526025602052604090205460ff16156122e05760405162461bcd60e51b8152600401610a6790612e43565b6001600160a01b03166000908152602560205260409020805460ff19166001179055565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60215461236e9030906001600160a01b031684611562565b6021546001600160a01b031663f305d7198230856000806123976005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156123ff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124249190612f39565b5050505050565b6001600160a01b0383166124815760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a67565b6001600160a01b0382166124d75760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a67565b60006124e284610ead565b9050818110156125345760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610a67565b61253e84836129d6565b6125488383612992565b826001600160a01b0316846001600160a01b0316600080516020612f688339815191528460405161257b91815260200190565b60405180910390a350505050565b61259282610ead565b81111561259e57600080fd5b6001600160a01b0382166000908152602460205260409020546125c2908290612d9e565b6001600160a01b038316600090815260246020526040902055601d546125e9908290612d9e565b601d55601e546125fa908290612df6565b601e556040518181526000906001600160a01b03841690600080516020612f688339815191529060200161229b565b6001600160a01b03821661267f5760405162461bcd60e51b815260206004820152601d60248201527f7265666c6563742066726f6d20746865207a65726f20616464726573730000006044820152606401610a67565b61268a82308361242b565b806015600082825461269c9190612df6565b909155505060405181815230906001600160a01b03841690600080516020612f688339815191529060200161229b565b6001600160a01b03821661272e5760405162461bcd60e51b8152602060048201526024808201527f74616b65206d61726b6574696e672066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a67565b61273982308361242b565b806017600082825461269c9190612df6565b6001600160a01b0382166127ad5760405162461bcd60e51b815260206004820152602360248201527f74616b652074726561737572792066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610a67565b6127b882308361242b565b806016600082825461269c9190612df6565b6001600160a01b03821661282c5760405162461bcd60e51b8152602060048201526024808201527f74616b65206c69717569646974792066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a67565b61283782308361242b565b806018600082825461269c9190612df6565b61285281610b22565b1561289f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e74206d757374206e6f7420626520666c616767656400000000006044820152606401610a67565b6021546001600160a01b03828116911614156129085760405162461bcd60e51b815260206004820152602260248201527f4163636f756e74206d757374206e6f7420626520756e697377617020726f757460448201526132b960f11b6064820152608401610a67565b6022546001600160a01b03828116911614156129665760405162461bcd60e51b815260206004820181905260248201527f4163636f756e74206d757374206e6f7420626520756e697377617020706169726044820152606401610a67565b6001600160a01b0381166000908152602760205260409020805460ff19166001179055610c90816122a7565b6001600160a01b0382166000908152602460205260409020546129b6908290612df6565b6001600160a01b0390921660009081526024602052604090209190915550565b6001600160a01b0382166000908152602460205260409020546129b6908290612d9e565b600060208083528351808285015260005b81811015612a2757858101830151858201604001528201612a0b565b81811115612a39576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c9057600080fd5b60008060408385031215612a7757600080fd5b8235612a8281612a4f565b946020939093013593505050565b600080600060608486031215612aa557600080fd5b8335612ab081612a4f565b92506020840135612ac081612a4f565b929592945050506040919091013590565b600060208284031215612ae357600080fd5b8135612aee81612a4f565b9392505050565b600060208284031215612b0757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b4d57612b4d612b0e565b604052919050565b600067ffffffffffffffff821115612b6f57612b6f612b0e565b5060051b60200190565b600082601f830112612b8a57600080fd5b81356020612b9f612b9a83612b55565b612b24565b82815260059290921b84018101918181019086841115612bbe57600080fd5b8286015b84811015612bd95780358352918301918301612bc2565b509695505050505050565b60008060408385031215612bf757600080fd5b823567ffffffffffffffff80821115612c0f57600080fd5b818501915085601f830112612c2357600080fd5b81356020612c33612b9a83612b55565b82815260059290921b84018101918181019089841115612c5257600080fd5b948201945b83861015612c79578535612c6a81612a4f565b82529482019490820190612c57565b96505086013592505080821115612c8f57600080fd5b50612c9c85828601612b79565b9150509250929050565b600060208284031215612cb857600080fd5b81358015158114612aee57600080fd5b60008060408385031215612cdb57600080fd5b8235612ce681612a4f565b91506020830135612cf681612a4f565b809150509250929050565b600080600080600080600060e0888a031215612d1c57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600181811c90821680612d6157607f821691505b60208210811415612d8257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612db057612db0612d88565b500390565b6000816000190483118215151615612dcf57612dcf612d88565b500290565b600082612df157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612e0957612e09612d88565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ea457612ea4612d88565b5060010190565b600060208284031215612ebd57600080fd5b8151612aee81612a4f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f185784516001600160a01b031683529383019391830191600101612ef3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f4e57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220505468b67790e03ef4b7ad7cae13da93786787149a2300c0fb303e37d836f4bc64736f6c634300080b0033

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

0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000009e2f500a31f5b6ec0bdfc87957587307d247a5950000000000000000000000003ab55bc1d111a4a93c9f486ddc944d821b1effe0000000000000000000000000a1073568dca251c5be5bce11691035378f3b1585

-----Decoded View---------------
Arg [0] : uniswapFactory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : treasuryWallet (address): 0x9E2F500A31f5b6EC0BDFc87957587307d247A595
Arg [3] : marketingWallet (address): 0x3ab55bC1D111a4A93c9F486ddC944D821b1efFE0
Arg [4] : liquidityWallet (address): 0xa1073568dcA251C5bE5bcE11691035378f3B1585

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 0000000000000000000000009e2f500a31f5b6ec0bdfc87957587307d247a595
Arg [3] : 0000000000000000000000003ab55bc1d111a4a93c9f486ddc944d821b1effe0
Arg [4] : 000000000000000000000000a1073568dca251c5be5bce11691035378f3b1585


Deployed Bytecode Sourcemap

91176:19082:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17559:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19726:169;;;;;;;;;;-1:-1:-1;19726:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;19726:169:0;1072:187:1;107534:100:0;;;;;;;;;;-1:-1:-1;107614:12:0;;107534:100;;;1410:25:1;;;1398:2;1383:18;107534:100:0;1264:177:1;20377:492:0;;;;;;;;;;-1:-1:-1;20377:492:0;;;;;:::i;:::-;;:::i;92623:39::-;;;;;;;;;;-1:-1:-1;92623:39:0;;;;-1:-1:-1;;;;;92623:39:0;;;;;;-1:-1:-1;;;;;2087:32:1;;;2069:51;;2057:2;2042:18;92623:39:0;1907:219:1;92537:38:0;;;;;;;;;;-1:-1:-1;92537:38:0;;;;-1:-1:-1;;;;;92537:38:0;;;18521:93;;;;;;;;;;-1:-1:-1;18521:93:0;;18604:2;2273:36:1;;2261:2;2246:18;18521:93:0;2131:184:1;101841:257:0;;;;;;;;;;-1:-1:-1;101841:257:0;;;;;:::i;:::-;;:::i;101739:90::-;;;;;;;;;;;;;:::i;:::-;;21278:215;;;;;;;;;;-1:-1:-1;21278:215:0;;;;;:::i;:::-;;:::i;96442:98::-;;;;;;;;;;-1:-1:-1;96442:98:0;;;;;:::i;:::-;;:::i;104470:394::-;;;;;;;;;;;;;:::i;107849:107::-;;;;;;;;;;-1:-1:-1;107849:107:0;;;;;:::i;:::-;;:::i;109357:::-;;;;;;;;;;-1:-1:-1;109437:19:0;;109357:107;;102220:123;;;;;;;;;;-1:-1:-1;102220:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;102310:25:0;102283:7;102310:25;;;:19;:25;;;;;;;102220:123;95159:91;;;:::i;96055:184::-;;;;;;;;;;-1:-1:-1;96055:184:0;;;;;:::i;:::-;;:::i;95606:117::-;;;;;;;;;;-1:-1:-1;95606:117:0;;;;;:::i;:::-;;:::i;109780:97::-;;;;;;;;;;-1:-1:-1;109780:97:0;;;;;:::i;:::-;;:::i;109472:144::-;;;;;;;;;;-1:-1:-1;109472:144:0;;;;;:::i;:::-;;:::i;96990:202::-;;;;;;;;;;-1:-1:-1;96990:202:0;;;;;:::i;:::-;;:::i;92781:39::-;;;;;;;;;;;;;;;;107964:293;;;;;;;;;;-1:-1:-1;107964:293:0;;;;;:::i;:::-;;:::i;95933:114::-;;;;;;;;;;-1:-1:-1;95933:114:0;;;;;:::i;:::-;;:::i;97200:177::-;;;;;;;;;;-1:-1:-1;97200:177:0;;;;;:::i;:::-;;:::i;10980:103::-;;;;;;;;;;;;;:::i;107315:109::-;;;;;;;;;;-1:-1:-1;107315:109:0;;;;;:::i;:::-;;:::i;109260:89::-;;;;;;;;;;-1:-1:-1;109331:10:0;;109260:89;;104872:211;;;;;;;;;;;;;:::i;94354:292::-;;;;;;:::i;:::-;;:::i;92582:34::-;;;;;;;;;;-1:-1:-1;92582:34:0;;;;-1:-1:-1;;;;;92582:34:0;;;10329:87;;;;;;;;;;-1:-1:-1;10402:6:0;;-1:-1:-1;;;;;10402:6:0;10329:87;;95258:128;;;;;;;;;;-1:-1:-1;95258:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;95350:28:0;95326:4;95350:28;;;:19;:28;;;;;;;;;95258:128;109885:100;;;;;;;;;;-1:-1:-1;109885:100:0;;;;;:::i;:::-;;:::i;17778:104::-;;;;;;;;;;;;;:::i;92491:39::-;;;;;;;;;;-1:-1:-1;92491:39:0;;;;-1:-1:-1;;;;;92491:39:0;;;95394:204;;;;;;;;;;-1:-1:-1;95394:204:0;;;;;:::i;:::-;;:::i;21996:413::-;;;;;;;;;;-1:-1:-1;21996:413:0;;;;;:::i;:::-;;:::i;19190:175::-;;;;;;;;;;-1:-1:-1;19190:175:0;;;;;:::i;:::-;;:::i;109624:151::-;;;;;;;;;;-1:-1:-1;109624:151:0;;;;;:::i;:::-;;:::i;96247:187::-;;;;;;;;;;-1:-1:-1;96247:187:0;;;;;:::i;:::-;;:::i;92745:32::-;;;;;;;;;;;;;;;;110110:108;;;;;;;;;;-1:-1:-1;110110:108:0;;;;;:::i;:::-;;:::i;108263:91::-;;;;;;;;;;-1:-1:-1;108334:12:0;;108263:91;;19428:151;;;;;;;;;;-1:-1:-1;19428:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;19544:18:0;;;19517:7;19544:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19428:151;107432:94;;;;;;;;;;-1:-1:-1;107432:94:0;;;;;:::i;:::-;;:::i;109990:115::-;;;;;;;;;;-1:-1:-1;109990:115:0;;;;;:::i;:::-;;:::i;102106:108::-;;;;;;;;;;-1:-1:-1;102189:17:0;;102106:108;;108362:890;;;;;;;;;;-1:-1:-1;108362:890:0;;;;;:::i;:::-;;:::i;11238:201::-;;;;;;;;;;-1:-1:-1;11238:201:0;;;;;:::i;:::-;;:::i;92711:27::-;;;;;;;;;;;;;;;;17559:100;17613:13;17646:5;17639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17559:100;:::o;19726:169::-;19809:4;19826:39;9133:10;19849:7;19858:6;19826:8;:39::i;:::-;-1:-1:-1;19883:4:0;19726:169;;;;:::o;20377:492::-;20517:4;20534:36;20544:6;20552:9;20563:6;20534:9;:36::i;:::-;-1:-1:-1;;;;;20610:19:0;;20583:24;20610:19;;;:11;:19;;;;;;;;9133:10;20610:33;;;;;;;;20662:26;;;;20654:79;;;;-1:-1:-1;;;20654:79:0;;7307:2:1;20654:79:0;;;7289:21:1;7346:2;7326:18;;;7319:30;7385:34;7365:18;;;7358:62;-1:-1:-1;;;7436:18:1;;;7429:38;7484:19;;20654:79:0;;;;;;;;;20769:57;20778:6;9133:10;20819:6;20800:16;:25;20769:8;:57::i;:::-;-1:-1:-1;20857:4:0;;20377:492;-1:-1:-1;;;;20377:492:0:o;101841:257::-;-1:-1:-1;;;;;101968:26:0;;101900:7;101968:26;;;:20;:26;;;;;;101946:19;;101900:7;;101946:48;;;:::i;:::-;101920:74;;102005:12;102056;;102038:15;102048:4;102038:9;:15::i;:::-;102020:33;;:15;:33;:::i;:::-;:48;;;;:::i;:::-;102005:63;101841:257;-1:-1:-1;;;;101841:257:0:o;101739:90::-;101784:37;101809:10;101784:16;:37::i;:::-;101739:90::o;21278:215::-;9133:10;21366:4;21415:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21415:34:0;;;;;;;;;;21366:4;;21383:80;;21406:7;;21415:47;;21452:10;;21415:47;:::i;:::-;21383:8;:80::i;96442:98::-;-1:-1:-1;;;;;96519:13:0;96495:4;96519:13;;;:4;:13;;;;;;;;;96442:98::o;104470:394::-;104507:19;104560:4;104545:12;;104529:13;107614:12;;;107534:100;104529:13;:28;;;;:::i;:::-;:35;;;;:::i;:::-;104507:57;;104575:28;104606:24;104624:4;104606:9;:24::i;:::-;104575:55;;104670:11;104646:20;:35;104643:110;;-1:-1:-1;104730:11:0;104643:110;104784:7;;-1:-1:-1;;;104784:7:0;;;;104765:92;;104818:27;104824:20;104818:5;:27::i;:::-;104496:368;;104470:394::o;107849:107::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;107926:22:::1;107932:7;107941:6;107926:5;:22::i;95159:91::-:0;95233:9;95210:19;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;95159:91:0:o;96055:184::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;96135:22:::1;96149:7;96135:13;:22::i;:::-;96134:23;96126:64;;;;-1:-1:-1::0;;;96126:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;96203:21:0::1;;::::0;;;:12:::1;:21;::::0;;;;:28;;-1:-1:-1;;96203:28:0::1;96227:4;96203:28;::::0;;96055:184::o;95606:117::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;95684:31:::1;95707:7;95684:22;:31::i;:::-;95606:117:::0;:::o;109780:97::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;109849:11:::1;:20:::0;109780:97::o;109472:144::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;109573:4:::1;109558:12;;:19;;;;:::i;:::-;109548:6;:29;;109540:38;;;::::0;::::1;;109589:10;:19:::0;109472:144::o;96990:202::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;97064:14:::1;97070:7;97064:5;:14::i;:::-;97056:50;;;::::0;-1:-1:-1;;;97056:50:0;;9224:2:1;97056:50:0::1;::::0;::::1;9206:21:1::0;9263:2;9243:18;;;9236:30;9302:25;9282:18;;;9275:53;9345:18;;97056:50:0::1;9022:347:1::0;97056:50:0::1;-1:-1:-1::0;;;;;97119:13:0;::::1;97135:5;97119:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;97119:21:0::1;::::0;;97151:33:::1;97124:7:::0;97151:24:::1;:33::i;107964:293::-:0;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;108091:7:::1;:14;108072:8;:15;:33;108064:70;;;::::0;-1:-1:-1;;;108064:70:0;;9576:2:1;108064:70:0::1;::::0;::::1;9558:21:1::0;9615:2;9595:18;;;9588:30;9654:26;9634:18;;;9627:54;9698:18;;108064:70:0::1;9374:348:1::0;108064:70:0::1;108152:9;108147:103;108171:8;:15;108167:1;:19;108147:103;;;108208:30;108214:8;108223:1;108214:11;;;;;;;;:::i;:::-;;;;;;;108227:7;108235:1;108227:10;;;;;;;;:::i;:::-;;;;;;;108208:5;:30::i;:::-;108188:3:::0;::::1;::::0;::::1;:::i;:::-;;;;108147:103;;;;107964:293:::0;;:::o;95933:114::-;-1:-1:-1;;;;;96018:21:0;95994:4;96018:21;;;:12;:21;;;;;;;;;95933:114::o;97200:177::-;-1:-1:-1;;;;;97351:18:0;97319:7;97351:18;;;:9;:18;;;;;;;97200:177::o;10980:103::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;11045:30:::1;11072:1;11045:18;:30::i;107315:109::-:0;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;107390:12:::1;:26:::0;107315:109::o;104872:211::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;104925:13:::1;104941:25;104965:1;104941:21;:25;:::i;:::-;104977:16;::::0;:32:::1;::::0;104925:41;;-1:-1:-1;;;;;;104977:16:0::1;::::0;:32;::::1;;;::::0;104925:41;;104977:16:::1;:32:::0;:16;:32;104925:41;104977:16;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;105020:15:0::1;::::0;-1:-1:-1;;;;;105020:15:0::1;:55;105045:29;105069:5:::0;105045:21:::1;:29;:::i;:::-;105020:55;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;94354:292:::0;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;91345:15:::1;:22:::0;;-1:-1:-1;;;;91345:22:0::1;-1:-1:-1::0;;;91345:22:0::1;::::0;;94437:28:::2;94451:4;94458:6:::0;94437:5:::2;:28::i;:::-;94478:31;94491:6;94499:9;94478:12;:31::i;:::-;94527:14;::::0;-1:-1:-1;;;94527:14:0;::::2;;;94522:117;;94558:14;:21:::0;;-1:-1:-1;;;;94558:21:0::2;-1:-1:-1::0;;;94558:21:0::2;::::0;;94615:12:::2;94594:18;:33:::0;94522:117:::2;-1:-1:-1::0;91390:15:0::1;:23:::0;;-1:-1:-1;;;;91390:23:0::1;::::0;;94354:292::o;109885:100::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;109954:14:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;109954:23:0::1;-1:-1:-1::0;;;;109954:23:0;;::::1;::::0;;;::::1;::::0;;109885:100::o;17778:104::-;17834:13;17867:7;17860:14;;;;;:::i;95394:204::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;95350:28:0;;95326:4;95350:28;;;:19;:28;;;;;;;;95475:66:::1;;;::::0;-1:-1:-1;;;95475:66:0;;10201:2:1;95475:66:0::1;::::0;::::1;10183:21:1::0;10240:2;10220:18;;;10213:30;10279:26;10259:18;;;10252:54;10323:18;;95475:66:0::1;9999:348:1::0;95475:66:0::1;-1:-1:-1::0;;;;;95554:28:0::1;95585:5;95554:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;95554:36:0::1;::::0;;95394:204::o;21996:413::-;9133:10;22089:4;22133:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22133:34:0;;;;;;;;;;22186:35;;;;22178:85;;;;-1:-1:-1;;;22178:85:0;;10554:2:1;22178:85:0;;;10536:21:1;10593:2;10573:18;;;10566:30;10632:34;10612:18;;;10605:62;-1:-1:-1;;;10683:18:1;;;10676:35;10728:19;;22178:85:0;10352:401:1;22178:85:0;22299:67;9133:10;22322:7;22350:15;22331:16;:34;22299:8;:67::i;:::-;-1:-1:-1;22397:4:0;;21996:413;-1:-1:-1;;;21996:413:0:o;19190:175::-;19276:4;19293:42;9133:10;19317:9;19328:6;19293:9;:42::i;109624:151::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;109730:4:::1;109715:12;;:19;;;;:::i;:::-;109705:6;:29;;109697:38;;;::::0;::::1;96247:187:::0;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;96329:22:::1;96343:7;96329:13;:22::i;:::-;96321:63;;;;-1:-1:-1::0;;;96321:63:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;96397:21:0::1;96421:5;96397:21:::0;;;:12:::1;:21;::::0;;;;:29;;-1:-1:-1;;96397:29:0::1;::::0;;96247:187::o;110110:108::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;110182:14:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;110182:28:0;;::::1;::::0;;;::::1;::::0;;110110:108::o;107432:94::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;107498:9:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;107498:20:0;;::::1;::::0;;;::::1;::::0;;107432:94::o;109990:115::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;110067:16:::1;:30:::0;;-1:-1:-1;;110067:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;109990:115::o;108362:890::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;108601:13:::1;:33:::0;;;108645:12:::1;:31:::0;;;108687:18:::1;:34:::0;;;108734:12:::1;:29:::0;;;108774:13:::1;:28:::0;;;108815:21:::1;:45:::0;;;108871:22:::1;:47:::0;;;108660:16;108945:34:::1;108708:13:::0;108617:17;108945:34:::1;:::i;:::-;:49;;;;:::i;:::-;108931:10;:64:::0;109078:18:::1;::::0;109054:21:::1;::::0;109029:22:::1;::::0;:46:::1;::::0;109054:21;109029:46:::1;:::i;:::-;:67;;;;:::i;:::-;109006:19;:91:::0;109116:10:::1;::::0;109130:2:::1;-1:-1:-1::0;109116:16:0::1;109108:58;;;::::0;-1:-1:-1;;;109108:58:0;;10960:2:1;109108:58:0::1;::::0;::::1;10942:21:1::0;10999:2;10979:18;;;10972:30;11038:31;11018:18;;;11011:59;11087:18;;109108:58:0::1;10758:353:1::0;109108:58:0::1;109208:2;109185:19;;:25;;109177:67;;;::::0;-1:-1:-1;;;109177:67:0;;10960:2:1;109177:67:0::1;::::0;::::1;10942:21:1::0;10999:2;10979:18;;;10972:30;11038:31;11018:18;;;11011:59;11087:18;;109177:67:0::1;10758:353:1::0;109177:67:0::1;108362:890:::0;;;;;;;:::o;11238:201::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11327:22:0;::::1;11319:73;;;::::0;-1:-1:-1;;;11319:73:0;;11318:2:1;11319:73:0::1;::::0;::::1;11300:21:1::0;11357:2;11337:18;;;11330:30;11396:34;11376:18;;;11369:62;-1:-1:-1;;;11447:18:1;;;11440:36;11493:19;;11319:73:0::1;11116:402:1::0;11319:73:0::1;11403:28;11422:8;11403:18;:28::i;25680:380::-:0;-1:-1:-1;;;;;25816:19:0;;25808:68;;;;-1:-1:-1;;;25808:68:0;;11725:2:1;25808:68:0;;;11707:21:1;11764:2;11744:18;;;11737:30;11803:34;11783:18;;;11776:62;-1:-1:-1;;;11854:18:1;;;11847:34;11898:19;;25808:68:0;11523:400:1;25808:68:0;-1:-1:-1;;;;;25895:21:0;;25887:68;;;;-1:-1:-1;;;25887:68:0;;12130:2:1;25887:68:0;;;12112:21:1;12169:2;12149:18;;;12142:30;12208:34;12188:18;;;12181:62;-1:-1:-1;;;12259:18:1;;;12252:32;12301:19;;25887:68:0;11928:398:1;25887:68:0;-1:-1:-1;;;;;25968:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26020:32;;1410:25:1;;;26020:32:0;;1383:18:1;26020:32:0;;;;;;;25680:380;;;:::o;97666:3538::-;97803:21;97817:6;97803:13;:21::i;:::-;:49;;;;97828:24;97842:9;97828:13;:24::i;:::-;97799:142;;;97869:39;97882:6;97890:9;97901:6;97869:12;:39::i;97799:142::-;97962:13;97968:6;97962:5;:13::i;:::-;97961:14;97953:47;;;;-1:-1:-1;;;97953:47:0;;12533:2:1;97953:47:0;;;12515:21:1;12572:2;12552:18;;;12545:30;-1:-1:-1;;;12591:18:1;;;12584:50;12651:18;;97953:47:0;12331:344:1;97953:47:0;98020:16;98026:9;98020:5;:16::i;:::-;98019:17;98011:53;;;;-1:-1:-1;;;98011:53:0;;12882:2:1;98011:53:0;;;12864:21:1;12921:2;12901:18;;;12894:30;12960:25;12940:18;;;12933:53;13003:18;;98011:53:0;12680:347:1;98011:53:0;98075:19;98128:4;98113:12;;98097:13;107614:12;;;107534:100;98097:13;:28;;;;:::i;:::-;:35;;;;:::i;:::-;98075:57;;98143:23;98198:4;98185:10;;98169:13;107614:12;;;107534:100;98169:13;:26;;;;:::i;:::-;:33;;;;:::i;:::-;98143:59;;98231:11;98221:6;:21;;:41;;;-1:-1:-1;98247:15:0;;-1:-1:-1;;;98247:15:0;;;;98221:41;:52;;;-1:-1:-1;98266:7:0;;-1:-1:-1;;;98266:7:0;;;;98221:52;:85;;;-1:-1:-1;98298:7:0;;-1:-1:-1;;;;;98277:29:0;;;98298:7;;98277:29;98221:85;98213:128;;;;-1:-1:-1;;;98213:128:0;;13234:2:1;98213:128:0;;;13216:21:1;13273:2;13253:18;;;13246:30;13312:32;13292:18;;;13285:60;13362:18;;98213:128:0;13032:354:1;98213:128:0;98354:28;98385:24;98403:4;98385:9;:24::i;:::-;98471:11;;-1:-1:-1;;;;;98499:31:0;;98420:24;98499:31;;;:20;:31;;;;;;98354:55;;-1:-1:-1;98447:35:0;;;;98495:122;;98586:19;;-1:-1:-1;;;;;98552:31:0;;;;;;:20;:31;;;;;:53;98495:122;98656:11;98632:20;:35;98629:101;;98707:11;98684:34;;98629:101;98760:19;:44;;;;-1:-1:-1;98797:7:0;;-1:-1:-1;;;98797:7:0;;;;98796:8;98760:44;:76;;;;-1:-1:-1;98831:5:0;;-1:-1:-1;;;;;98821:15:0;;;98831:5;;98821:15;;98760:76;:102;;;;-1:-1:-1;98853:9:0;;;;;;;98760:102;98742:186;;;98889:27;98895:20;98889:5;:27::i;:::-;98940:33;98965:6;98940:16;:33::i;:::-;98984:36;99009:9;98984:16;:36::i;:::-;99237:5;;99048:6;;99033:12;;;;;;;;;;-1:-1:-1;;;;;99227:15:0;;;99237:5;;99227:15;:33;;;;-1:-1:-1;99246:14:0;;-1:-1:-1;;;99246:14:0;;;;99227:33;99223:1510;;;-1:-1:-1;;;;;99321:20:0;;;;;;:9;:20;;;;;;99355:15;;99321:29;;99344:6;;99321:29;:::i;:::-;99320:50;;99312:59;;;;;;99425:3;99411:10;;99405:3;:16;;;;:::i;:::-;99395:27;;:6;:27;:::i;:::-;:33;;;;:::i;:::-;99388:40;;99477:3;99462:12;;99453:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;99443:37;;99527:3;99511:13;;99502:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;99557:14;;99495:35;;-1:-1:-1;99557:14:0;;;;;99556:15;;:68;;-1:-1:-1;99615:9:0;;99602;99593:19;;;;:8;:19;;;;;;99575:37;;:15;:37;:::i;:::-;:49;99556:68;99555:81;;;-1:-1:-1;99629:7:0;;-1:-1:-1;;;99629:7:0;;;;99555:81;99547:123;;;;-1:-1:-1;;;99547:123:0;;13593:2:1;99547:123:0;;;13575:21:1;13632:2;13612:18;;;13605:30;13671:31;13651:18;;;13644:59;13720:18;;99547:123:0;13391:353:1;99547:123:0;99685:29;99701:6;99709:4;99685:15;:29::i;:::-;99738:9;99729:19;;;;:8;:19;;;;;99751:15;99729:37;;99781:25;99790:6;99798:7;99781:8;:25::i;:::-;99223:1510;;;99841:5;;-1:-1:-1;;;;;99828:18:0;;;99841:5;;99828:18;:36;;;;-1:-1:-1;99850:14:0;;-1:-1:-1;;;99850:14:0;;;;99828:36;99824:909;;;99934:16;;;;:76;;;;-1:-1:-1;99977:13:0;;;99963:9;99954:19;;;;:8;:19;;;;;;;;99995:15;;99954:37;;;:::i;:::-;:56;;99934:76;99930:636;;;100076:3;100053:19;;100047:3;:25;;;;:::i;:::-;100037:36;;:6;:36;:::i;:::-;:42;;;;:::i;:::-;100030:49;;100144:3;100119:22;;100110:6;:31;;;;:::i;:::-;:37;;;;:::i;:::-;100098:49;;100208:3;100187:18;;100178:6;:27;;;;:::i;:::-;:33;;;;:::i;:::-;100166:45;;100274:3;100250:21;;100241:6;:30;;;;:::i;:::-;:36;;;;:::i;:::-;100230:47;;99930:636;;;100367:3;100353:10;;100347:3;:16;;;;:::i;:::-;100337:27;;:6;:27;:::i;:::-;:33;;;;:::i;:::-;100330:40;;100426:3;100410:13;;100401:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;100389:40;;100490:3;100469:18;;100460:6;:27;;;;:::i;:::-;:33;;;;:::i;:::-;100448:45;;100547:3;100532:12;;100523:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;100512:38;;99930:636;100594:33;100609:6;100617:9;100594:14;:33::i;:::-;100642:31;100656:6;100664:8;100642:13;:31::i;:::-;100688:33;100703:6;100711:9;100688:14;:33::i;:::-;100745:37;100758:6;100766:9;100777:4;100745:12;:37::i;:::-;100807:14;;-1:-1:-1;;;100807:14:0;;;;:52;;;;;100841:18;;100825:12;:34;100807:52;:81;;;;;100864:24;100878:9;100864:13;:24::i;:::-;100863:25;100807:81;100803:394;;;100930:5;;-1:-1:-1;;;;;100930:5:0;100909:9;:27;100905:281;;;100979:5;;-1:-1:-1;;;;;100961:24:0;;;100979:5;;100961:24;100957:155;;;101010:18;101018:9;101010:7;:18::i;:::-;100905:281;;100957:155;101077:15;101085:6;101077:7;:15::i;100905:281::-;101152:18;101160:9;101152:7;:18::i;:::-;97788:3416;;;;;;;;;;97666:3538;;;:::o;101212:519::-;101294:5;;-1:-1:-1;;;;;101286:13:0;;;101294:5;;101286:13;;:41;;-1:-1:-1;101319:7:0;;-1:-1:-1;;;;;101303:24:0;;;101319:7;;101303:24;101286:41;101282:54;;;101212:519;:::o;101282:54::-;-1:-1:-1;;;;;101396:26:0;;101348:23;101396:26;;;:20;:26;;;;;;101374:19;;:48;;101396:26;101374:48;:::i;:::-;101348:74;;101433:12;101484;;101466:15;101476:4;101466:9;:15::i;:::-;101448:33;;:15;:33;:::i;:::-;:48;;;;:::i;:::-;101538:19;;-1:-1:-1;;;;;101509:26:0;;;;;;:20;:26;;;;;:48;101433:63;-1:-1:-1;101572:9:0;101568:52;;101602:7;;101212:519;:::o;101568:52::-;101630:19;;-1:-1:-1;;;;;101630:13:0;;;:19;;;;;101644:4;;101630:19;;;;101644:4;101630:13;:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;101654:25:0;;;;;;:19;:25;;;;;:33;;101683:4;;101654:25;:33;;101683:4;;101654:33;:::i;:::-;;;;;;;;101719:4;101698:17;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;101212:519:0:o;102351:2111::-;91244:7;:14;;-1:-1:-1;;;;91244:14:0;-1:-1:-1;;;91244:14:0;;;102435:16:::1;::::0;;102449:1:::1;102435:16:::0;;;;;::::1;::::0;;-1:-1:-1;;102435:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;102435:16:0::1;102411:40;;102480:4;102462;102467:1;102462:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;102462:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;102506:7:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;102506:14:0;;;;:7;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;102462:7;;102506:14;;;;;:7;:14:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;102496:4;102501:1;102496:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;102496:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;102565:7:::1;::::0;102533:49:::1;::::0;102550:4:::1;::::0;102565:7:::1;102575:6:::0;102533:8:::1;:49::i;:::-;102658:7;::::0;:183:::1;::::0;-1:-1:-1;;;102658:183:0;;102624:21:::1;::::0;-1:-1:-1;;;;;102658:7:0::1;::::0;:58:::1;::::0;:183:::1;::::0;102731:6;;102595:26:::1;::::0;102768:4;;102795::::1;::::0;102815:15:::1;::::0;102658:183:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;102854:18;102899;102875:21;:42;;;;:::i;:::-;102854:63;;102930:23;103049:19;;103028:18;;103006:19;;102988:15;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;102965:19;::::0;102956:28:::1;::::0;:6;:28:::1;:::i;:::-;:113;;;;:::i;:::-;102930:139;;103080:22;103197:19;;103176:18;;103154:19;;103136:15;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;103114:18;::::0;103105:27:::1;::::0;:6;:27:::1;:::i;:::-;:112;;;;:::i;:::-;103080:137;;103228:23;103347:19;;103326:18;;103304:19;;103286:15;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;103263:19;::::0;103254:28:::1;::::0;:6;:28:::1;:::i;:::-;:113;;;;:::i;:::-;103228:139:::0;-1:-1:-1;103380:23:0::1;103228:139:::0;103416:32:::1;103434:14:::0;103416:15;:32:::1;:::i;:::-;:50;;;;:::i;:::-;103406:61;::::0;:6;:61:::1;:::i;:::-;103380:87;;103480:20;103600:19;;103579:18;;103557:19;;103539:15;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;103516:19;::::0;103503:32:::1;::::0;:10;:32:::1;:::i;:::-;:117;;;;:::i;:::-;103480:140;;103631:19;103749;;103728:18;;103706:19;;103688:15;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;103666:18;::::0;103653:31:::1;::::0;:10;:31:::1;:::i;:::-;:116;;;;:::i;:::-;103631:138;;103780:20;103900:19;;103879:18;;103857:19;;103839:15;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:80;;;;:::i;:::-;103816:19;::::0;103803:32:::1;::::0;:10;:32:::1;:::i;:::-;:117;;;;:::i;:::-;103780:140:::0;-1:-1:-1;103931:20:0::1;103780:140:::0;103968:26:::1;103983:11:::0;103968:12;:26:::1;:::i;:::-;:41;;;;:::i;:::-;103954:56;::::0;:10;:56:::1;:::i;:::-;103931:79:::0;-1:-1:-1;104027:16:0;;104023:194:::1;;104060:16;::::0;:39:::1;::::0;-1:-1:-1;;;;;104060:16:0;;::::1;::::0;:39;::::1;;;::::0;104086:12;;104060:16:::1;:39:::0;:16;:39;104086:12;104060:16;:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;104114:16:0::1;::::0;:39:::1;::::0;-1:-1:-1;;;;;104114:16:0;;::::1;::::0;:39;::::1;;;::::0;104140:12;;104114:16:::1;:39:::0;:16;:39;104140:12;104114:16;:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;104168:15:0::1;::::0;:37:::1;::::0;-1:-1:-1;;;;;104168:15:0;;::::1;::::0;:37;::::1;;;::::0;104193:11;;104168:15:::1;:37:::0;:15;:37;104193:11;104168:15;:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;104023:194;104252:15;104229:19;;:38;;;;;;;:::i;:::-;;;;;;;;104300:14;104278:18;;:36;;;;;;;:::i;:::-;;;;;;;;104348:15;104325:19;;:38;;;;;;;:::i;:::-;;;;;;;;104393:15;104374;;:34;;;;;;;:::i;:::-;;;;;;;;104442:12;104419:19;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;91281:7:0;:15;;-1:-1:-1;;;;91281:15:0;;;-1:-1:-1;;;;;;;;;;;;102351:2111:0:o;107642:199::-;107735:6;107719:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;107752:28:0;;-1:-1:-1;107764:7:0;107773:6;107752:11;:28::i;:::-;107796:37;;1410:25:1;;;-1:-1:-1;;;;;107796:37:0;;;107813:1;;-1:-1:-1;;;;;;;;;;;107796:37:0;1398:2:1;1383:18;107796:37:0;;;;;;;;107642:199;;:::o;95731:194::-;-1:-1:-1;;;;;95350:28:0;;95326:4;95350:28;;;:19;:28;;;;;;;;95808:30;95800:71;;;;-1:-1:-1;;;95800:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;95882:28:0;;;;;:19;:28;;;;;:35;;-1:-1:-1;;95882:35:0;95913:4;95882:35;;;95731:194::o;11599:191::-;11692:6;;;-1:-1:-1;;;;;11709:17:0;;;-1:-1:-1;;;;;;11709:17:0;;;;;;;11742:40;;11692:6;;;11709:17;11692:6;;11742:40;;11673:16;;11742:40;11662:128;11599:191;:::o;94654:497::-;94834:7;;94802:54;;94819:4;;-1:-1:-1;;;;;94834:7:0;94844:11;94802:8;:54::i;:::-;94899:7;;-1:-1:-1;;;;;94899:7:0;:23;94930:9;94963:4;94983:11;94899:7;;95095;10402:6;;-1:-1:-1;;;;;10402:6:0;;10329:87;95095:7;94899:244;;;;;;-1:-1:-1;;;;;;94899:244:0;;;-1:-1:-1;;;;;15349:15:1;;;94899:244:0;;;15331:34:1;15381:18;;;15374:34;;;;15424:18;;;15417:34;;;;15467:18;;;15460:34;15531:15;;;15510:19;;;15503:44;95117:15:0;15563:19:1;;;15556:35;15265:19;;94899:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;94654:497;;:::o;106729:578::-;-1:-1:-1;;;;;106864:20:0;;106856:63;;;;-1:-1:-1;;;106856:63:0;;16115:2:1;106856:63:0;;;16097:21:1;16154:2;16134:18;;;16127:30;16193:32;16173:18;;;16166:60;16243:18;;106856:63:0;15913:354:1;106856:63:0;-1:-1:-1;;;;;106938:23:0;;106930:64;;;;-1:-1:-1;;;106930:64:0;;16474:2:1;106930:64:0;;;16456:21:1;16513:2;16493:18;;;16486:30;16552;16532:18;;;16525:58;16600:18;;106930:64:0;16272:352:1;106930:64:0;107007:21;107031:17;107041:6;107031:9;:17::i;:::-;107007:41;;107084:6;107067:13;:23;;107059:67;;;;-1:-1:-1;;;107059:67:0;;16831:2:1;107059:67:0;;;16813:21:1;16870:2;16850:18;;;16843:30;16909:33;16889:18;;;16882:61;16960:18;;107059:67:0;16629:355:1;107059:67:0;107162:32;107179:6;107187;107162:16;:32::i;:::-;107216:30;107228:9;107239:6;107216:11;:30::i;:::-;107281:9;-1:-1:-1;;;;;107264:35:0;107273:6;-1:-1:-1;;;;;107264:35:0;-1:-1:-1;;;;;;;;;;;107292:6:0;107264:35;;;;1410:25:1;;1398:2;1383:18;;1264:177;107264:35:0;;;;;;;;106845:462;106729:578;;;:::o;106335:345::-;106433:19;106443:8;106433:9;:19::i;:::-;106422:7;:30;;106413:40;;;;;;-1:-1:-1;;;;;106487:19:0;;;;;;:9;:19;;;;;;:29;;106509:7;;106487:29;:::i;:::-;-1:-1:-1;;;;;106464:19:0;;;;;;:9;:19;;;;;:53;106544:12;;:22;;106559:7;;106544:22;:::i;:::-;106528:12;:39;106594:12;;:22;;106609:7;;106594:22;:::i;:::-;106578:12;:39;106633;;1410:25:1;;;106660:1:0;;-1:-1:-1;;;;;106633:39:0;;;-1:-1:-1;;;;;;;;;;;106633:39:0;1398:2:1;1383:18;106633:39:0;1264:177:1;105091:291:0;-1:-1:-1;;;;;105170:21:0;;105162:63;;;;-1:-1:-1;;;105162:63:0;;17191:2:1;105162:63:0;;;17173:21:1;17230:2;17210:18;;;17203:30;17269:31;17249:18;;;17242:59;17318:18;;105162:63:0;16989:353:1;105162:63:0;105238:44;105251:7;105268:4;105275:6;105238:12;:44::i;:::-;105312:6;105293:15;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;105334:40:0;;1410:25:1;;;105360:4:0;;-1:-1:-1;;;;;105334:40:0;;;-1:-1:-1;;;;;;;;;;;105334:40:0;1398:2:1;1383:18;105334:40:0;1264:177:1;105390:308:0;-1:-1:-1;;;;;105475:21:0;;105467:70;;;;-1:-1:-1;;;105467:70:0;;17549:2:1;105467:70:0;;;17531:21:1;17588:2;17568:18;;;17561:30;17627:34;17607:18;;;17600:62;-1:-1:-1;;;17678:18:1;;;17671:34;17722:19;;105467:70:0;17347:400:1;105467:70:0;105550:44;105563:7;105580:4;105587:6;105550:12;:44::i;:::-;105628:6;105605:19;;:29;;;;;;;:::i;105706:305::-;-1:-1:-1;;;;;105790:21:0;;105782:69;;;;-1:-1:-1;;;105782:69:0;;17954:2:1;105782:69:0;;;17936:21:1;17993:2;17973:18;;;17966:30;18032:34;18012:18;;;18005:62;-1:-1:-1;;;18083:18:1;;;18076:33;18126:19;;105782:69:0;17752:399:1;105782:69:0;105864:44;105877:7;105894:4;105901:6;105864:12;:44::i;:::-;105941:6;105919:18;;:28;;;;;;;:::i;106019:308::-;-1:-1:-1;;;;;106104:21:0;;106096:70;;;;-1:-1:-1;;;106096:70:0;;18358:2:1;106096:70:0;;;18340:21:1;18397:2;18377:18;;;18370:30;18436:34;18416:18;;;18409:62;-1:-1:-1;;;18487:18:1;;;18480:34;18531:19;;106096:70:0;18156:400:1;106096:70:0;106179:44;106192:7;106209:4;106216:6;106179:12;:44::i;:::-;106257:6;106234:19;;:29;;;;;;;:::i;96633:349::-;96696:14;96702:7;96696:5;:14::i;:::-;96695:15;96687:55;;;;-1:-1:-1;;;96687:55:0;;18763:2:1;96687:55:0;;;18745:21:1;18802:2;18782:18;;;18775:30;18841:29;18821:18;;;18814:57;18888:18;;96687:55:0;18561:351:1;96687:55:0;96780:7;;-1:-1:-1;;;;;96761:27:0;;;96780:7;;96761:27;;96753:74;;;;-1:-1:-1;;;96753:74:0;;19119:2:1;96753:74:0;;;19101:21:1;19158:2;19138:18;;;19131:30;19197:34;19177:18;;;19170:62;-1:-1:-1;;;19248:18:1;;;19241:32;19290:19;;96753:74:0;18917:398:1;96753:74:0;96857:5;;-1:-1:-1;;;;;96846:16:0;;;96857:5;;96846:16;;96838:61;;;;-1:-1:-1;;;96838:61:0;;19522:2:1;96838:61:0;;;19504:21:1;;;19541:18;;;19534:30;19600:34;19580:18;;;19573:62;19652:18;;96838:61:0;19320:356:1;96838:61:0;-1:-1:-1;;;;;96912:13:0;;;;;;:4;:13;;;;;:20;;-1:-1:-1;;96912:20:0;96928:4;96912:20;;;96943:31;96917:7;96943:22;:31::i;97385:130::-;-1:-1:-1;;;;;97480:18:0;;;;;;:9;:18;;;;;;:27;;97501:6;;97480:27;:::i;:::-;-1:-1:-1;;;;;97459:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;97385:130:0:o;97523:135::-;-1:-1:-1;;;;;97623:18:0;;;;;;:9;:18;;;;;;:27;;97644:6;;97623:27;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;2320:247::-;2379:6;2432:2;2420:9;2411:7;2407:23;2403:32;2400:52;;;2448:1;2445;2438:12;2400:52;2487:9;2474:23;2506:31;2531:5;2506:31;:::i;:::-;2556:5;2320:247;-1:-1:-1;;;2320:247:1:o;2572:180::-;2631:6;2684:2;2672:9;2663:7;2659:23;2655:32;2652:52;;;2700:1;2697;2690:12;2652:52;-1:-1:-1;2723:23:1;;2572:180;-1:-1:-1;2572:180:1:o;2757:127::-;2818:10;2813:3;2809:20;2806:1;2799:31;2849:4;2846:1;2839:15;2873:4;2870:1;2863:15;2889:275;2960:2;2954:9;3025:2;3006:13;;-1:-1:-1;;3002:27:1;2990:40;;3060:18;3045:34;;3081:22;;;3042:62;3039:88;;;3107:18;;:::i;:::-;3143:2;3136:22;2889:275;;-1:-1:-1;2889:275:1:o;3169:183::-;3229:4;3262:18;3254:6;3251:30;3248:56;;;3284:18;;:::i;:::-;-1:-1:-1;3329:1:1;3325:14;3341:4;3321:25;;3169:183::o;3357:662::-;3411:5;3464:3;3457:4;3449:6;3445:17;3441:27;3431:55;;3482:1;3479;3472:12;3431:55;3518:6;3505:20;3544:4;3568:60;3584:43;3624:2;3584:43;:::i;:::-;3568:60;:::i;:::-;3662:15;;;3748:1;3744:10;;;;3732:23;;3728:32;;;3693:12;;;;3772:15;;;3769:35;;;3800:1;3797;3790:12;3769:35;3836:2;3828:6;3824:15;3848:142;3864:6;3859:3;3856:15;3848:142;;;3930:17;;3918:30;;3968:12;;;;3881;;3848:142;;;-1:-1:-1;4008:5:1;3357:662;-1:-1:-1;;;;;;3357:662:1:o;4024:1215::-;4142:6;4150;4203:2;4191:9;4182:7;4178:23;4174:32;4171:52;;;4219:1;4216;4209:12;4171:52;4259:9;4246:23;4288:18;4329:2;4321:6;4318:14;4315:34;;;4345:1;4342;4335:12;4315:34;4383:6;4372:9;4368:22;4358:32;;4428:7;4421:4;4417:2;4413:13;4409:27;4399:55;;4450:1;4447;4440:12;4399:55;4486:2;4473:16;4508:4;4532:60;4548:43;4588:2;4548:43;:::i;4532:60::-;4626:15;;;4708:1;4704:10;;;;4696:19;;4692:28;;;4657:12;;;;4732:19;;;4729:39;;;4764:1;4761;4754:12;4729:39;4788:11;;;;4808:217;4824:6;4819:3;4816:15;4808:217;;;4904:3;4891:17;4921:31;4946:5;4921:31;:::i;:::-;4965:18;;4841:12;;;;5003;;;;4808:217;;;5044:5;-1:-1:-1;;5087:18:1;;5074:32;;-1:-1:-1;;5118:16:1;;;5115:36;;;5147:1;5144;5137:12;5115:36;;5170:63;5225:7;5214:8;5203:9;5199:24;5170:63;:::i;:::-;5160:73;;;4024:1215;;;;;:::o;5452:273::-;5508:6;5561:2;5549:9;5540:7;5536:23;5532:32;5529:52;;;5577:1;5574;5567:12;5529:52;5616:9;5603:23;5669:5;5662:13;5655:21;5648:5;5645:32;5635:60;;5691:1;5688;5681:12;5730:388;5798:6;5806;5859:2;5847:9;5838:7;5834:23;5830:32;5827:52;;;5875:1;5872;5865:12;5827:52;5914:9;5901:23;5933:31;5958:5;5933:31;:::i;:::-;5983:5;-1:-1:-1;6040:2:1;6025:18;;6012:32;6053:33;6012:32;6053:33;:::i;:::-;6105:7;6095:17;;;5730:388;;;;;:::o;6123:592::-;6236:6;6244;6252;6260;6268;6276;6284;6337:3;6325:9;6316:7;6312:23;6308:33;6305:53;;;6354:1;6351;6344:12;6305:53;-1:-1:-1;;6377:23:1;;;6447:2;6432:18;;6419:32;;-1:-1:-1;6498:2:1;6483:18;;6470:32;;6549:2;6534:18;;6521:32;;-1:-1:-1;6600:3:1;6585:19;;6572:33;;-1:-1:-1;6652:3:1;6637:19;;6624:33;;-1:-1:-1;6704:3:1;6689:19;6676:33;;-1:-1:-1;6123:592:1;-1:-1:-1;6123:592:1:o;6720:380::-;6799:1;6795:12;;;;6842;;;6863:61;;6917:4;6909:6;6905:17;6895:27;;6863:61;6970:2;6962:6;6959:14;6939:18;6936:38;6933:161;;;7016:10;7011:3;7007:20;7004:1;6997:31;7051:4;7048:1;7041:15;7079:4;7076:1;7069:15;6933:161;;6720:380;;;:::o;7514:127::-;7575:10;7570:3;7566:20;7563:1;7556:31;7606:4;7603:1;7596:15;7630:4;7627:1;7620:15;7646:125;7686:4;7714:1;7711;7708:8;7705:34;;;7719:18;;:::i;:::-;-1:-1:-1;7756:9:1;;7646:125::o;7776:168::-;7816:7;7882:1;7878;7874:6;7870:14;7867:1;7864:21;7859:1;7852:9;7845:17;7841:45;7838:71;;;7889:18;;:::i;:::-;-1:-1:-1;7929:9:1;;7776:168::o;7949:217::-;7989:1;8015;8005:132;;8059:10;8054:3;8050:20;8047:1;8040:31;8094:4;8091:1;8084:15;8122:4;8119:1;8112:15;8005:132;-1:-1:-1;8151:9:1;;7949:217::o;8171:128::-;8211:3;8242:1;8238:6;8235:1;8232:13;8229:39;;;8248:18;;:::i;:::-;-1:-1:-1;8284:9:1;;8171:128::o;8304:356::-;8506:2;8488:21;;;8525:18;;;8518:30;8584:34;8579:2;8564:18;;8557:62;8651:2;8636:18;;8304:356::o;8665:352::-;8867:2;8849:21;;;8906:2;8886:18;;;8879:30;8945;8940:2;8925:18;;8918:58;9008:2;8993:18;;8665:352::o;9727:127::-;9788:10;9783:3;9779:20;9776:1;9769:31;9819:4;9816:1;9809:15;9843:4;9840:1;9833:15;9859:135;9898:3;-1:-1:-1;;9919:17:1;;9916:43;;;9939:18;;:::i;:::-;-1:-1:-1;9986:1:1;9975:13;;9859:135::o;13749:251::-;13819:6;13872:2;13860:9;13851:7;13847:23;13843:32;13840:52;;;13888:1;13885;13878:12;13840:52;13920:9;13914:16;13939:31;13964:5;13939:31;:::i;14005:980::-;14267:4;14315:3;14304:9;14300:19;14346:6;14335:9;14328:25;14372:2;14410:6;14405:2;14394:9;14390:18;14383:34;14453:3;14448:2;14437:9;14433:18;14426:31;14477:6;14512;14506:13;14543:6;14535;14528:22;14581:3;14570:9;14566:19;14559:26;;14620:2;14612:6;14608:15;14594:29;;14641:1;14651:195;14665:6;14662:1;14659:13;14651:195;;;14730:13;;-1:-1:-1;;;;;14726:39:1;14714:52;;14821:15;;;;14786:12;;;;14762:1;14680:9;14651:195;;;-1:-1:-1;;;;;;;14902:32:1;;;;14897:2;14882:18;;14875:60;-1:-1:-1;;;14966:3:1;14951:19;14944:35;14863:3;14005:980;-1:-1:-1;;;14005:980:1:o;15602:306::-;15690:6;15698;15706;15759:2;15747:9;15738:7;15734:23;15730:32;15727:52;;;15775:1;15772;15765:12;15727:52;15804:9;15798:16;15788:26;;15854:2;15843:9;15839:18;15833:25;15823:35;;15898:2;15887:9;15883:18;15877:25;15867:35;;15602:306;;;;;:::o

Swarm Source

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