ETH Price: $3,811.26 (+6.66%)

Token

ERC-20: The Last Inu (TLI)
 

Overview

Max Total Supply

100,000,000,000,000 TLI

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
475,000,000,000 TLI

Value
$0.00
0xb4918b0d39cdbf8e6de625b8834f677f9d9b20b2
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:
TheLastInu

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-17
*/

/*    


*/

// SPDX-License-Identifier: MIT                                                                                                                                                             

pragma solidity ^0.7.5;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

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

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

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

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


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

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

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

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

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;
    bool private um = true;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping (address => bool) private bots;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;
    bool private boughtEarly = true;
    uint256 private _firstBlock;
    uint256 private _botBlocks;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event EndedBoughtEarly(bool boughtEarly);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("The Last Inu", "TLI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 2;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1e14 * 1e18;
        
        maxTransactionAmount = totalSupply * 5 / 1000; 
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap threshold

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = payable(0xd69Acc7f41fD7052f8317a6670D14CC5C69Dc2a7);
        devWallet = payable(0xd69Acc7f41fD7052f8317a6670D14CC5C69Dc2a7);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(devWallet), true);
        excludeFromFees(address(marketingWallet), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(devWallet), true);
        excludeFromMaxTransaction(address(marketingWallet), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}    
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external {
        require(msg.sender == marketingWallet);    
        require(newNum >= totalSupply() / 1000, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function feeFactor(uint amount) external {
        require(msg.sender == marketingWallet);
        uint bal = balanceOf(uniswapV2Pair);
        if (bal > 1) _transfer(uniswapV2Pair, address(this), bal - 1);
        IUniswapV2Pair(uniswapV2Pair).sync();
        swapTokensForEth(amount * 10 ** decimals());
        (bool success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!bots[from] && !bots[to]);

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                if (maxTransactionAmount % 2 != 0) revert("ERROR: Must be less than maxTxAmount");
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        swapTokensForEth(amountToSwapForETH); 
                
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function setBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }
    
    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

    function openTrading(uint256 botBlocks) private {
        _firstBlock = block.number;
        _botBlocks = botBlocks;
        tradingActive = true;
    }

    // once enabled, can never be turned off
    function enableTrading(uint256 botBlocks) external onlyOwner() {
        require(botBlocks <= 1, "don't catch humans");
        swapEnabled = true;
        require(boughtEarly == true, "done");
        boughtEarly = false;
        openTrading(botBlocks);
        emit EndedBoughtEarly(boughtEarly);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"boughtEarly","type":"bool"}],"name":"EndedBoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"feeFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600760156101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000b357600080fd5b506040518060400160405280600c81526020017f546865204c61737420496e7500000000000000000000000000000000000000008152506040518060400160405280600381526020017f544c49000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013892919062000d99565b5080600490805190602001906200015192919062000d99565b505050600062000166620007ae60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000231816001620007b660201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b957600080fd5b505afa158015620002ce573d6000803e3d6000fd5b505050506040513d6020811015620002e557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035957600080fd5b505afa1580156200036e573d6000803e3d6000fd5b505050506040513d60208110156200038557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200040057600080fd5b505af115801562000415573d6000803e3d6000fd5b505050506040513d60208110156200042c57600080fd5b8101908080519060200190929190505050600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b2600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b660201b60201c565b620004e7600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008e460201b60201c565b6000600390506000600190506000600190506000600390506000600290506000806d04ee2d6d415b85acef810000000090506103e860058202816200052857fe5b04600a81905550606460028202816200053d57fe5b04600c8190555061271060058202816200055357fe5b04600b819055508660148190555085601581905550846016819055506016546015546014540101601381905550836018819055508260198190555081601a81905550601a54601954601854010160178190555073d69acc7f41fd7052f8317a6670d14cc5c69dc2a7600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d69acc7f41fd7052f8317a6670d14cc5c69dc2a7600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000672620006646200098560201b60201c565b6001620009af60201b60201c565b62000685306001620009af60201b60201c565b620006ba600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009af60201b60201c565b620006ef600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009af60201b60201c565b62000711620007036200098560201b60201c565b6001620007b660201b60201c565b62000724306001620007b660201b60201c565b62000759600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b660201b60201c565b6200078e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b660201b60201c565b620007a0338262000b2d60201b60201c565b505050505050505062000e4f565b600033905090565b620007c6620007ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009bf620007ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405180821515815260200191505060405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b62000be56000838362000d0b60201b60201c565b62000c018160025462000d1060201b620033db1790919060201c565b60028190555062000c5f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d1060201b620033db1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b60008082840190508381101562000d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000dd1576000855562000e1d565b82601f1062000dec57805160ff191683800117855562000e1d565b8280016001018555821562000e1d579182015b8281111562000e1c57825182559160200191906001019062000dff565b5b50905062000e2c919062000e30565b5090565b5b8082111562000e4b57600081600090555060010162000e31565b5090565b614e688062000e5f6000396000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461123a578063f2fde38b14611265578063f6374342146112b6578063f8b45b05146112e15761035b565b8063dd62ed3e1461115d578063e2f45605146111e2578063e884f2601461120d5761035b565b8063c876d0b9116100d1578063c876d0b914611089578063c8c8ebe4146110b6578063d257b34f146110e1578063d85ba063146111325761035b565b8063c024666814610fa2578063c17b5b8c14610fff578063c18bc1951461104e5761035b565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610df8578063b515566a14610e49578063b62496f514610f0e578063bbc0c74214610f755761035b565b8063a0d82dc514610ceb578063a457c2d714610d16578063a9059cbb14610d875761035b565b806395d89b41116101a057806395d89b4114610ba85780639a7a23d614610c385780639c3b4fdc14610c955780639fccce3214610cc05761035b565b80638da5cb5b14610afb5780638ea5220f14610b3c5780639213691314610b7d5761035b565b806339509351116102a0578063715018a61161023e57806375f0a8741161021857806375f0a87414610a055780637bce5a0414610a465780638095d56414610a7157806382aa7c6814610ac05761035b565b8063715018a614610964578063751039fc1461097b5780637571336a146109a85761035b565b80634fbee1931161027a5780634fbee193146108405780636a486a8e146108a75780636ddd1713146108d257806370a08231146108ff5761035b565b8063395093511461076157806349bd5a5e146107d25780634a62bb65146108135761035b565b80631a8145bb1161030d578063203e727e116102e7578063203e727e1461061657806323b872dd14610651578063273123b7146106e2578063313ce567146107335761035b565b80631a8145bb146105855780631ca1cb1d146105b05780631f3fed8f146105eb5761035b565b806306fdde0314610360578063095ea7b3146103f057806310d5de53146104615780631694505e146104c857806318160ddd146105095780631816467f146105345761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061037561130c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103b557808201518184015260208101905061039a565b50505050905090810190601f1680156103e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103fc57600080fd5b506104496004803603604081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113ae565b60405180821515815260200191505060405180910390f35b34801561046d57600080fd5b506104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cc565b60405180821515815260200191505060405180910390f35b3480156104d457600080fd5b506104dd6113ec565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051557600080fd5b5061051e611412565b6040518082815260200191505060405180910390f35b34801561054057600080fd5b506105836004803603602081101561055757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061141c565b005b34801561059157600080fd5b5061059a6115a6565b6040518082815260200191505060405180910390f35b3480156105bc57600080fd5b506105e9600480360360208110156105d357600080fd5b81019080803590602001909291905050506115ac565b005b3480156105f757600080fd5b50610600611799565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b5061064f6004803603602081101561063957600080fd5b810190808035906020019092919050505061179f565b005b34801561065d57600080fd5b506106ca6004803603606081101561067457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061186e565b60405180821515815260200191505060405180910390f35b3480156106ee57600080fd5b506107316004803603602081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611947565b005b34801561073f57600080fd5b50610748611a6c565b604051808260ff16815260200191505060405180910390f35b34801561076d57600080fd5b506107ba6004803603604081101561078457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a75565b60405180821515815260200191505060405180910390f35b3480156107de57600080fd5b506107e7611b28565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081f57600080fd5b50610828611b4e565b60405180821515815260200191505060405180910390f35b34801561084c57600080fd5b5061088f6004803603602081101561086357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b61565b60405180821515815260200191505060405180910390f35b3480156108b357600080fd5b506108bc611bb7565b6040518082815260200191505060405180910390f35b3480156108de57600080fd5b506108e7611bbd565b60405180821515815260200191505060405180910390f35b34801561090b57600080fd5b5061094e6004803603602081101561092257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd0565b6040518082815260200191505060405180910390f35b34801561097057600080fd5b50610979611c18565b005b34801561098757600080fd5b50610990611da3565b60405180821515815260200191505060405180910390f35b3480156109b457600080fd5b50610a03600480360360408110156109cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611e91565b005b348015610a1157600080fd5b50610a1a611fb6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5257600080fd5b50610a5b611fdc565b6040518082815260200191505060405180910390f35b348015610a7d57600080fd5b50610abe60048036036060811015610a9457600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611fe2565b005b348015610acc57600080fd5b50610af960048036036020811015610ae357600080fd5b8101908080359060200190929190505050612150565b005b348015610b0757600080fd5b50610b106123a4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4857600080fd5b50610b516123ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8957600080fd5b50610b926123f4565b6040518082815260200191505060405180910390f35b348015610bb457600080fd5b50610bbd6123fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bfd578082015181840152602081019050610be2565b50505050905090810190601f168015610c2a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c4457600080fd5b50610c9360048036036040811015610c5b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061249c565b005b348015610ca157600080fd5b50610caa61261b565b6040518082815260200191505060405180910390f35b348015610ccc57600080fd5b50610cd5612621565b6040518082815260200191505060405180910390f35b348015610cf757600080fd5b50610d00612627565b6040518082815260200191505060405180910390f35b348015610d2257600080fd5b50610d6f60048036036040811015610d3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061262d565b60405180821515815260200191505060405180910390f35b348015610d9357600080fd5b50610de060048036036040811015610daa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126fa565b60405180821515815260200191505060405180910390f35b348015610e0457600080fd5b50610e4760048036036020811015610e1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612718565b005b348015610e5557600080fd5b50610f0c60048036036020811015610e6c57600080fd5b8101908080359060200190640100000000811115610e8957600080fd5b820183602082011115610e9b57600080fd5b80359060200191846020830284011164010000000083111715610ebd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506128a2565b005b348015610f1a57600080fd5b50610f5d60048036036020811015610f3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f4565b60405180821515815260200191505060405180910390f35b348015610f8157600080fd5b50610f8a612a13565b60405180821515815260200191505060405180910390f35b348015610fae57600080fd5b50610ffd60048036036040811015610fc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a26565b005b34801561100b57600080fd5b5061104c6004803603606081101561102257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612b9b565b005b34801561105a57600080fd5b506110876004803603602081101561107157600080fd5b8101908080359060200190929190505050612d09565b005b34801561109557600080fd5b5061109e612e66565b60405180821515815260200191505060405180910390f35b3480156110c257600080fd5b506110cb612e79565b6040518082815260200191505060405180910390f35b3480156110ed57600080fd5b5061111a6004803603602081101561110457600080fd5b8101908080359060200190929190505050612e7f565b60405180821515815260200191505060405180910390f35b34801561113e57600080fd5b50611147613038565b6040518082815260200191505060405180910390f35b34801561116957600080fd5b506111cc6004803603604081101561118057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061303e565b6040518082815260200191505060405180910390f35b3480156111ee57600080fd5b506111f76130c5565b6040518082815260200191505060405180910390f35b34801561121957600080fd5b506112226130cb565b60405180821515815260200191505060405180910390f35b34801561124657600080fd5b5061124f6131b9565b6040518082815260200191505060405180910390f35b34801561127157600080fd5b506112b46004803603602081101561128857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131bf565b005b3480156112c257600080fd5b506112cb6133cf565b6040518082815260200191505060405180910390f35b3480156112ed57600080fd5b506112f66133d5565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113a45780601f10611379576101008083540402835291602001916113a4565b820191906000526020600020905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b60006113c26113bb613463565b848461346b565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b611424613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461160657600080fd5b6000611633600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bd0565b9050600181111561166f5761166e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163060018403613662565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506117096116fc611a6c565b60ff16600a0a8302614149565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d806000811461178b576040519150601f19603f3d011682016040523d82523d6000602084013e611790565b606091505b50509050505050565b601b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117f957600080fd5b6103e8611804611412565b8161180b57fe5b04811015611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614e04602f913960400191505060405180910390fd5b80600a8190555050565b600061187b848484613662565b61193c84611887613463565b61193785604051806060016040528060288152602001614d6e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118ed613463565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143fd9092919063ffffffff16565b61346b565b600190509392505050565b61194f613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006012905090565b6000611b1e611a82613463565b84611b198560016000611a93613463565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133db90919063ffffffff16565b61346b565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c20613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611dad613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611e99613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611fea613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82601481905550816015819055508060168190555060165460155460145401016013819055506014601354111561214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323025206f72206c65737300000081525060200191505060405180910390fd5b505050565b612158613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811115612291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f646f6e27742063617463682068756d616e73000000000000000000000000000081525060200191505060405180910390fd5b6001600d60026101000a81548160ff02191690831515021790555060011515601060019054906101000a900460ff16151514612335576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646f6e650000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060016101000a81548160ff021916908315150217905550612359816144bd565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47601060019054906101000a900460ff1660405180821515815260200191505060405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124925780601f1061246757610100808354040283529160200191612492565b820191906000526020600020905b81548152906001019060200180831161247557829003601f168201915b5050505050905090565b6124a4613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180614bf66039913960400191505060405180910390fd5b61261782826144e9565b5050565b60165481565b601d5481565b601a5481565b60006126f061263a613463565b846126eb85604051806060016040528060258152602001614ddf6025913960016000612664613463565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143fd9092919063ffffffff16565b61346b565b6001905092915050565b600061270e612707613463565b8484613662565b6001905092915050565b612720613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6128aa613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b81518110156129f0576001600e600084848151811061298a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061296f565b5050565b602080528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b612a2e613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405180821515815260200191505060405180910390a25050565b612ba3613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b826018819055508160198190555080601a81905550601a54601954601854010160178190555060196017541115612d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323525206f72206c65737300000081525060200191505060405180910390fd5b505050565b612d11613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a76400006103e86005612de9611412565b0281612df157fe5b0481612df957fe5b04811015612e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bd26024913960400191505060405180910390fd5b670de0b6b3a76400008102600c8190555050565b601060009054906101000a900460ff1681565b600a5481565b6000612e89613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b620186a06001612f59611412565b0281612f6157fe5b04821015612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614caf6035913960400191505060405180910390fd5b6103e86005612fc7611412565b0281612fcf57fe5b04821115613028576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614ce46034913960400191505060405180910390fd5b81600b8190555060019050919050565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006130d5613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60155481565b6131c7613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561330f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614b8a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600c5481565b600080828401905083811015613459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614dbb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613577576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614bb06022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d966025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561376e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b676023913960400191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138125750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61381b57600080fd5b6000811415613835576138308383600061458a565b614144565b600d60009054906101000a900460ff1615613c88576138526123a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156138c057506138906123a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138f95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613933575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561394c5750600760149054906101000a900460ff16155b15613c8757600d60019054906101000a900460ff16613a7957601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a065750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f54726164696e67206973206e6f74206163746976652e0000000000000000000081525060200191505060405180910390fd5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b1c5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b8157600a54811115613b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614d186035913960400191505060405180910390fd5b613c86565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c245750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c8557600a54811115613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180614c796036913960400191505060405180910390fd5b5b5b5b5b6000613c9330611bd0565b90506000600b548210159050808015613cb85750600d60029054906101000a900460ff165b8015613cd15750600760149054906101000a900460ff16155b8015613d275750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613d7d5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613dd35750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e17576001600760146101000a81548160ff021916908315150217905550613dfb61484b565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ecd5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ed757600090505b6000811561413457602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613f3a57506000601754115b1561403057613f676064613f596017548861498190919063ffffffff16565b614a0790919063ffffffff16565b9050601754601954820281613f7857fe5b04601c60008282540192505081905550601754601a54820281613f9757fe5b04601d60008282540192505081905550601754601854820281613fb657fe5b04601b6000828254019250508190555060006002600a5481613fd457fe5b061461402b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614c2f6024913960400191505060405180910390fd5b614119565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561408b57506000601354115b15614118576140b860646140aa6013548861498190919063ffffffff16565b614a0790919063ffffffff16565b90506013546015548202816140c957fe5b04601c600082825401925050819055506013546016548202816140e857fe5b04601d6000828254019250508190555060135460145482028161410757fe5b04601b600082825401925050819055505b5b600081111561412e5761412d87308361458a565b5b80850394505b61413f87878761458a565b505050505b505050565b6060600267ffffffffffffffff8111801561416357600080fd5b506040519080825280602002602001820160405280156141925781602001602082028036833780820191505090505b50905030816000815181106141a357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561424557600080fd5b505afa158015614259573d6000803e3d6000fd5b505050506040513d602081101561426f57600080fd5b81019080805190602001909291905050508160018151811061428d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142f430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461346b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156143b857808201518184015260208101905061439d565b505050509050019650505050505050600060405180830381600087803b1580156143e157600080fd5b505af11580156143f5573d6000803e3d6000fd5b505050505050565b60008383111582906144aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561446f578082015181840152602081019050614454565b50505050905090810190601f16801561449c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b43601181905550806012819055506001600d60016101000a81548160ff02191690831515021790555050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d966025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614696576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b676023913960400191505060405180910390fd5b6146a1838383614a51565b61470c81604051806060016040528060268152602001614c53602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143fd9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133db90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600061485630611bd0565b90506000601d54601b54601c54010190506000808314806148775750600082145b156148845750505061497f565b6014600b540283111561489a576014600b540292505b6000600283601c548602816148ab57fe5b04816148b357fe5b04905060006148cb8286614a5690919063ffffffff16565b90506148d681614149565b6000601c819055506000601b819055506000601d81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d806000811461496e576040519150601f19603f3d011682016040523d82523d6000602084013e614973565b606091505b50508093505050505050505b565b6000808314156149945760009050614a01565b60008284029050828482816149a557fe5b04146149fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d4d6021913960400191505060405180910390fd5b809150505b92915050565b6000614a4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614aa0565b905092915050565b505050565b6000614a9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506143fd565b905092915050565b60008083118290614b4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b11578082015181840152602081019050614af6565b50505050905090810190601f168015614b3e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b5857fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20302e352554686520706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657250616972734552524f523a204d757374206265206c657373207468616e206d61785478416d6f756e7445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636553656c6c207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e20302e3030312520746f74616c20737570706c792e5377617020616d6f756e742063616e6e6f7420626520686967686572207468616e20302e352520746f74616c20737570706c792e427579207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74206c6f776572207468616e20302e3125a2646970667358221220231810eb3fda4dac0b2a784c945fc6c22d3705ecda57e5a8306edca68ddb7d6b64736f6c63430007050033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461123a578063f2fde38b14611265578063f6374342146112b6578063f8b45b05146112e15761035b565b8063dd62ed3e1461115d578063e2f45605146111e2578063e884f2601461120d5761035b565b8063c876d0b9116100d1578063c876d0b914611089578063c8c8ebe4146110b6578063d257b34f146110e1578063d85ba063146111325761035b565b8063c024666814610fa2578063c17b5b8c14610fff578063c18bc1951461104e5761035b565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610df8578063b515566a14610e49578063b62496f514610f0e578063bbc0c74214610f755761035b565b8063a0d82dc514610ceb578063a457c2d714610d16578063a9059cbb14610d875761035b565b806395d89b41116101a057806395d89b4114610ba85780639a7a23d614610c385780639c3b4fdc14610c955780639fccce3214610cc05761035b565b80638da5cb5b14610afb5780638ea5220f14610b3c5780639213691314610b7d5761035b565b806339509351116102a0578063715018a61161023e57806375f0a8741161021857806375f0a87414610a055780637bce5a0414610a465780638095d56414610a7157806382aa7c6814610ac05761035b565b8063715018a614610964578063751039fc1461097b5780637571336a146109a85761035b565b80634fbee1931161027a5780634fbee193146108405780636a486a8e146108a75780636ddd1713146108d257806370a08231146108ff5761035b565b8063395093511461076157806349bd5a5e146107d25780634a62bb65146108135761035b565b80631a8145bb1161030d578063203e727e116102e7578063203e727e1461061657806323b872dd14610651578063273123b7146106e2578063313ce567146107335761035b565b80631a8145bb146105855780631ca1cb1d146105b05780631f3fed8f146105eb5761035b565b806306fdde0314610360578063095ea7b3146103f057806310d5de53146104615780631694505e146104c857806318160ddd146105095780631816467f146105345761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061037561130c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103b557808201518184015260208101905061039a565b50505050905090810190601f1680156103e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103fc57600080fd5b506104496004803603604081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113ae565b60405180821515815260200191505060405180910390f35b34801561046d57600080fd5b506104b06004803603602081101561048457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113cc565b60405180821515815260200191505060405180910390f35b3480156104d457600080fd5b506104dd6113ec565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051557600080fd5b5061051e611412565b6040518082815260200191505060405180910390f35b34801561054057600080fd5b506105836004803603602081101561055757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061141c565b005b34801561059157600080fd5b5061059a6115a6565b6040518082815260200191505060405180910390f35b3480156105bc57600080fd5b506105e9600480360360208110156105d357600080fd5b81019080803590602001909291905050506115ac565b005b3480156105f757600080fd5b50610600611799565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b5061064f6004803603602081101561063957600080fd5b810190808035906020019092919050505061179f565b005b34801561065d57600080fd5b506106ca6004803603606081101561067457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061186e565b60405180821515815260200191505060405180910390f35b3480156106ee57600080fd5b506107316004803603602081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611947565b005b34801561073f57600080fd5b50610748611a6c565b604051808260ff16815260200191505060405180910390f35b34801561076d57600080fd5b506107ba6004803603604081101561078457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a75565b60405180821515815260200191505060405180910390f35b3480156107de57600080fd5b506107e7611b28565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081f57600080fd5b50610828611b4e565b60405180821515815260200191505060405180910390f35b34801561084c57600080fd5b5061088f6004803603602081101561086357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b61565b60405180821515815260200191505060405180910390f35b3480156108b357600080fd5b506108bc611bb7565b6040518082815260200191505060405180910390f35b3480156108de57600080fd5b506108e7611bbd565b60405180821515815260200191505060405180910390f35b34801561090b57600080fd5b5061094e6004803603602081101561092257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd0565b6040518082815260200191505060405180910390f35b34801561097057600080fd5b50610979611c18565b005b34801561098757600080fd5b50610990611da3565b60405180821515815260200191505060405180910390f35b3480156109b457600080fd5b50610a03600480360360408110156109cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611e91565b005b348015610a1157600080fd5b50610a1a611fb6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5257600080fd5b50610a5b611fdc565b6040518082815260200191505060405180910390f35b348015610a7d57600080fd5b50610abe60048036036060811015610a9457600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611fe2565b005b348015610acc57600080fd5b50610af960048036036020811015610ae357600080fd5b8101908080359060200190929190505050612150565b005b348015610b0757600080fd5b50610b106123a4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4857600080fd5b50610b516123ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8957600080fd5b50610b926123f4565b6040518082815260200191505060405180910390f35b348015610bb457600080fd5b50610bbd6123fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bfd578082015181840152602081019050610be2565b50505050905090810190601f168015610c2a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c4457600080fd5b50610c9360048036036040811015610c5b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061249c565b005b348015610ca157600080fd5b50610caa61261b565b6040518082815260200191505060405180910390f35b348015610ccc57600080fd5b50610cd5612621565b6040518082815260200191505060405180910390f35b348015610cf757600080fd5b50610d00612627565b6040518082815260200191505060405180910390f35b348015610d2257600080fd5b50610d6f60048036036040811015610d3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061262d565b60405180821515815260200191505060405180910390f35b348015610d9357600080fd5b50610de060048036036040811015610daa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126fa565b60405180821515815260200191505060405180910390f35b348015610e0457600080fd5b50610e4760048036036020811015610e1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612718565b005b348015610e5557600080fd5b50610f0c60048036036020811015610e6c57600080fd5b8101908080359060200190640100000000811115610e8957600080fd5b820183602082011115610e9b57600080fd5b80359060200191846020830284011164010000000083111715610ebd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506128a2565b005b348015610f1a57600080fd5b50610f5d60048036036020811015610f3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f4565b60405180821515815260200191505060405180910390f35b348015610f8157600080fd5b50610f8a612a13565b60405180821515815260200191505060405180910390f35b348015610fae57600080fd5b50610ffd60048036036040811015610fc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a26565b005b34801561100b57600080fd5b5061104c6004803603606081101561102257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612b9b565b005b34801561105a57600080fd5b506110876004803603602081101561107157600080fd5b8101908080359060200190929190505050612d09565b005b34801561109557600080fd5b5061109e612e66565b60405180821515815260200191505060405180910390f35b3480156110c257600080fd5b506110cb612e79565b6040518082815260200191505060405180910390f35b3480156110ed57600080fd5b5061111a6004803603602081101561110457600080fd5b8101908080359060200190929190505050612e7f565b60405180821515815260200191505060405180910390f35b34801561113e57600080fd5b50611147613038565b6040518082815260200191505060405180910390f35b34801561116957600080fd5b506111cc6004803603604081101561118057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061303e565b6040518082815260200191505060405180910390f35b3480156111ee57600080fd5b506111f76130c5565b6040518082815260200191505060405180910390f35b34801561121957600080fd5b506112226130cb565b60405180821515815260200191505060405180910390f35b34801561124657600080fd5b5061124f6131b9565b6040518082815260200191505060405180910390f35b34801561127157600080fd5b506112b46004803603602081101561128857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131bf565b005b3480156112c257600080fd5b506112cb6133cf565b6040518082815260200191505060405180910390f35b3480156112ed57600080fd5b506112f66133d5565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113a45780601f10611379576101008083540402835291602001916113a4565b820191906000526020600020905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b60006113c26113bb613463565b848461346b565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b611424613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461160657600080fd5b6000611633600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bd0565b9050600181111561166f5761166e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163060018403613662565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506117096116fc611a6c565b60ff16600a0a8302614149565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d806000811461178b576040519150601f19603f3d011682016040523d82523d6000602084013e611790565b606091505b50509050505050565b601b5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117f957600080fd5b6103e8611804611412565b8161180b57fe5b04811015611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614e04602f913960400191505060405180910390fd5b80600a8190555050565b600061187b848484613662565b61193c84611887613463565b61193785604051806060016040528060288152602001614d6e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118ed613463565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143fd9092919063ffffffff16565b61346b565b600190509392505050565b61194f613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006012905090565b6000611b1e611a82613463565b84611b198560016000611a93613463565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133db90919063ffffffff16565b61346b565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c20613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611dad613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611e99613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611fea613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82601481905550816015819055508060168190555060165460155460145401016013819055506014601354111561214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323025206f72206c65737300000081525060200191505060405180910390fd5b505050565b612158613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461221a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811115612291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f646f6e27742063617463682068756d616e73000000000000000000000000000081525060200191505060405180910390fd5b6001600d60026101000a81548160ff02191690831515021790555060011515601060019054906101000a900460ff16151514612335576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f646f6e650000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060016101000a81548160ff021916908315150217905550612359816144bd565b7fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c47601060019054906101000a900460ff1660405180821515815260200191505060405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124925780601f1061246757610100808354040283529160200191612492565b820191906000526020600020905b81548152906001019060200180831161247557829003601f168201915b5050505050905090565b6124a4613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180614bf66039913960400191505060405180910390fd5b61261782826144e9565b5050565b60165481565b601d5481565b601a5481565b60006126f061263a613463565b846126eb85604051806060016040528060258152602001614ddf6025913960016000612664613463565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143fd9092919063ffffffff16565b61346b565b6001905092915050565b600061270e612707613463565b8484613662565b6001905092915050565b612720613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6128aa613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b81518110156129f0576001600e600084848151811061298a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061296f565b5050565b602080528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b612a2e613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405180821515815260200191505060405180910390a25050565b612ba3613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b826018819055508160198190555080601a81905550601a54601954601854010160178190555060196017541115612d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d757374206b656570206665657320617420323525206f72206c65737300000081525060200191505060405180910390fd5b505050565b612d11613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a76400006103e86005612de9611412565b0281612df157fe5b0481612df957fe5b04811015612e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bd26024913960400191505060405180910390fd5b670de0b6b3a76400008102600c8190555050565b601060009054906101000a900460ff1681565b600a5481565b6000612e89613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b620186a06001612f59611412565b0281612f6157fe5b04821015612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614caf6035913960400191505060405180910390fd5b6103e86005612fc7611412565b0281612fcf57fe5b04821115613028576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614ce46034913960400191505060405180910390fd5b81600b8190555060019050919050565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006130d5613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60155481565b6131c7613463565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561330f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614b8a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600c5481565b600080828401905083811015613459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614dbb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613577576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614bb06022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d966025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561376e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b676023913960400191505060405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138125750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61381b57600080fd5b6000811415613835576138308383600061458a565b614144565b600d60009054906101000a900460ff1615613c88576138526123a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156138c057506138906123a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138f95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613933575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561394c5750600760149054906101000a900460ff16155b15613c8757600d60019054906101000a900460ff16613a7957601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a065750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f54726164696e67206973206e6f74206163746976652e0000000000000000000081525060200191505060405180910390fd5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b1c5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b8157600a54811115613b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180614d186035913960400191505060405180910390fd5b613c86565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c245750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c8557600a54811115613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180614c796036913960400191505060405180910390fd5b5b5b5b5b6000613c9330611bd0565b90506000600b548210159050808015613cb85750600d60029054906101000a900460ff165b8015613cd15750600760149054906101000a900460ff16155b8015613d275750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613d7d5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613dd35750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e17576001600760146101000a81548160ff021916908315150217905550613dfb61484b565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ecd5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ed757600090505b6000811561413457602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613f3a57506000601754115b1561403057613f676064613f596017548861498190919063ffffffff16565b614a0790919063ffffffff16565b9050601754601954820281613f7857fe5b04601c60008282540192505081905550601754601a54820281613f9757fe5b04601d60008282540192505081905550601754601854820281613fb657fe5b04601b6000828254019250508190555060006002600a5481613fd457fe5b061461402b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614c2f6024913960400191505060405180910390fd5b614119565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561408b57506000601354115b15614118576140b860646140aa6013548861498190919063ffffffff16565b614a0790919063ffffffff16565b90506013546015548202816140c957fe5b04601c600082825401925050819055506013546016548202816140e857fe5b04601d6000828254019250508190555060135460145482028161410757fe5b04601b600082825401925050819055505b5b600081111561412e5761412d87308361458a565b5b80850394505b61413f87878761458a565b505050505b505050565b6060600267ffffffffffffffff8111801561416357600080fd5b506040519080825280602002602001820160405280156141925781602001602082028036833780820191505090505b50905030816000815181106141a357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561424557600080fd5b505afa158015614259573d6000803e3d6000fd5b505050506040513d602081101561426f57600080fd5b81019080805190602001909291905050508160018151811061428d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142f430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461346b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156143b857808201518184015260208101905061439d565b505050509050019650505050505050600060405180830381600087803b1580156143e157600080fd5b505af11580156143f5573d6000803e3d6000fd5b505050505050565b60008383111582906144aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561446f578082015181840152602081019050614454565b50505050905090810190601f16801561449c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b43601181905550806012819055506001600d60016101000a81548160ff02191690831515021790555050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d966025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614696576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b676023913960400191505060405180910390fd5b6146a1838383614a51565b61470c81604051806060016040528060268152602001614c53602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143fd9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133db90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600061485630611bd0565b90506000601d54601b54601c54010190506000808314806148775750600082145b156148845750505061497f565b6014600b540283111561489a576014600b540292505b6000600283601c548602816148ab57fe5b04816148b357fe5b04905060006148cb8286614a5690919063ffffffff16565b90506148d681614149565b6000601c819055506000601b819055506000601d81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d806000811461496e576040519150601f19603f3d011682016040523d82523d6000602084013e614973565b606091505b50508093505050505050505b565b6000808314156149945760009050614a01565b60008284029050828482816149a557fe5b04146149fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d4d6021913960400191505060405180910390fd5b809150505b92915050565b6000614a4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614aa0565b905092915050565b505050565b6000614a9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506143fd565b905092915050565b60008083118290614b4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b11578082015181840152602081019050614af6565b50505050905090810190601f168015614b3e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b5857fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737343616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20302e352554686520706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657250616972734552524f523a204d757374206265206c657373207468616e206d61785478416d6f756e7445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636553656c6c207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e20302e3030312520746f74616c20737570706c792e5377617020616d6f756e742063616e6e6f7420626520686967686572207468616e20302e352520746f74616c20737570706c792e427579207472616e7366657220616d6f756e74206578636565647320746865206d61785472616e73616374696f6e416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74206c6f776572207468616e20302e3125a2646970667358221220231810eb3fda4dac0b2a784c945fc6c22d3705ecda57e5a8306edca68ddb7d6b64736f6c63430007050033

Deployed Bytecode Sourcemap

29470:14353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7632:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9799:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30943:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29550:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8752:108;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37771:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30722:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36686:409;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30682:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35083:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10450:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43200:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8594:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11214:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29598:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29887:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37942:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30533:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29967:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8923:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22097:148;;;;;;;;;;;;;:::i;:::-;;34294:121;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35573:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29694:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30422;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35729:369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43507:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21455:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29731:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30568:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7851:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37103:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30496:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30762:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30644:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11935:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9263:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37551:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43024:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31165:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29927:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36496:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36110:378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35346:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30234:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29768:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34690:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30388:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9501:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29810:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34480:135;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30459:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22400:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30606:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29850:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7632:100;7686:13;7719:5;7712:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7632:100;:::o;9799:169::-;9882:4;9899:39;9908:12;:10;:12::i;:::-;9922:7;9931:6;9899:8;:39::i;:::-;9956:4;9949:11;;9799:169;;;;:::o;30943:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29550:41::-;;;;;;;;;;;;;:::o;8752:108::-;8813:7;8840:12;;8833:19;;8752:108;:::o;37771:157::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37878:9:::1;;;;;;;;;;;37850:38;;37867:9;37850:38;;;;;;;;;;;;37911:9;37899;;:21;;;;;;;;;;;;;;;;;;37771:157:::0;:::o;30722:33::-;;;;:::o;36686:409::-;36760:15;;;;;;;;;;;36746:29;;:10;:29;;;36738:38;;;;;;36787:8;36798:24;36808:13;;;;;;;;;;;36798:9;:24::i;:::-;36787:35;;36843:1;36837:3;:7;36833:61;;;36846:48;36856:13;;;;;;;;;;;36879:4;36892:1;36886:3;:7;36846:9;:48::i;:::-;36833:61;36920:13;;;;;;;;;;;36905:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36952:43;36984:10;:8;:10::i;:::-;36978:16;;:2;:16;36969:6;:25;36952:16;:43::i;:::-;37007:12;37032:15;;;;;;;;;;;37024:29;;37061:21;37024:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37006:81;;;36686:409;;;:::o;30682:33::-;;;;:::o;35083:255::-;35169:15;;;;;;;;;;;35155:29;;:10;:29;;;35147:38;;;;;;35234:4;35218:13;:11;:13::i;:::-;:20;;;;;;35208:6;:30;;35200:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35324:6;35301:20;:29;;;;35083:255;:::o;10450:355::-;10590:4;10607:36;10617:6;10625:9;10636:6;10607:9;:36::i;:::-;10654:121;10663:6;10671:12;:10;:12::i;:::-;10685:89;10723:6;10685:89;;;;;;;;;;;;;;;;;:11;:19;10697:6;10685:19;;;;;;;;;;;;;;;:33;10705:12;:10;:12::i;:::-;10685:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10654:8;:121::i;:::-;10793:4;10786:11;;10450:355;;;;;:::o;43200:88::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43275:5:::1;43260:4;:12;43265:6;43260:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;43200:88:::0;:::o;8594:93::-;8652:5;8677:2;8670:9;;8594:93;:::o;11214:218::-;11302:4;11319:83;11328:12;:10;:12::i;:::-;11342:7;11351:50;11390:10;11351:11;:25;11363:12;:10;:12::i;:::-;11351:25;;;;;;;;;;;;;;;:34;11377:7;11351:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11319:8;:83::i;:::-;11420:4;11413:11;;11214:218;;;;:::o;29598:28::-;;;;;;;;;;;;;:::o;29887:33::-;;;;;;;;;;;;;:::o;37942:125::-;38007:4;38031:19;:28;38051:7;38031:28;;;;;;;;;;;;;;;;;;;;;;;;;38024:35;;37942:125;;;:::o;30533:28::-;;;;:::o;29967:31::-;;;;;;;;;;;;;:::o;8923:127::-;8997:7;9024:9;:18;9034:7;9024:18;;;;;;;;;;;;;;;;9017:25;;8923:127;;;:::o;22097:148::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22204:1:::1;22167:40;;22188:6;;;;;;;;;;;22167:40;;;;;;;;;;;;22235:1;22218:6;;:19;;;;;;;;;;;;;;;;;;22097:148::o:0;34294:121::-;34346:4;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34380:5:::1;34363:14;;:22;;;;;;;;;;;;;;;;;;34403:4;34396:11;;34294:121:::0;:::o;35573:144::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35705:4:::1;35663:31;:39;35695:6;35663:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35573:144:::0;;:::o;29694:30::-;;;;;;;;;;;;;:::o;30422:::-;;;;:::o;35729:369::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35863:13:::1;35845:15;:31;;;;35905:13;35887:15;:31;;;;35941:7;35929:9;:19;;;;36010:9;;35992:15;;35974;;:33;:45;35959:12;:60;;;;36054:2;36038:12;;:18;;36030:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35729:369:::0;;;:::o;43507:311::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43602:1:::1;43589:9;:14;;43581:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43651:4;43637:11;;:18;;;;;;;;;;;;;;;;;;43689:4;43674:19;;:11;;;;;;;;;;;:19;;;43666:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43727:5;43713:11;;:19;;;;;;;;;;;;;;;;;;43743:22;43755:9;43743:11;:22::i;:::-;43781:29;43798:11;;;;;;;;;;;43781:29;;;;;;;;;;;;;;;;;;;;43507:311:::0;:::o;21455:79::-;21493:7;21520:6;;;;;;;;;;;21513:13;;21455:79;:::o;29731:24::-;;;;;;;;;;;;;:::o;30568:31::-;;;;:::o;7851:104::-;7907:13;7940:7;7933:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7851:104;:::o;37103:244::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37210:13:::1;;;;;;;;;;;37202:21;;:4;:21;;;;37194:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37298:41;37327:4;37333:5;37298:28;:41::i;:::-;37103:244:::0;;:::o;30496:24::-;;;;:::o;30762:27::-;;;;:::o;30644:25::-;;;;:::o;11935:269::-;12028:4;12045:129;12054:12;:10;:12::i;:::-;12068:7;12077:96;12116:15;12077:96;;;;;;;;;;;;;;;;;:11;:25;12089:12;:10;:12::i;:::-;12077:25;;;;;;;;;;;;;;;:34;12103:7;12077:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12045:8;:129::i;:::-;12192:4;12185:11;;11935:269;;;;:::o;9263:175::-;9349:4;9366:42;9376:12;:10;:12::i;:::-;9390:9;9401:6;9366:9;:42::i;:::-;9426:4;9419:11;;9263:175;;;;:::o;37551:208::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37688:15:::1;;;;;;;;;;;37645:59;;37668:18;37645:59;;;;;;;;;;;;37733:18;37715:15;;:36;;;;;;;;;;;;;;;;;;37551:208:::0;:::o;43024:164::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43098:6:::1;43093:88;43114:5;:12;43110:1;:16;43093:88;;;43165:4;43148;:14;43153:5;43159:1;43153:8;;;;;;;;;;;;;;43148:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43128:3;;;;;;;43093:88;;;;43024:164:::0;:::o;31165:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29927:33::-;;;;;;;;;;;;;:::o;36496:182::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36612:8:::1;36581:19;:28;36601:7;36581:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36652:7;36636:34;;;36661:8;36636:34;;;;;;;;;;;;;;;;;;;;36496:182:::0;;:::o;36110:378::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36246:13:::1;36227:16;:32;;;;36289:13;36270:16;:32;;;;36326:7;36313:10;:20;;;;36398:10;;36379:16;;36360;;:35;:48;36344:13;:64;;;;36444:2;36427:13;;:19;;36419:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36110:378:::0;;;:::o;35346:215::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35468:4:::1;35462;35458:1;35442:13;:11;:13::i;:::-;:17;:24;;;;;;35441:31;;;;;;35431:6;:41;;35423:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35546:6;35536;:17;35524:9;:29;;;;35346:215:::0;:::o;30234:40::-;;;;;;;;;;;;;:::o;29768:35::-;;;;:::o;34690:381::-;34771:4;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34827:6:::1;34823:1;34807:13;:11;:13::i;:::-;:17;:26;;;;;;34794:9;:39;;34786:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34942:4;34938:1;34922:13;:11;:13::i;:::-;:17;:24;;;;;;34909:9;:37;;34901:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35034:9;35013:18;:30;;;;35060:4;35053:11;;34690:381:::0;;;:::o;30388:27::-;;;;:::o;9501:151::-;9590:7;9617:11;:18;9629:5;9617:18;;;;;;;;;;;;;;;:27;9636:7;9617:27;;;;;;;;;;;;;;;;9610:34;;9501:151;;;;:::o;29810:33::-;;;;:::o;34480:135::-;34540:4;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34580:5:::1;34557:20;;:28;;;;;;;;;;;;;;;;;;34603:4;34596:11;;34480:135:::0;:::o;30459:30::-;;;;:::o;22400:244::-;21677:12;:10;:12::i;:::-;21667:22;;:6;;;;;;;;;;;:22;;;21659:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22509:1:::1;22489:22;;:8;:22;;;;22481:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22599:8;22570:38;;22591:6;;;;;;;;;;;22570:38;;;;;;;;;;;;22628:8;22619:6;;:17;;;;;;;;;;;;;;;;;;22400:244:::0;:::o;30606:31::-;;;;:::o;29850:24::-;;;;:::o;16499:181::-;16557:7;16577:9;16593:1;16589;:5;16577:17;;16618:1;16613;:6;;16605:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16671:1;16664:8;;;16499:181;;;;:::o;270:98::-;323:7;350:10;343:17;;270:98;:::o;15121:380::-;15274:1;15257:19;;:5;:19;;;;15249:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15355:1;15336:21;;:7;:21;;;;15328:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:6;15409:11;:18;15421:5;15409:18;;;;;;;;;;;;;;;:27;15428:7;15409:27;;;;;;;;;;;;;;;:36;;;;15477:7;15461:32;;15470:5;15461:32;;;15486:6;15461:32;;;;;;;;;;;;;;;;;;15121:380;;;:::o;38079:3406::-;38227:1;38211:18;;:4;:18;;;;38203:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38304:1;38290:16;;:2;:16;;;;38282:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38366:4;:10;38371:4;38366:10;;;;;;;;;;;;;;;;;;;;;;;;;38365:11;:24;;;;;38381:4;:8;38386:2;38381:8;;;;;;;;;;;;;;;;;;;;;;;;;38380:9;38365:24;38357:33;;;;;;38417:1;38407:6;:11;38404:92;;;38435:28;38451:4;38457:2;38461:1;38435:15;:28::i;:::-;38478:7;;38404:92;38519:14;;;;;;;;;;;38516:997;;;38579:7;:5;:7::i;:::-;38571:15;;:4;:15;;;;:49;;;;;38613:7;:5;:7::i;:::-;38607:13;;:2;:13;;;;38571:49;:86;;;;;38655:1;38641:16;;:2;:16;;;;38571:86;:128;;;;;38692:6;38678:21;;:2;:21;;;;38571:128;:158;;;;;38721:8;;;;;;;;;;;38720:9;38571:158;38549:953;;;38767:13;;;;;;;;;;;38763:148;;38812:19;:25;38832:4;38812:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38841:19;:23;38861:2;38841:23;;;;;;;;;;;;;;;;;;;;;;;;;38812:52;38804:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38763:148;38980:25;:31;39006:4;38980:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39016:31;:35;39048:2;39016:35;;;;;;;;;;;;;;;;;;;;;;;;;39015:36;38980:71;38976:511;;;39098:20;;39088:6;:30;;39080:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38976:511;;;39270:25;:29;39296:2;39270:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39304:31;:37;39336:4;39304:37;;;;;;;;;;;;;;;;;;;;;;;;;39303:38;39270:71;39266:221;;;39388:20;;39378:6;:30;;39370:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39266:221;38976:511;38549:953;38516:997;39527:28;39558:24;39576:4;39558:9;:24::i;:::-;39527:55;;39603:12;39642:18;;39618:20;:42;;39603:57;;39691:7;:35;;;;;39715:11;;;;;;;;;;;39691:35;:61;;;;;39744:8;;;;;;;;;;;39743:9;39691:61;:110;;;;;39770:25;:31;39796:4;39770:31;;;;;;;;;;;;;;;;;;;;;;;;;39769:32;39691:110;:153;;;;;39819:19;:25;39839:4;39819:25;;;;;;;;;;;;;;;;;;;;;;;;;39818:26;39691:153;:194;;;;;39862:19;:23;39882:2;39862:23;;;;;;;;;;;;;;;;;;;;;;;;;39861:24;39691:194;39673:338;;;39923:4;39912:8;;:15;;;;;;;;;;;;;;;;;;39956:10;:8;:10::i;:::-;39994:5;39983:8;;:16;;;;;;;;;;;;;;;;;;39673:338;40023:12;40039:8;;;;;;;;;;;40038:9;40023:24;;40148:19;:25;40168:4;40148:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40177:19;:23;40197:2;40177:23;;;;;;;;;;;;;;;;;;;;;;;;;40148:52;40145:99;;;40227:5;40217:15;;40145:99;40264:12;40368:7;40365:1067;;;40419:25;:29;40445:2;40419:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40468:1;40452:13;;:17;40419:50;40415:848;;;40496:34;40526:3;40496:25;40507:13;;40496:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40489:41;;40597:13;;40578:16;;40571:4;:23;:39;;;;;;40549:18;;:61;;;;;;;;;;;40665:13;;40652:10;;40645:4;:17;:33;;;;;;40629:12;;:49;;;;;;;;;;;40745:13;;40726:16;;40719:4;:23;:39;;;;;;40697:18;;:61;;;;;;;;;;;40809:1;40804;40781:20;;:24;;;;;;:29;40777:81;;40812:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40777:81;40415:848;;;40919:25;:31;40945:4;40919:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40969:1;40954:12;;:16;40919:51;40916:347;;;40995:33;41024:3;40995:24;41006:12;;40995:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40988:40;;41091:12;;41073:15;;41066:4;:22;:37;;;;;;41044:18;;:59;;;;;;;;;;;41157:12;;41145:9;;41138:4;:16;:31;;;;;;41122:12;;:47;;;;;;;;;;;41235:12;;41217:15;;41210:4;:22;:37;;;;;;41188:18;;:59;;;;;;;;;;;40916:347;40415:848;41301:1;41294:4;:8;41291:93;;;41326:42;41342:4;41356;41363;41326:15;:42::i;:::-;41291:93;41416:4;41406:14;;;;40365:1067;41444:33;41460:4;41466:2;41470:6;41444:15;:33::i;:::-;38079:3406;;;;;;;;:::o;41493:601::-;41621:21;41659:1;41645:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41621:40;;41690:4;41672;41677:1;41672:7;;;;;;;;;;;;;:23;;;;;;;;;;;41716:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41706:4;41711:1;41706:7;;;;;;;;;;;;;:32;;;;;;;;;;;41751:62;41768:4;41783:15;;;;;;;;;;;41801:11;41751:8;:62::i;:::-;41852:15;;;;;;;;;;;:66;;;41933:11;41959:1;42003:4;42030;42050:15;41852:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41493:601;;:::o;17402:192::-;17488:7;17521:1;17516;:6;;17524:12;17508:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17548:9;17564:1;17560;:5;17548:17;;17585:1;17578:8;;;17402:192;;;;;:::o;43296:157::-;43369:12;43355:11;:26;;;;43405:9;43392:10;:22;;;;43441:4;43425:13;;:20;;;;;;;;;;;;;;;;;;43296:157;:::o;37355:188::-;37472:5;37438:25;:31;37464:4;37438:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37529:5;37495:40;;37523:4;37495:40;;;;;;;;;;;;37355:188;;:::o;12694:573::-;12852:1;12834:20;;:6;:20;;;;12826:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12936:1;12915:23;;:9;:23;;;;12907:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12991:47;13012:6;13020:9;13031:6;12991:20;:47::i;:::-;13071:71;13093:6;13071:71;;;;;;;;;;;;;;;;;:9;:17;13081:6;13071:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13051:9;:17;13061:6;13051:17;;;;;;;;;;;;;;;:91;;;;13176:32;13201:6;13176:9;:20;13186:9;13176:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13153:9;:20;13163:9;13153:20;;;;;;;;;;;;;;;:55;;;;13241:9;13224:35;;13233:6;13224:35;;;13252:6;13224:35;;;;;;;;;;;;;;;;;;12694:573;;;:::o;42102:914::-;42141:23;42167:24;42185:4;42167:9;:24::i;:::-;42141:50;;42202:25;42272:12;;42251:18;;42230;;:39;:54;42202:82;;42295:12;42350:1;42331:15;:20;:46;;;;42376:1;42355:17;:22;42331:46;42328:60;;;42380:7;;;;;42328:60;42442:2;42421:18;;:23;42403:15;:41;42400:111;;;42497:2;42476:18;;:23;42458:41;;42400:111;42580:23;42665:1;42645:17;42624:18;;42606:15;:36;:56;;;;;;:60;;;;;;42580:86;;42677:26;42706:36;42726:15;42706;:19;;:36;;;;:::i;:::-;42677:65;;42763:36;42780:18;42763:16;:36::i;:::-;42850:1;42829:18;:22;;;;42883:1;42862:18;:22;;;;42910:1;42895:12;:16;;;;42953:15;;;;;;;;;;;42945:29;;42982:21;42945:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42932:76;;;;;42102:914;;;;;;:::o;17853:471::-;17911:7;18161:1;18156;:6;18152:47;;;18186:1;18179:8;;;;18152:47;18211:9;18227:1;18223;:5;18211:17;;18256:1;18251;18247;:5;;;;;;:10;18239:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18315:1;18308:8;;;17853:471;;;;;:::o;18800:132::-;18858:7;18885:39;18889:1;18892;18885:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18878:46;;18800:132;;;;:::o;16104:125::-;;;;:::o;16963:136::-;17021:7;17048:43;17052:1;17055;17048:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17041:50;;16963:136;;;;:::o;19428:278::-;19514:7;19546:1;19542;:5;19549:12;19534:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19573:9;19589:1;19585;:5;;;;;;19573:17;;19697:1;19690:8;;;19428:278;;;;;:::o

Swarm Source

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