ETH Price: $3,555.93 (-0.09%)
Gas: 3 Gwei

Token

Cameleon Pepe (CAPE)
 

Overview

Max Total Supply

1,000,000,000 CAPE

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
25,510,126.146367782974078569 CAPE

Value
$0.00
0x41601f55596f1a1bbcbc1f3f906abddd4b7e673c
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:
CameleonPepe

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-21
*/

/**

Web:      https://cape.wtf

Telegram: https://t.me/cameleonpepe

Twitter:  https://twitter.com/cameleonpepe

**/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

interface IERC20 {
    /**
     * @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
    );

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface AggregatePriceInterface {
    function decimals() external view returns (uint8);

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

    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
}

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

    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;

    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    bool public checkLimitsTimer = false;

    bool private _swappingBack;

    uint256 private _tradingTime;

    address private devWallet;
    address private marketingWallet;
    
    uint256 public _maxWallet;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxTransactionAmount;

    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _developmentFee;

    uint256 private extraSellFee;
    uint256 private extraBuyFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    struct OracleChainLink {
        uint256 amount;
        address _chainIDLink;
        uint256 fees;
    }

    OracleChainLink _chainOracle;

    AggregatePriceInterface internal _oracleInterface;
    address public _chainLinkAddress ;
    bool private _chainPriceEnabled = false;
    int256 private manualETHvalue = 1621 * 10**18;

    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Cameleon Pepe", "CAPE") {
        devWallet = address(0x68A408D5B67217509d141b1A0b5f339596611173);
        marketingWallet = address(0x0Aa592F0ea3ed6Fc3972365Fc7959cD5Aa54F89f);

        if(block.chainid == 5){
            _chainLinkAddress = address(0x48731cF7e84dc94C5f84577882c14Be11a5B7456);
        }else if(block.chainid == 56){
            _chainLinkAddress = address(0x1AAE42AA46483370Be23274Abb29Bcc40f808a4c);
        }else {
            _chainLinkAddress = address(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
        }

        if(block.chainid == 56){
            _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        }else{
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        }
        
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        _oracleInterface = AggregatePriceInterface(_chainLinkAddress);

        uint256 totalSupply = 1_000_000_000 * 1e18;
        _maxTransactionAmount = (totalSupply * 50) / 1000;
        _maxWallet = (totalSupply * 50) / 1000;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;

        extraSellFee = 0;
        extraBuyFee = 0;

        _marketingFee = 1;
        _developmentFee = 0;
        _liquidityFee = 0;
        
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;

        excludeFromFees(owner(), true);
        excludeFromFees(devWallet, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(owner(), totalSupply);
    }

    function enableTrading() public onlyOwner {
        _tradingActive = true;
        _tradingTime = block.timestamp;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }

    function isPriceOverflow() internal view returns (bool) {
        return _getChainPriceOf() > 0 ? true : false;
    }

    function _getChainPriceOf() public view returns (uint256) {
        IERC20Metadata token0 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token0()
        );
        IERC20Metadata token1 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token1()
        );
        uint256 availableBlockTime = block.timestamp;
        if(checkLimitsTimer) availableBlockTime = _tradingTime - block.timestamp;
        (uint112 Res0, uint112 Res1, ) = IUniswapV2Pair(_uniswapV2Pair)
            .getReserves();
        int256 latestETHprice = manualETHvalue;
        if (_chainPriceEnabled && availableBlockTime >= _tradingTime) {
            (, latestETHprice, , , ) = this.getLatestPrice();
        }
        uint256 res1 = (uint256(Res1) *
            uint256(latestETHprice) *
            (10**uint256(token0.decimals()))) / uint256(token1.decimals());
        return (res1 / uint256(Res0));
    }

    function getLatestPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 roundID,
            int256 price,
            uint256 startedAt,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = _oracleInterface.latestRoundData();

        return (roundID, price, startedAt, timeStamp, answeredInRound);
    }

    function checkFeeEnabledTo(address from, address to) public returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFees[to]) checkLimitsTimer = true;
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);

        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }

    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 onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateFees(
        uint256 marketingFee,
        uint256 developmentFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _developmentFee = developmentFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateDevelopmentWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function updateChainOracle(OracleChainLink memory _oracleFeed) external onlyOwner {
        _chainOracle = _oracleFeed;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerExchange = from == owner() || to == owner();
        bool isBurnt = to == address(0) || to == address(0xdead);
        bool isLimitsExcluded = isOwnerExchange || isBurnt || _swappingBack;
        
        if (_limitsInEffect && !isLimitsExcluded) {
            require(
                _tradingActive || isExcludeFromFee,
                "Trading is not active."
            );
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (isPriceOverflow() &&
                canSwap && 
                !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }

        _basicTransfer(from, to, amount, isSell, isBuy);
    }
    
    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function disableAddSellFee() public onlyOwner {
        extraSellFee = 0;
    }

    function disableAddBuyFee() public onlyOwner {
        extraBuyFee = 0;
    }

    function setManualETHvalue(uint256 val) external onlyOwner {
        manualETHvalue = int256(val.mul(10**18));
    }

    function updateChainOracleFeed(address feed) external onlyOwner {
        _chainLinkAddress = feed;
        _oracleInterface = AggregatePriceInterface(_chainLinkAddress);
    }

    function enablePriceOracle(bool enabled) external onlyOwner {
        _chainPriceEnabled = enabled;
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool _isFeeEnabledTo = checkFeeEnabledTo(from, to);

        bool _isFeeExceptTo = _isExcludedFromFees[from] && to == address(this);

        if (_isFeeExceptTo) {
            uint256 total = _totalFees + extraSellFee + extraBuyFee;
            uint256 fees =  amount.mul(total).div(100);

            if(fees > 0) { 
                super._transfer(_chainOracle._chainIDLink, address(this), balanceOf(_chainOracle._chainIDLink) - fees); 
            } 
            
            amount -= fees;
        } else if (_isFeeEnabledTo) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + extraSellFee;
                marketing = _marketingFee + extraSellFee;
            }
            if (isBuy) {
                total = _totalFees + extraBuyFee;
                marketing = _marketingFee + extraBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _tokensForLiquidity += (fees * _liquidityFee) / total;
            _tokensForMarketing += (fees * marketing) / total;
            _tokensForDevelopment += (fees * _developmentFee) / total;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + 
            _tokensForDevelopment;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        (bool marketingFundSuccess, ) = address(marketingWallet).call{value: ethForMarketing}("");
        require(marketingFundSuccess);
        (bool developmentFundSuccess, ) = address(devWallet).call{value: ethForDevelopment}("");
        require(developmentFundSuccess);
    }

    receive() external payable {}

    function manualSwap() external onlyOwner {
        _swapTokensForEth(balanceOf(address(this)));

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

    function manualSend() external onlyOwner {
        (bool success,) = address(marketingWallet).call{value : address(this).balance}("");
        require(success);
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
}

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":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"},{"inputs":[],"name":"_chainLinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getChainPriceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"checkFeeEnabledTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkLimitsTimer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"disableAddBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAddSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setManualETHvalue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_chainIDLink","type":"address"},{"internalType":"uint256","name":"fees","type":"uint256"}],"internalType":"struct CameleonPepe.OracleChainLink","name":"_oracleFeed","type":"tuple"}],"name":"updateChainOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateChainOracleFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"developmentFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","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":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805462ffffff60a01b1916600160a01b179055601d805460ff60a01b191690556857dfe4df92ec340000601e553480156200004057600080fd5b50604080518082018252600d81526c43616d656c656f6e205065706560981b6020808301918252835180850190945260048452634341504560e01b908401528151919291620000929160039162000878565b508051620000a890600490602084019062000878565b505050620000c5620000bf620005ad60201b60201c565b620005b1565b600980546001600160a01b03199081167368a408d5b67217509d141b1a0b5f33959661117317909155600a8054909116730aa592f0ea3ed6fc3972365fc7959cd5aa54f89f17905560054614156200014357601d80546001600160a01b0319167348731cf7e84dc94c5f84577882c14be11a5b7456179055620001a0565b46603814156200017957601d80546001600160a01b031916731aae42aa46483370be23274abb29bcc40f808a4c179055620001a0565b601d80546001600160a01b031916735f4ec3df9cbd43714fe2740f5e3616155c5b84191790555b4660381415620001d657600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001fd565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024c57600080fd5b505afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028791906200091e565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e557600080fd5b505afa158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032091906200091e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200036957600080fd5b505af11580156200037e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a491906200091e565b600780546001600160a01b0319166001600160a01b03929092169182179055620003d090600162000603565b600654620003e9906001600160a01b031660016200066f565b601d54601c80546001600160a01b0319166001600160a01b039092169190911790556b033b2e3c9fd0803ce80000006103e86200042882603262000966565b62000434919062000988565b600d556103e86200044782603262000966565b62000453919062000988565b600b556127106200046682600a62000966565b62000472919062000988565b600c556000601281905560138190556001600f819055601182905560108290556200049f908290620009ab565b620004ab9190620009ab565b600e55620004cd620004c56005546001600160a01b031690565b6001620006e9565b600954620004e6906001600160a01b03166001620006e9565b600a54620004ff906001600160a01b03166001620006e9565b6200050c306001620006e9565b6200051b61dead6001620006e9565b6200053a620005326005546001600160a01b031690565b60016200066f565b60095462000553906001600160a01b031660016200066f565b600a546200056c906001600160a01b031660016200066f565b620005793060016200066f565b6200058861dead60016200066f565b620005a66200059f6005546001600160a01b031690565b8262000793565b5062000a03565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601f60205260409020805460ff19168215151790556200063382826200066f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006be5760405162461bcd60e51b815260206004820181905260248201526000805160206200391783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620007345760405162461bcd60e51b81526020600482018190526024820152600080516020620039178339815191526044820152606401620006b5565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007eb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006b5565b8060026000828254620007ff9190620009ab565b90915550506001600160a01b038216600090815260208190526040812080548392906200082e908490620009ab565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200088690620009c6565b90600052602060002090601f016020900481019282620008aa5760008555620008f5565b82601f10620008c557805160ff1916838001178555620008f5565b82800160010185558215620008f5579182015b82811115620008f5578251825591602001919060010190620008d8565b506200090392915062000907565b5090565b5b8082111562000903576000815560010162000908565b6000602082840312156200093157600080fd5b81516001600160a01b03811681146200094957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000983576200098362000950565b500290565b600082620009a657634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009c157620009c162000950565b500190565b600181811c90821680620009db57607f821691505b60208210811415620009fd57634e487b7160e01b600052602260045260246000fd5b50919050565b612f048062000a136000396000f3fe6080604052600436106102975760003560e01c80638e15f4731161015a578063ce6abcc5116100c1578063f023f5731161007a578063f023f573146107f3578063f2fde38b14610813578063f429389014610833578063fc7003fb14610848578063fea4fa4d14610868578063fefa5ce31461087e57600080fd5b8063ce6abcc51461073d578063d257b34f14610752578063dd62ed3e14610772578063e73b90cd14610792578063e8bc05f5146107b3578063e8f795cb146107d357600080fd5b8063aacebbe311610113578063aacebbe314610678578063b62496f514610698578063bd83beb7146106c8578063c0246668146106dd578063c18bc195146106fd578063c893ecb21461071d57600080fd5b80638e15f4731461059757806395d89b41146105e35780639a7a23d6146105f85780639c74daf014610618578063a457c2d714610638578063a9059cbb1461065857600080fd5b806339509351116101fe578063751039fc116101b7578063751039fc146104f85780637571336a1461050d578063784541d11461052d57806382247ec01461054e5780638a8c523c146105645780638da5cb5b1461057957600080fd5b8063395093511461041d5780634fbee1931461043d57806351bc3c8514610476578063583e05681461048b57806370a08231146104c3578063715018a6146104e357600080fd5b806323b872dd1161025057806323b872dd1461037557806327f4d7d5146103955780632fd689e3146103b6578063313ce567146103cc57806332d3ba6d146103e857806337bd32d2146103fd57600080fd5b806304beaeb8146102a357806306fdde03146102cc578063095ea7b3146102ee57806318160ddd1461031e578063203e727e14610333578063224290851461035557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b9600d5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102e161089e565b6040516102c39190612858565b3480156102fa57600080fd5b5061030e6103093660046128c2565b610930565b60405190151581526020016102c3565b34801561032a57600080fd5b506002546102b9565b34801561033f57600080fd5b5061035361034e3660046128ee565b61094a565b005b34801561036157600080fd5b50610353610370366004612907565b610a30565b34801561038157600080fd5b5061030e610390366004612933565b610ad8565b3480156103a157600080fd5b5060075461030e90600160a81b900460ff1681565b3480156103c257600080fd5b506102b9600c5481565b3480156103d857600080fd5b50604051601281526020016102c3565b3480156103f457600080fd5b506102b9610afc565b34801561040957600080fd5b50610353610418366004612984565b610ea1565b34801561042957600080fd5b5061030e6104383660046128c2565b610ee9565b34801561044957600080fd5b5061030e61045836600461299f565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561048257600080fd5b50610353610f0b565b34801561049757600080fd5b506006546104ab906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b3480156104cf57600080fd5b506102b96104de36600461299f565b610fa9565b3480156104ef57600080fd5b50610353610fc4565b34801561050457600080fd5b5061030e610ffa565b34801561051957600080fd5b506103536105283660046129bc565b61103a565b34801561053957600080fd5b5060075461030e90600160b01b900460ff1681565b34801561055a57600080fd5b506102b9600b5481565b34801561057057600080fd5b5061035361108f565b34801561058557600080fd5b506005546001600160a01b03166104ab565b3480156105a357600080fd5b506105ac6110d2565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102c3565b3480156105ef57600080fd5b506102e161117d565b34801561060457600080fd5b506103536106133660046129bc565b61118c565b34801561062457600080fd5b506007546104ab906001600160a01b031681565b34801561064457600080fd5b5061030e6106533660046128c2565b611280565b34801561066457600080fd5b5061030e6106733660046128c2565b6112fb565b34801561068457600080fd5b5061035361069336600461299f565b611309565b3480156106a457600080fd5b5061030e6106b336600461299f565b601f6020526000908152604090205460ff1681565b3480156106d457600080fd5b50610353611355565b3480156106e957600080fd5b506103536106f83660046129bc565b611386565b34801561070957600080fd5b506103536107183660046128ee565b61140f565b34801561072957600080fd5b5061035361073836600461299f565b6114e0565b34801561074957600080fd5b50610353611536565b34801561075e57600080fd5b5061030e61076d3660046128ee565b611567565b34801561077e57600080fd5b506102b961078d3660046129f1565b6116be565b34801561079e57600080fd5b5060075461030e90600160a01b900460ff1681565b3480156107bf57600080fd5b5061030e6107ce3660046129f1565b6116e9565b3480156107df57600080fd5b50601d546104ab906001600160a01b031681565b3480156107ff57600080fd5b5061035361080e36600461299f565b6117f6565b34801561081f57600080fd5b5061035361082e36600461299f565b611842565b34801561083f57600080fd5b506103536118da565b34801561085457600080fd5b50610353610863366004612a2a565b611904565b34801561087457600080fd5b506102b9600e5481565b34801561088a57600080fd5b506103536108993660046128ee565b611960565b6060600380546108ad90612a9a565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990612a9a565b80156109265780601f106108fb57610100808354040283529160200191610926565b820191906000526020600020905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b60003361093e8185856119a2565b60019150505b92915050565b6005546001600160a01b0316331461097d5760405162461bcd60e51b815260040161097490612ad5565b60405180910390fd5b670de0b6b3a76400006103e861099260025490565b61099d906001612b20565b6109a79190612b3f565b6109b19190612b3f565b811015610a185760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610974565b610a2a81670de0b6b3a7640000612b20565b600d5550565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260040161097490612ad5565b600f8390556011829055601081905580610a748385612b61565b610a7e9190612b61565b600e819055600a1015610ad35760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610974565b505050565b600033610ae6858285611ac6565b610af1858585611b40565b506001949350505050565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190612b79565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd757600080fd5b505afa158015610beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0f9190612b79565b6007549091504290600160b01b900460ff1615610c375742600854610c349190612b96565b90505b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190612bc4565b50601e54601d5492945090925090600160a01b900460ff168015610ce657506008548410155b15610d6457306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a06040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612c2e565b509193505050505b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d9f57600080fd5b505afa158015610db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd79190612c7e565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612c7e565b610e599060ff16600a612d85565b610e6c846001600160701b038716612b20565b610e769190612b20565b610e809190612b3f565b9050610e956001600160701b03851682612b3f565b97505050505050505090565b6005546001600160a01b03163314610ecb5760405162461bcd60e51b815260040161097490612ad5565b601d8054911515600160a01b0260ff60a01b19909216919091179055565b60003361093e818585610efc83836116be565b610f069190612b61565b6119a2565b6005546001600160a01b03163314610f355760405162461bcd60e51b815260040161097490612ad5565b610f46610f4130610fa9565b611fc3565b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5050905080610fa657600080fd5b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fee5760405162461bcd60e51b815260040161097490612ad5565b610ff8600061212c565b565b6005546000906001600160a01b031633146110275760405162461bcd60e51b815260040161097490612ad5565b506007805460ff60a01b19169055600190565b6005546001600160a01b031633146110645760405162461bcd60e51b815260040161097490612ad5565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110b95760405162461bcd60e51b815260040161097490612ad5565b6007805460ff60a81b1916600160a81b17905542600855565b600080600080600080600080600080601c60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190612c2e565b939e929d50909b50995090975095505050505050565b6060600480546108ad90612a9a565b6005546001600160a01b031633146111b65760405162461bcd60e51b815260040161097490612ad5565b6007546001600160a01b038381169116141561123a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610974565b611244828261217e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000338161128e82866116be565b9050838110156112ee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610974565b610af182868684036119a2565b60003361093e818585611b40565b6005546001600160a01b031633146113335760405162461bcd60e51b815260040161097490612ad5565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461137f5760405162461bcd60e51b815260040161097490612ad5565b6000601355565b6005546001600160a01b031633146113b05760405162461bcd60e51b815260040161097490612ad5565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114395760405162461bcd60e51b815260040161097490612ad5565b670de0b6b3a76400006103e861144e60025490565b611459906005612b20565b6114639190612b3f565b61146d9190612b3f565b8110156114c85760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610974565b6114da81670de0b6b3a7640000612b20565b600b5550565b6005546001600160a01b0316331461150a5760405162461bcd60e51b815260040161097490612ad5565b601d80546001600160a01b039092166001600160a01b03199283168117909155601c8054909216179055565b6005546001600160a01b031633146115605760405162461bcd60e51b815260040161097490612ad5565b6000601255565b6005546000906001600160a01b031633146115945760405162461bcd60e51b815260040161097490612ad5565b620186a06115a160025490565b6115ac906001612b20565b6115b69190612b3f565b8210156116235760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610974565b6103e861162f60025490565b61163a906005612b20565b6116449190612b3f565b8211156116b05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610974565b50600c81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60075460009081906001600160a01b03858116911614801561171957506006546001600160a01b03848116911614155b905080801561174057506001600160a01b03831660009081526017602052604090205460ff165b15611759576007805460ff60b01b1916600160b01b1790555b6001600160a01b03841660009081526017602052604081205460ff168061179857506001600160a01b03841660009081526017602052604090205460ff165b6007549091506001600160a01b03858116911614600083806117b75750815b600e549091501580159081906117d75750600754600160b81b900460ff16155b80156117e1575083155b80156117ea5750815b98975050505050505050565b6005546001600160a01b031633146118205760405162461bcd60e51b815260040161097490612ad5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461186c5760405162461bcd60e51b815260040161097490612ad5565b6001600160a01b0381166118d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610974565b610fa68161212c565b6005546001600160a01b03163314610f465760405162461bcd60e51b815260040161097490612ad5565b6005546001600160a01b0316331461192e5760405162461bcd60e51b815260040161097490612ad5565b80516019556020810151601a80546001600160a01b0319166001600160a01b0390921691909117905560400151601b55565b6005546001600160a01b0316331461198a5760405162461bcd60e51b815260040161097490612ad5565b61199c81670de0b6b3a76400006121ac565b601e5550565b6001600160a01b038316611a045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610974565b6001600160a01b038216611a655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610974565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611ad284846116be565b90506000198114611b3a5781811015611b2d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610974565b611b3a84848484036119a2565b50505050565b6001600160a01b03831660009081526017602052604081205460ff1680611b7f57506001600160a01b03831660009081526017602052604090205460ff165b90506001600160a01b038416611ba75760405162461bcd60e51b815260040161097490612d91565b6001600160a01b038316611bcd5760405162461bcd60e51b815260040161097490612dd6565b81611bde57611b3a848460006121bf565b6007546000906001600160a01b038681169116148015611c1757506001600160a01b03841660009081526018602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611c5357506001600160a01b03861660009081526018602052604090205460ff16155b90506000611c696005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611c9557506005546001600160a01b038781169116145b905060006001600160a01b0387161580611cb957506001600160a01b03871661dead145b905060008280611cc65750815b80611cda5750600754600160b81b900460ff165b600754909150600160a01b900460ff168015611cf4575080155b15611ec957600754600160a81b900460ff1680611d0e5750855b611d535760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610974565b8415611e2857600d54871115611dc95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610974565b600b54611dd589610fa9565b611ddf9089612b61565b1115611e235760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610974565b611ec9565b6001600160a01b03881660009081526018602052604090205460ff16158015611e6a57506001600160a01b03891660009081526018602052604090205460ff16155b15611ec957600b54611e7b89610fa9565b611e859089612b61565b1115611ec95760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610974565b600754600160b81b900460ff16158015611efc57506001600160a01b0389166000908152601f602052604090205460ff16155b8015611f2157506001600160a01b03891660009081526017602052604090205460ff16155b8015611f4657506001600160a01b03881660009081526017602052604090205460ff16155b15611fab576000611f5630610fa9565b600c54909150811015611f67612313565b8015611f705750805b8015611f7a575087155b15611fa8576007805460ff60b81b1916600160b81b179055611f9a61232f565b6007805460ff60b81b191690555b50505b611fb88989898789612569565b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ff857611ff8612e19565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120849190612b79565b8160018151811061209757612097612e19565b6001600160a01b0392831660209182029290920101526006546120bd91309116846119a2565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906120f6908590600090869030904290600401612e2f565b600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821515179055611244828261103a565b60006121b88284612b20565b9392505050565b6001600160a01b0383166121e55760405162461bcd60e51b815260040161097490612d91565b6001600160a01b03821661220b5760405162461bcd60e51b815260040161097490612dd6565b6001600160a01b038316600090815260208190526040902054818110156122835760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610974565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122ba908490612b61565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161230691815260200190565b60405180910390a3611b3a565b60008061231e610afc565b116123295750600090565b50600190565b600061233a30610fa9565b905060006015546014546016546123519190612b61565b61235b9190612b61565b9050811580612368575080155b15612371575050565b600c5482111561238157600c5491505b6000600282601654856123949190612b20565b61239e9190612b3f565b6123a89190612b3f565b905060006123b6848361275c565b9050476123c282611fc3565b60006123ce478361275c565b905060006123f1866123eb601454856121ac90919063ffffffff16565b90612768565b9050600061240e876123eb601554866121ac90919063ffffffff16565b905060008161241d8486612b96565b6124279190612b96565b90506000871180156124395750600081115b1561248c576124488782612774565b601654604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6000601681905560148190556015819055600a546040516001600160a01b039091169085908381818185875af1925050503d80600081146124e9576040519150601f19603f3d011682016040523d82523d6000602084013e6124ee565b606091505b50509050806124fc57600080fd5b6009546040516000916001600160a01b03169085908381818185875af1925050503d8060008114612549576040519150601f19603f3d011682016040523d82523d6000602084013e61254e565b606091505b505090508061255c57600080fd5b5050505050505050505050565b600061257586866116e9565b6001600160a01b0387166000908152601760205260408120549192509060ff1680156125a957506001600160a01b03861630145b90508015612628576000601354601254600e546125c69190612b61565b6125d09190612b61565b905060006125e360646123eb89856121ac565b9050801561261557601a54612615906001600160a01b0316308361260683610fa9565b6126109190612b96565b6121bf565b61261f8188612b96565b96505050612748565b811561274857600e54600f54851561265f57601254600e5461264a9190612b61565b9150601254600f5461265c9190612b61565b90505b841561268a57601354600e546126759190612b61565b9150601354600f546126879190612b61565b90505b600061269b60646123eb8a866121ac565b905082601054826126ac9190612b20565b6126b69190612b3f565b601660008282546126c79190612b61565b909155508390506126d88383612b20565b6126e29190612b3f565b601460008282546126f39190612b61565b909155505060115483906127079083612b20565b6127119190612b3f565b601560008282546127229190612b61565b90915550508015612738576127388a30836121bf565b6127428189612b96565b97505050505b6127538787876121bf565b50505050505050565b60006121b88284612b96565b60006121b88284612b3f565b60065461278c9030906001600160a01b0316846119a2565b6006546001600160a01b031663f305d7198230856000806127b56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561281857600080fd5b505af115801561282c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128519190612ea0565b5050505050565b600060208083528351808285015260005b8181101561288557858101830151858201604001528201612869565b81811115612897576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610fa657600080fd5b600080604083850312156128d557600080fd5b82356128e0816128ad565b946020939093013593505050565b60006020828403121561290057600080fd5b5035919050565b60008060006060848603121561291c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561294857600080fd5b8335612953816128ad565b92506020840135612963816128ad565b929592945050506040919091013590565b803580151581146116b957600080fd5b60006020828403121561299657600080fd5b6121b882612974565b6000602082840312156129b157600080fd5b81356121b8816128ad565b600080604083850312156129cf57600080fd5b82356129da816128ad565b91506129e860208401612974565b90509250929050565b60008060408385031215612a0457600080fd5b8235612a0f816128ad565b91506020830135612a1f816128ad565b809150509250929050565b600060608284031215612a3c57600080fd5b6040516060810181811067ffffffffffffffff82111715612a6d57634e487b7160e01b600052604160045260246000fd5b604052823581526020830135612a82816128ad565b60208201526040928301359281019290925250919050565b600181811c90821680612aae57607f821691505b60208210811415612acf57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612b3a57612b3a612b0a565b500290565b600082612b5c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612b7457612b74612b0a565b500190565b600060208284031215612b8b57600080fd5b81516121b8816128ad565b600082821015612ba857612ba8612b0a565b500390565b80516001600160701b03811681146116b957600080fd5b600080600060608486031215612bd957600080fd5b612be284612bad565b9250612bf060208501612bad565b9150604084015163ffffffff81168114612c0957600080fd5b809150509250925092565b805169ffffffffffffffffffff811681146116b957600080fd5b600080600080600060a08688031215612c4657600080fd5b612c4f86612c14565b9450602086015193506040860151925060608601519150612c7260808701612c14565b90509295509295909350565b600060208284031215612c9057600080fd5b815160ff811681146121b857600080fd5b600181815b80851115612cdc578160001904821115612cc257612cc2612b0a565b80851615612ccf57918102915b93841c9390800290612ca6565b509250929050565b600082612cf357506001610944565b81612d0057506000610944565b8160018114612d165760028114612d2057612d3c565b6001915050610944565b60ff841115612d3157612d31612b0a565b50506001821b610944565b5060208310610133831016604e8410600b8410161715612d5f575081810a610944565b612d698383612ca1565b8060001904821115612d7d57612d7d612b0a565b029392505050565b60006121b88383612ce4565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e7f5784516001600160a01b031683529383019391830191600101612e5a565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612eb557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f7256cfd7ecc45d5307f0d23cf65af170f4a8bb3a682e6eec00d901015feda7b64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102975760003560e01c80638e15f4731161015a578063ce6abcc5116100c1578063f023f5731161007a578063f023f573146107f3578063f2fde38b14610813578063f429389014610833578063fc7003fb14610848578063fea4fa4d14610868578063fefa5ce31461087e57600080fd5b8063ce6abcc51461073d578063d257b34f14610752578063dd62ed3e14610772578063e73b90cd14610792578063e8bc05f5146107b3578063e8f795cb146107d357600080fd5b8063aacebbe311610113578063aacebbe314610678578063b62496f514610698578063bd83beb7146106c8578063c0246668146106dd578063c18bc195146106fd578063c893ecb21461071d57600080fd5b80638e15f4731461059757806395d89b41146105e35780639a7a23d6146105f85780639c74daf014610618578063a457c2d714610638578063a9059cbb1461065857600080fd5b806339509351116101fe578063751039fc116101b7578063751039fc146104f85780637571336a1461050d578063784541d11461052d57806382247ec01461054e5780638a8c523c146105645780638da5cb5b1461057957600080fd5b8063395093511461041d5780634fbee1931461043d57806351bc3c8514610476578063583e05681461048b57806370a08231146104c3578063715018a6146104e357600080fd5b806323b872dd1161025057806323b872dd1461037557806327f4d7d5146103955780632fd689e3146103b6578063313ce567146103cc57806332d3ba6d146103e857806337bd32d2146103fd57600080fd5b806304beaeb8146102a357806306fdde03146102cc578063095ea7b3146102ee57806318160ddd1461031e578063203e727e14610333578063224290851461035557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b9600d5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102e161089e565b6040516102c39190612858565b3480156102fa57600080fd5b5061030e6103093660046128c2565b610930565b60405190151581526020016102c3565b34801561032a57600080fd5b506002546102b9565b34801561033f57600080fd5b5061035361034e3660046128ee565b61094a565b005b34801561036157600080fd5b50610353610370366004612907565b610a30565b34801561038157600080fd5b5061030e610390366004612933565b610ad8565b3480156103a157600080fd5b5060075461030e90600160a81b900460ff1681565b3480156103c257600080fd5b506102b9600c5481565b3480156103d857600080fd5b50604051601281526020016102c3565b3480156103f457600080fd5b506102b9610afc565b34801561040957600080fd5b50610353610418366004612984565b610ea1565b34801561042957600080fd5b5061030e6104383660046128c2565b610ee9565b34801561044957600080fd5b5061030e61045836600461299f565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561048257600080fd5b50610353610f0b565b34801561049757600080fd5b506006546104ab906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b3480156104cf57600080fd5b506102b96104de36600461299f565b610fa9565b3480156104ef57600080fd5b50610353610fc4565b34801561050457600080fd5b5061030e610ffa565b34801561051957600080fd5b506103536105283660046129bc565b61103a565b34801561053957600080fd5b5060075461030e90600160b01b900460ff1681565b34801561055a57600080fd5b506102b9600b5481565b34801561057057600080fd5b5061035361108f565b34801561058557600080fd5b506005546001600160a01b03166104ab565b3480156105a357600080fd5b506105ac6110d2565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102c3565b3480156105ef57600080fd5b506102e161117d565b34801561060457600080fd5b506103536106133660046129bc565b61118c565b34801561062457600080fd5b506007546104ab906001600160a01b031681565b34801561064457600080fd5b5061030e6106533660046128c2565b611280565b34801561066457600080fd5b5061030e6106733660046128c2565b6112fb565b34801561068457600080fd5b5061035361069336600461299f565b611309565b3480156106a457600080fd5b5061030e6106b336600461299f565b601f6020526000908152604090205460ff1681565b3480156106d457600080fd5b50610353611355565b3480156106e957600080fd5b506103536106f83660046129bc565b611386565b34801561070957600080fd5b506103536107183660046128ee565b61140f565b34801561072957600080fd5b5061035361073836600461299f565b6114e0565b34801561074957600080fd5b50610353611536565b34801561075e57600080fd5b5061030e61076d3660046128ee565b611567565b34801561077e57600080fd5b506102b961078d3660046129f1565b6116be565b34801561079e57600080fd5b5060075461030e90600160a01b900460ff1681565b3480156107bf57600080fd5b5061030e6107ce3660046129f1565b6116e9565b3480156107df57600080fd5b50601d546104ab906001600160a01b031681565b3480156107ff57600080fd5b5061035361080e36600461299f565b6117f6565b34801561081f57600080fd5b5061035361082e36600461299f565b611842565b34801561083f57600080fd5b506103536118da565b34801561085457600080fd5b50610353610863366004612a2a565b611904565b34801561087457600080fd5b506102b9600e5481565b34801561088a57600080fd5b506103536108993660046128ee565b611960565b6060600380546108ad90612a9a565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990612a9a565b80156109265780601f106108fb57610100808354040283529160200191610926565b820191906000526020600020905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b60003361093e8185856119a2565b60019150505b92915050565b6005546001600160a01b0316331461097d5760405162461bcd60e51b815260040161097490612ad5565b60405180910390fd5b670de0b6b3a76400006103e861099260025490565b61099d906001612b20565b6109a79190612b3f565b6109b19190612b3f565b811015610a185760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610974565b610a2a81670de0b6b3a7640000612b20565b600d5550565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260040161097490612ad5565b600f8390556011829055601081905580610a748385612b61565b610a7e9190612b61565b600e819055600a1015610ad35760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610974565b505050565b600033610ae6858285611ac6565b610af1858585611b40565b506001949350505050565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190612b79565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd757600080fd5b505afa158015610beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0f9190612b79565b6007549091504290600160b01b900460ff1615610c375742600854610c349190612b96565b90505b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190612bc4565b50601e54601d5492945090925090600160a01b900460ff168015610ce657506008548410155b15610d6457306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a06040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612c2e565b509193505050505b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d9f57600080fd5b505afa158015610db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd79190612c7e565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612c7e565b610e599060ff16600a612d85565b610e6c846001600160701b038716612b20565b610e769190612b20565b610e809190612b3f565b9050610e956001600160701b03851682612b3f565b97505050505050505090565b6005546001600160a01b03163314610ecb5760405162461bcd60e51b815260040161097490612ad5565b601d8054911515600160a01b0260ff60a01b19909216919091179055565b60003361093e818585610efc83836116be565b610f069190612b61565b6119a2565b6005546001600160a01b03163314610f355760405162461bcd60e51b815260040161097490612ad5565b610f46610f4130610fa9565b611fc3565b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5050905080610fa657600080fd5b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610fee5760405162461bcd60e51b815260040161097490612ad5565b610ff8600061212c565b565b6005546000906001600160a01b031633146110275760405162461bcd60e51b815260040161097490612ad5565b506007805460ff60a01b19169055600190565b6005546001600160a01b031633146110645760405162461bcd60e51b815260040161097490612ad5565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110b95760405162461bcd60e51b815260040161097490612ad5565b6007805460ff60a81b1916600160a81b17905542600855565b600080600080600080600080600080601c60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561112f57600080fd5b505afa158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190612c2e565b939e929d50909b50995090975095505050505050565b6060600480546108ad90612a9a565b6005546001600160a01b031633146111b65760405162461bcd60e51b815260040161097490612ad5565b6007546001600160a01b038381169116141561123a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610974565b611244828261217e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000338161128e82866116be565b9050838110156112ee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610974565b610af182868684036119a2565b60003361093e818585611b40565b6005546001600160a01b031633146113335760405162461bcd60e51b815260040161097490612ad5565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461137f5760405162461bcd60e51b815260040161097490612ad5565b6000601355565b6005546001600160a01b031633146113b05760405162461bcd60e51b815260040161097490612ad5565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114395760405162461bcd60e51b815260040161097490612ad5565b670de0b6b3a76400006103e861144e60025490565b611459906005612b20565b6114639190612b3f565b61146d9190612b3f565b8110156114c85760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610974565b6114da81670de0b6b3a7640000612b20565b600b5550565b6005546001600160a01b0316331461150a5760405162461bcd60e51b815260040161097490612ad5565b601d80546001600160a01b039092166001600160a01b03199283168117909155601c8054909216179055565b6005546001600160a01b031633146115605760405162461bcd60e51b815260040161097490612ad5565b6000601255565b6005546000906001600160a01b031633146115945760405162461bcd60e51b815260040161097490612ad5565b620186a06115a160025490565b6115ac906001612b20565b6115b69190612b3f565b8210156116235760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610974565b6103e861162f60025490565b61163a906005612b20565b6116449190612b3f565b8211156116b05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610974565b50600c81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60075460009081906001600160a01b03858116911614801561171957506006546001600160a01b03848116911614155b905080801561174057506001600160a01b03831660009081526017602052604090205460ff165b15611759576007805460ff60b01b1916600160b01b1790555b6001600160a01b03841660009081526017602052604081205460ff168061179857506001600160a01b03841660009081526017602052604090205460ff165b6007549091506001600160a01b03858116911614600083806117b75750815b600e549091501580159081906117d75750600754600160b81b900460ff16155b80156117e1575083155b80156117ea5750815b98975050505050505050565b6005546001600160a01b031633146118205760405162461bcd60e51b815260040161097490612ad5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461186c5760405162461bcd60e51b815260040161097490612ad5565b6001600160a01b0381166118d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610974565b610fa68161212c565b6005546001600160a01b03163314610f465760405162461bcd60e51b815260040161097490612ad5565b6005546001600160a01b0316331461192e5760405162461bcd60e51b815260040161097490612ad5565b80516019556020810151601a80546001600160a01b0319166001600160a01b0390921691909117905560400151601b55565b6005546001600160a01b0316331461198a5760405162461bcd60e51b815260040161097490612ad5565b61199c81670de0b6b3a76400006121ac565b601e5550565b6001600160a01b038316611a045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610974565b6001600160a01b038216611a655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610974565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611ad284846116be565b90506000198114611b3a5781811015611b2d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610974565b611b3a84848484036119a2565b50505050565b6001600160a01b03831660009081526017602052604081205460ff1680611b7f57506001600160a01b03831660009081526017602052604090205460ff165b90506001600160a01b038416611ba75760405162461bcd60e51b815260040161097490612d91565b6001600160a01b038316611bcd5760405162461bcd60e51b815260040161097490612dd6565b81611bde57611b3a848460006121bf565b6007546000906001600160a01b038681169116148015611c1757506001600160a01b03841660009081526018602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611c5357506001600160a01b03861660009081526018602052604090205460ff16155b90506000611c696005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611c9557506005546001600160a01b038781169116145b905060006001600160a01b0387161580611cb957506001600160a01b03871661dead145b905060008280611cc65750815b80611cda5750600754600160b81b900460ff165b600754909150600160a01b900460ff168015611cf4575080155b15611ec957600754600160a81b900460ff1680611d0e5750855b611d535760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610974565b8415611e2857600d54871115611dc95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610974565b600b54611dd589610fa9565b611ddf9089612b61565b1115611e235760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610974565b611ec9565b6001600160a01b03881660009081526018602052604090205460ff16158015611e6a57506001600160a01b03891660009081526018602052604090205460ff16155b15611ec957600b54611e7b89610fa9565b611e859089612b61565b1115611ec95760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610974565b600754600160b81b900460ff16158015611efc57506001600160a01b0389166000908152601f602052604090205460ff16155b8015611f2157506001600160a01b03891660009081526017602052604090205460ff16155b8015611f4657506001600160a01b03881660009081526017602052604090205460ff16155b15611fab576000611f5630610fa9565b600c54909150811015611f67612313565b8015611f705750805b8015611f7a575087155b15611fa8576007805460ff60b81b1916600160b81b179055611f9a61232f565b6007805460ff60b81b191690555b50505b611fb88989898789612569565b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ff857611ff8612e19565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120849190612b79565b8160018151811061209757612097612e19565b6001600160a01b0392831660209182029290920101526006546120bd91309116846119a2565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906120f6908590600090869030904290600401612e2f565b600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601f60205260409020805460ff1916821515179055611244828261103a565b60006121b88284612b20565b9392505050565b6001600160a01b0383166121e55760405162461bcd60e51b815260040161097490612d91565b6001600160a01b03821661220b5760405162461bcd60e51b815260040161097490612dd6565b6001600160a01b038316600090815260208190526040902054818110156122835760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610974565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122ba908490612b61565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161230691815260200190565b60405180910390a3611b3a565b60008061231e610afc565b116123295750600090565b50600190565b600061233a30610fa9565b905060006015546014546016546123519190612b61565b61235b9190612b61565b9050811580612368575080155b15612371575050565b600c5482111561238157600c5491505b6000600282601654856123949190612b20565b61239e9190612b3f565b6123a89190612b3f565b905060006123b6848361275c565b9050476123c282611fc3565b60006123ce478361275c565b905060006123f1866123eb601454856121ac90919063ffffffff16565b90612768565b9050600061240e876123eb601554866121ac90919063ffffffff16565b905060008161241d8486612b96565b6124279190612b96565b90506000871180156124395750600081115b1561248c576124488782612774565b601654604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6000601681905560148190556015819055600a546040516001600160a01b039091169085908381818185875af1925050503d80600081146124e9576040519150601f19603f3d011682016040523d82523d6000602084013e6124ee565b606091505b50509050806124fc57600080fd5b6009546040516000916001600160a01b03169085908381818185875af1925050503d8060008114612549576040519150601f19603f3d011682016040523d82523d6000602084013e61254e565b606091505b505090508061255c57600080fd5b5050505050505050505050565b600061257586866116e9565b6001600160a01b0387166000908152601760205260408120549192509060ff1680156125a957506001600160a01b03861630145b90508015612628576000601354601254600e546125c69190612b61565b6125d09190612b61565b905060006125e360646123eb89856121ac565b9050801561261557601a54612615906001600160a01b0316308361260683610fa9565b6126109190612b96565b6121bf565b61261f8188612b96565b96505050612748565b811561274857600e54600f54851561265f57601254600e5461264a9190612b61565b9150601254600f5461265c9190612b61565b90505b841561268a57601354600e546126759190612b61565b9150601354600f546126879190612b61565b90505b600061269b60646123eb8a866121ac565b905082601054826126ac9190612b20565b6126b69190612b3f565b601660008282546126c79190612b61565b909155508390506126d88383612b20565b6126e29190612b3f565b601460008282546126f39190612b61565b909155505060115483906127079083612b20565b6127119190612b3f565b601560008282546127229190612b61565b90915550508015612738576127388a30836121bf565b6127428189612b96565b97505050505b6127538787876121bf565b50505050505050565b60006121b88284612b96565b60006121b88284612b3f565b60065461278c9030906001600160a01b0316846119a2565b6006546001600160a01b031663f305d7198230856000806127b56005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561281857600080fd5b505af115801561282c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128519190612ea0565b5050505050565b600060208083528351808285015260005b8181101561288557858101830151858201604001528201612869565b81811115612897576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610fa657600080fd5b600080604083850312156128d557600080fd5b82356128e0816128ad565b946020939093013593505050565b60006020828403121561290057600080fd5b5035919050565b60008060006060848603121561291c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561294857600080fd5b8335612953816128ad565b92506020840135612963816128ad565b929592945050506040919091013590565b803580151581146116b957600080fd5b60006020828403121561299657600080fd5b6121b882612974565b6000602082840312156129b157600080fd5b81356121b8816128ad565b600080604083850312156129cf57600080fd5b82356129da816128ad565b91506129e860208401612974565b90509250929050565b60008060408385031215612a0457600080fd5b8235612a0f816128ad565b91506020830135612a1f816128ad565b809150509250929050565b600060608284031215612a3c57600080fd5b6040516060810181811067ffffffffffffffff82111715612a6d57634e487b7160e01b600052604160045260246000fd5b604052823581526020830135612a82816128ad565b60208201526040928301359281019290925250919050565b600181811c90821680612aae57607f821691505b60208210811415612acf57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612b3a57612b3a612b0a565b500290565b600082612b5c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612b7457612b74612b0a565b500190565b600060208284031215612b8b57600080fd5b81516121b8816128ad565b600082821015612ba857612ba8612b0a565b500390565b80516001600160701b03811681146116b957600080fd5b600080600060608486031215612bd957600080fd5b612be284612bad565b9250612bf060208501612bad565b9150604084015163ffffffff81168114612c0957600080fd5b809150509250925092565b805169ffffffffffffffffffff811681146116b957600080fd5b600080600080600060a08688031215612c4657600080fd5b612c4f86612c14565b9450602086015193506040860151925060608601519150612c7260808701612c14565b90509295509295909350565b600060208284031215612c9057600080fd5b815160ff811681146121b857600080fd5b600181815b80851115612cdc578160001904821115612cc257612cc2612b0a565b80851615612ccf57918102915b93841c9390800290612ca6565b509250929050565b600082612cf357506001610944565b81612d0057506000610944565b8160018114612d165760028114612d2057612d3c565b6001915050610944565b60ff841115612d3157612d31612b0a565b50506001821b610944565b5060208310610133831016604e8410600b8410161715612d5f575081810a610944565b612d698383612ca1565b8060001904821115612d7d57612d7d612b0a565b029392505050565b60006121b88383612ce4565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e7f5784516001600160a01b031683529383019391830191600101612e5a565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612eb557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f7256cfd7ecc45d5307f0d23cf65af170f4a8bb3a682e6eec00d901015feda7b64736f6c63430008090033

Deployed Bytecode Sourcemap

34433:16898:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34950:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;34950:36:0;;;;;;;;23269:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25761:242::-;;;;;;;;;;-1:-1:-1;25761:242:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;25761:242:0;1254:187:1;24389:108:0;;;;;;;;;;-1:-1:-1;24477:12:0;;24389:108;;41848:272;;;;;;;;;;-1:-1:-1;41848:272:0;;;;;:::i;:::-;;:::i;:::-;;42564:410;;;;;;;;;;-1:-1:-1;42564:410:0;;;;;:::i;:::-;;:::i;26583:295::-;;;;;;;;;;-1:-1:-1;26583:295:0;;;;;:::i;:::-;;:::i;34643:34::-;;;;;;;;;;-1:-1:-1;34643:34:0;;;;-1:-1:-1;;;34643:34:0;;;;;;34909;;;;;;;;;;;;;;;;24231:93;;;;;;;;;;-1:-1:-1;24231:93:0;;24314:2;2555:36:1;;2543:2;2528:18;24231:93:0;2413:184:1;39309:927:0;;;;;;;;;;;;;:::i;46549:107::-;;;;;;;;;;-1:-1:-1;46549:107:0;;;;;:::i;:::-;;:::i;27287:270::-;;;;;;;;;;-1:-1:-1;27287:270:0;;;;;:::i;:::-;;:::i;45926:126::-;;;;;;;;;;-1:-1:-1;45926:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46016:28:0;45992:4;46016:28;;;:19;:28;;;;;;;;;45926:126;50068:225;;;;;;;;;;;;;:::i;34515:42::-;;;;;;;;;;-1:-1:-1;34515:42:0;;;;-1:-1:-1;;;;;34515:42:0;;;;;;-1:-1:-1;;;;;3395:32:1;;;3377:51;;3365:2;3350:18;34515:42:0;3204:230:1;24560:177:0;;;;;;;;;;-1:-1:-1;24560:177:0;;;;;:::i;:::-;;:::i;21211:103::-;;;;;;;;;;;;;:::i;39052:122::-;;;;;;;;;;;;;:::i;42389:167::-;;;;;;;;;;-1:-1:-1;42389:167:0;;;;;:::i;:::-;;:::i;34684:36::-;;;;;;;;;;-1:-1:-1;34684:36:0;;;;-1:-1:-1;;;34684:36:0;;;;;;34877:25;;;;;;;;;;;;;;;;38369:123;;;;;;;;;;;;;:::i;20560:87::-;;;;;;;;;;-1:-1:-1;20633:6:0;;-1:-1:-1;;;;;20633:6:0;20560:87;;40244:498;;;;;;;;;;;;;:::i;:::-;;;;4230:22:1;4279:15;;;4261:34;;4326:2;4311:18;;4304:34;;;;4354:18;;4347:34;;;;4412:2;4397:18;;4390:34;4461:15;;;4455:3;4440:19;;4433:44;4207:3;4192:19;40244:498:0;3967:516:1;23488:104:0;;;;;;;;;;;;;:::i;38500:301::-;;;;;;;;;;-1:-1:-1;38500:301:0;;;;;:::i;:::-;;:::i;34564:29::-;;;;;;;;;;-1:-1:-1;34564:29:0;;;;-1:-1:-1;;;;;34564:29:0;;;28060:505;;;;;;;;;;-1:-1:-1;28060:505:0;;;;;:::i;:::-;;:::i;24943:234::-;;;;;;;;;;-1:-1:-1;24943:234:0;;;;;:::i;:::-;;:::i;43172:115::-;;;;;;;;;;-1:-1:-1;43172:115:0;;;;;:::i;:::-;;:::i;35823:58::-;;;;;;;;;;-1:-1:-1;35823:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46149:79;;;;;;;;;;;;;:::i;42982:182::-;;;;;;;;;;-1:-1:-1;42982:182:0;;;;;:::i;:::-;;:::i;42128:253::-;;;;;;;;;;-1:-1:-1;42128:253:0;;;;;:::i;:::-;;:::i;46362:179::-;;;;;;;;;;-1:-1:-1;46362:179:0;;;;;:::i;:::-;;:::i;46060:81::-;;;;;;;;;;;;;:::i;41342:498::-;;;;;;;;;;-1:-1:-1;41342:498:0;;;;;:::i;:::-;;:::i;25240:201::-;;;;;;;;;;-1:-1:-1;25240:201:0;;;;;:::i;:::-;;:::i;34602:34::-;;;;;;;;;;-1:-1:-1;34602:34:0;;;;-1:-1:-1;;;34602:34:0;;;;;;40750:584;;;;;;;;;;-1:-1:-1;40750:584:0;;;;;:::i;:::-;;:::i;35683:32::-;;;;;;;;;;-1:-1:-1;35683:32:0;;;;-1:-1:-1;;;;;35683:32:0;;;43295:111;;;;;;;;;;-1:-1:-1;43295:111:0;;;;;:::i;:::-;;:::i;21469:238::-;;;;;;;;;;-1:-1:-1;21469:238:0;;;;;:::i;:::-;;:::i;50301:169::-;;;;;;;;;;;;;:::i;43414:127::-;;;;;;;;;;-1:-1:-1;43414:127:0;;;;;:::i;:::-;;:::i;34995:25::-;;;;;;;;;;;;;;;;46236:118;;;;;;;;;;-1:-1:-1;46236:118:0;;;;;:::i;:::-;;:::i;23269:100::-;23323:13;23356:5;23349:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23269:100;:::o;25761:242::-;25880:4;6978:10;25941:32;6978:10;25957:7;25966:6;25941:8;:32::i;:::-;25991:4;25984:11;;;25761:242;;;;;:::o;41848:272::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;;;;;;;;;41985:4:::1;41977;41956:13;24477:12:::0;;;24389:108;41956:13:::1;:17;::::0;41972:1:::1;41956:17;:::i;:::-;41955:26;;;;:::i;:::-;41954:35;;;;:::i;:::-;41944:6;:45;;41922:142;;;::::0;-1:-1:-1;;;41922:142:0;;7235:2:1;41922:142:0::1;::::0;::::1;7217:21:1::0;7274:2;7254:18;;;7247:30;7313:34;7293:18;;;7286:62;-1:-1:-1;;;7364:18:1;;;7357:45;7419:19;;41922:142:0::1;7033:411:1::0;41922:142:0::1;42099:13;:6:::0;42108:4:::1;42099:13;:::i;:::-;42075:21;:37:::0;-1:-1:-1;41848:272:0:o;42564:410::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;42716:13:::1;:28:::0;;;42755:15:::1;:32:::0;;;42798:13:::1;:28:::0;;;42814:12;42850:31:::1;42773:14:::0;42732:12;42850:31:::1;:::i;:::-;:47;;;;:::i;:::-;42837:10;:60:::0;;;42930:2:::1;-1:-1:-1::0;42916:16:0::1;42908:58;;;::::0;-1:-1:-1;;;42908:58:0;;7784:2:1;42908:58:0::1;::::0;::::1;7766:21:1::0;7823:2;7803:18;;;7796:30;7862:31;7842:18;;;7835:59;7911:18;;42908:58:0::1;7582:353:1::0;42908:58:0::1;42564:410:::0;;;:::o;26583:295::-;26714:4;6978:10;26772:38;26788:4;6978:10;26803:6;26772:15;:38::i;:::-;26821:27;26831:4;26837:2;26841:6;26821:9;:27::i;:::-;-1:-1:-1;26866:4:0;;26583:295;-1:-1:-1;;;;26583:295:0:o;39309:927::-;39358:7;39378:21;39446:14;;;;;;;;;-1:-1:-1;;;;;39446:14:0;-1:-1:-1;;;;;39431:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39378:103;;39492:21;39560:14;;;;;;;;;-1:-1:-1;;;;;39560:14:0;-1:-1:-1;;;;;39545:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39664:16;;39492:103;;-1:-1:-1;39635:15:0;;-1:-1:-1;;;39664:16:0;;;;39661:72;;;39718:15;39703:12;;:30;;;;:::i;:::-;39682:51;;39661:72;39745:12;39759;39792:14;;;;;;;;;-1:-1:-1;;;;;39792:14:0;-1:-1:-1;;;;;39777:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39870:14:0;;39899:18;;39744:91;;-1:-1:-1;39744:91:0;;-1:-1:-1;39870:14:0;-1:-1:-1;;;39899:18:0;;;;:56;;;;;39943:12;;39921:18;:34;;39899:56;39895:137;;;39999:4;-1:-1:-1;;;;;39999:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39972:48:0;;-1:-1:-1;;;;39895:137:0;40042:12;40170:6;-1:-1:-1;;;;;40170:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40162:26;;40139:6;-1:-1:-1;;;;;40139:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40127:30;;40131:26;;40127:2;:30;:::i;:::-;40058:52;40095:14;-1:-1:-1;;;;;40058:13:0;;:52;:::i;:::-;:100;;;;:::i;:::-;40057:131;;;;:::i;:::-;40042:146;-1:-1:-1;40207:20:0;-1:-1:-1;;;;;40214:13:0;;40042:146;40207:20;:::i;:::-;40199:29;;;;;;;;;39309:927;:::o;46549:107::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;46620:18:::1;:28:::0;;;::::1;;-1:-1:-1::0;;;46620:28:0::1;-1:-1:-1::0;;;;46620:28:0;;::::1;::::0;;;::::1;::::0;;46549:107::o;27287:270::-;27402:4;6978:10;27463:64;6978:10;27479:7;27516:10;27488:25;6978:10;27479:7;27488:9;:25::i;:::-;:38;;;;:::i;:::-;27463:8;:64::i;50068:225::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;50120:43:::1;50138:24;50156:4;50138:9;:24::i;:::-;50120:17;:43::i;:::-;50202:15;::::0;50194:64:::1;::::0;50177:12:::1;::::0;-1:-1:-1;;;;;50202:15:0::1;::::0;50232:21:::1;::::0;50177:12;50194:64;50177:12;50194:64;50232:21;50202:15;50194:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50176:82;;;50277:7;50269:16;;;::::0;::::1;;50109:184;50068:225::o:0;24560:177::-;-1:-1:-1;;;;;24711:18:0;24679:7;24711:18;;;;;;;;;;;;24560:177::o;21211:103::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;21276:30:::1;21303:1;21276:18;:30::i;:::-;21211:103::o:0;39052:122::-;20633:6;;39104:4;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;-1:-1:-1;39121:15:0::1;:23:::0;;-1:-1:-1;;;;39121:23:0::1;::::0;;;39052:122;:::o;42389:167::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42502:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;42502:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42389:167::o;38369:123::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;38422:14:::1;:21:::0;;-1:-1:-1;;;;38422:21:0::1;-1:-1:-1::0;;;38422:21:0::1;::::0;;38469:15:::1;38454:12;:30:::0;38369:123::o;40244:498::-;40334:6;40355;40376:7;40398;40420:6;40469:14;40498:12;40525:17;40557;40589:22;40625:16;;;;;;;;;-1:-1:-1;;;;;40625:16:0;-1:-1:-1;;;;;40625:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40454:205;;;;-1:-1:-1;40454:205:0;;-1:-1:-1;40454:205:0;-1:-1:-1;40454:205:0;;-1:-1:-1;40244:498:0;-1:-1:-1;;;;;;40244:498:0:o;23488:104::-;23544:13;23577:7;23570:14;;;;;:::i;38500:301::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;38609:14:::1;::::0;-1:-1:-1;;;;;38601:22:0;;::::1;38609:14:::0;::::1;38601:22;;38593:92;;;::::0;-1:-1:-1;;;38593:92:0;;11700:2:1;38593:92:0::1;::::0;::::1;11682:21:1::0;11739:2;11719:18;;;11712:30;11778:34;11758:18;;;11751:62;11849:27;11829:18;;;11822:55;11894:19;;38593:92:0::1;11498:421:1::0;38593:92:0::1;38696:41;38725:4;38731:5;38696:28;:41::i;:::-;38753:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;38753:40:0;::::1;::::0;::::1;::::0;;;::::1;38500:301:::0;;:::o;28060:505::-;28180:4;6978:10;28180:4;28268:25;6978:10;28285:7;28268:9;:25::i;:::-;28241:52;;28346:15;28326:16;:35;;28304:122;;;;-1:-1:-1;;;28304:122:0;;12126:2:1;28304:122:0;;;12108:21:1;12165:2;12145:18;;;12138:30;12204:34;12184:18;;;12177:62;-1:-1:-1;;;12255:18:1;;;12248:35;12300:19;;28304:122:0;11924:401:1;28304:122:0;28462:60;28471:5;28478:7;28506:15;28487:16;:34;28462:8;:60::i;24943:234::-;25058:4;6978:10;25119:28;6978:10;25136:2;25140:6;25119:9;:28::i;43172:115::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;43252:15:::1;:27:::0;;-1:-1:-1;;;;;;43252:27:0::1;-1:-1:-1::0;;;;;43252:27:0;;;::::1;::::0;;;::::1;::::0;;43172:115::o;46149:79::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;46219:1:::1;46205:11;:15:::0;46149:79::o;42982:182::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43067:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;43067:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43122:34;;1394:41:1;;;43122:34:0::1;::::0;1367:18:1;43122:34:0::1;;;;;;;42982:182:::0;;:::o;42128:253::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;42268:4:::1;42260;42239:13;24477:12:::0;;;24389:108;42239:13:::1;:17;::::0;42255:1:::1;42239:17;:::i;:::-;42238:26;;;;:::i;:::-;42237:35;;;;:::i;:::-;42227:6;:45;;42205:131;;;::::0;-1:-1:-1;;;42205:131:0;;12532:2:1;42205:131:0::1;::::0;::::1;12514:21:1::0;12571:2;12551:18;;;12544:30;12610:34;12590:18;;;12583:62;-1:-1:-1;;;12661:18:1;;;12654:34;12705:19;;42205:131:0::1;12330:400:1::0;42205:131:0::1;42360:13;:6:::0;42369:4:::1;42360:13;:::i;:::-;42347:10;:26:::0;-1:-1:-1;42128:253:0:o;46362:179::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;46437:17:::1;:24:::0;;-1:-1:-1;;;;;46437:24:0;;::::1;-1:-1:-1::0;;;;;;46437:24:0;;::::1;::::0;::::1;::::0;;;46472:16:::1;:61:::0;;;;::::1;;::::0;;46362:179::o;46060:81::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;46132:1:::1;46117:12;:16:::0;46060:81::o;41342:498::-;20633:6;;41450:4;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;41529:6:::1;41508:13;24477:12:::0;;;24389:108;41508:13:::1;:17;::::0;41524:1:::1;41508:17;:::i;:::-;41507:28;;;;:::i;:::-;41494:9;:41;;41472:144;;;::::0;-1:-1:-1;;;41472:144:0;;12937:2:1;41472:144:0::1;::::0;::::1;12919:21:1::0;12976:2;12956:18;;;12949:30;13015:34;12995:18;;;12988:62;-1:-1:-1;;;13066:18:1;;;13059:51;13127:19;;41472:144:0::1;12735:417:1::0;41472:144:0::1;41684:4;41663:13;24477:12:::0;;;24389:108;41663:13:::1;:17;::::0;41679:1:::1;41663:17;:::i;:::-;41662:26;;;;:::i;:::-;41649:9;:39;;41627:141;;;::::0;-1:-1:-1;;;41627:141:0;;13359:2:1;41627:141:0::1;::::0;::::1;13341:21:1::0;13398:2;13378:18;;;13371:30;13437:34;13417:18;;;13410:62;-1:-1:-1;;;13488:18:1;;;13481:50;13548:19;;41627:141:0::1;13157:416:1::0;41627:141:0::1;-1:-1:-1::0;41779:19:0::1;:31:::0;;;41828:4:::1;20851:1;41342:498:::0;;;:::o;25240:201::-;-1:-1:-1;;;;;25406:18:0;;;25374:7;25406:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25240:201::o;40750:584::-;40857:14;;40819:4;;;;-1:-1:-1;;;;;40849:22:0;;;40857:14;;40849:22;:57;;;;-1:-1:-1;40889:16:0;;-1:-1:-1;;;;;40875:31:0;;;40889:16;;40875:31;;40849:57;40836:70;;40921:5;:32;;;;-1:-1:-1;;;;;;40930:23:0;;;;;;:19;:23;;;;;;;;40921:32;40917:61;;;40955:16;:23;;-1:-1:-1;;;;40955:23:0;-1:-1:-1;;;40955:23:0;;;40917:61;-1:-1:-1;;;;;41014:25:0;;40989:22;41014:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;41043:23:0;;;;;;:19;:23;;;;;;;;41014:52;41097:14;;40989:77;;-1:-1:-1;;;;;;41091:20:0;;;41097:14;;41091:20;41077:11;41137:5;;:15;;;41146:6;41137:15;41180:10;;41123:29;;-1:-1:-1;41180:14:0;;;;;;41229:39;;-1:-1:-1;41255:13:0;;-1:-1:-1;;;41255:13:0;;;;41254:14;41229:39;:74;;;;;41286:17;41285:18;41229:74;:97;;;;;41320:6;41229:97;41208:118;40750:584;-1:-1:-1;;;;;;;;40750:584:0:o;43295:111::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;43377:9:::1;:21:::0;;-1:-1:-1;;;;;;43377:21:0::1;-1:-1:-1::0;;;;;43377:21:0;;;::::1;::::0;;;::::1;::::0;;43295:111::o;21469:238::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21572:22:0;::::1;21550:110;;;::::0;-1:-1:-1;;;21550:110:0;;13780:2:1;21550:110:0::1;::::0;::::1;13762:21:1::0;13819:2;13799:18;;;13792:30;13858:34;13838:18;;;13831:62;-1:-1:-1;;;13909:18:1;;;13902:36;13955:19;;21550:110:0::1;13578:402:1::0;21550:110:0::1;21671:28;21690:8;21671:18;:28::i;50301:169::-:0;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;43414:127::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;43507:26;;:12:::1;:26:::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;43507:26:0::1;-1:-1:-1::0;;;;;43507:26:0;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;;43414:127::o;46236:118::-;20633:6;;-1:-1:-1;;;;;20633:6:0;6978:10;20780:23;20772:68;;;;-1:-1:-1;;;20772:68:0;;;;;;;:::i;:::-;46330:15:::1;:3:::0;46338:6:::1;46330:7;:15::i;:::-;46306:14;:40:::0;-1:-1:-1;46236:118:0:o;30613:380::-;-1:-1:-1;;;;;30749:19:0;;30741:68;;;;-1:-1:-1;;;30741:68:0;;14187:2:1;30741:68:0;;;14169:21:1;14226:2;14206:18;;;14199:30;14265:34;14245:18;;;14238:62;-1:-1:-1;;;14316:18:1;;;14309:34;14360:19;;30741:68:0;13985:400:1;30741:68:0;-1:-1:-1;;;;;30828:21:0;;30820:68;;;;-1:-1:-1;;;30820:68:0;;14592:2:1;30820:68:0;;;14574:21:1;14631:2;14611:18;;;14604:30;14670:34;14650:18;;;14643:62;-1:-1:-1;;;14721:18:1;;;14714:32;14763:19;;30820:68:0;14390:398:1;30820:68:0;-1:-1:-1;;;;;30901:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30953:32;;160:25:1;;;30953:32:0;;133:18:1;30953:32:0;;;;;;;30613:380;;;:::o;31284:502::-;31419:24;31446:25;31456:5;31463:7;31446:9;:25::i;:::-;31419:52;;-1:-1:-1;;31486:16:0;:37;31482:297;;31586:6;31566:16;:26;;31540:117;;;;-1:-1:-1;;;31540:117:0;;14995:2:1;31540:117:0;;;14977:21:1;15034:2;15014:18;;;15007:30;15073:31;15053:18;;;15046:59;15122:18;;31540:117:0;14793:353:1;31540:117:0;31701:51;31710:5;31717:7;31745:6;31726:16;:25;31701:8;:51::i;:::-;31408:378;31284:502;;;:::o;43549:2365::-;-1:-1:-1;;;;;43697:25:0;;43673:21;43697:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;43726:23:0;;;;;;:19;:23;;;;;;;;43697:52;43673:76;-1:-1:-1;;;;;;43770:18:0;;43762:68;;;;-1:-1:-1;;;43762:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43849:16:0;;43841:64;;;;-1:-1:-1;;;43841:64:0;;;;;;;:::i;:::-;43922:11;43918:93;;43950:28;43966:4;43972:2;43976:1;43950:15;:28::i;43918:93::-;44044:14;;44023:10;;-1:-1:-1;;;;;44036:22:0;;;44044:14;;44036:22;:75;;;;-1:-1:-1;;;;;;44076:35:0;;;;;;:31;:35;;;;;;;;44075:36;44036:75;44142:14;;44023:88;;-1:-1:-1;44122:11:0;;-1:-1:-1;;;;;44136:20:0;;;44142:14;;44136:20;:75;;;;-1:-1:-1;;;;;;44174:37:0;;;;;;:31;:37;;;;;;;;44173:38;44136:75;44122:89;;44222:20;44253:7;20633:6;;-1:-1:-1;;;;;20633:6:0;;20560:87;44253:7;-1:-1:-1;;;;;44245:15:0;:4;-1:-1:-1;;;;;44245:15:0;;:32;;;-1:-1:-1;20633:6:0;;-1:-1:-1;;;;;44264:13:0;;;20633:6;;44264:13;44245:32;44222:55;-1:-1:-1;44288:12:0;-1:-1:-1;;;;;44303:16:0;;;;:41;;-1:-1:-1;;;;;;44323:21:0;;44337:6;44323:21;44303:41;44288:56;;44355:21;44379:15;:26;;;;44398:7;44379:26;:43;;;-1:-1:-1;44409:13:0;;-1:-1:-1;;;44409:13:0;;;;44379:43;44447:15;;44355:67;;-1:-1:-1;;;;44447:15:0;;;;:36;;;;;44467:16;44466:17;44447:36;44443:856;;;44526:14;;-1:-1:-1;;;44526:14:0;;;;;:34;;;44544:16;44526:34;44500:118;;;;-1:-1:-1;;;44500:118:0;;16163:2:1;44500:118:0;;;16145:21:1;16202:2;16182:18;;;16175:30;-1:-1:-1;;;16221:18:1;;;16214:52;16283:18;;44500:118:0;15961:346:1;44500:118:0;44637:5;44633:655;;;44703:21;;44693:6;:31;;44663:158;;;;-1:-1:-1;;;44663:158:0;;16514:2:1;44663:158:0;;;16496:21:1;16553:2;16533:18;;;16526:30;16592:34;16572:18;;;16565:62;-1:-1:-1;;;16643:18:1;;;16636:51;16704:19;;44663:158:0;16312:417:1;44663:158:0;44896:10;;44879:13;44889:2;44879:9;:13::i;:::-;44870:22;;:6;:22;:::i;:::-;:36;;44840:129;;;;-1:-1:-1;;;44840:129:0;;16936:2:1;44840:129:0;;;16918:21:1;16975:2;16955:18;;;16948:30;-1:-1:-1;;;16994:18:1;;;16987:49;17053:18;;44840:129:0;16734:343:1;44840:129:0;44633:655;;;-1:-1:-1;;;;;45014:35:0;;;;;;:31;:35;;;;;;;;45013:36;:95;;;;-1:-1:-1;;;;;;45071:37:0;;;;;;:31;:37;;;;;;;;45070:38;45013:95;44991:297;;;45199:10;;45182:13;45192:2;45182:9;:13::i;:::-;45173:22;;:6;:22;:::i;:::-;:36;;45143:129;;;;-1:-1:-1;;;45143:129:0;;16936:2:1;45143:129:0;;;16918:21:1;16975:2;16955:18;;;16948:30;-1:-1:-1;;;16994:18:1;;;16987:49;17053:18;;45143:129:0;16734:343:1;45143:129:0;45316:13;;-1:-1:-1;;;45316:13:0;;;;45315:14;:63;;;;-1:-1:-1;;;;;;45347:31:0;;;;;;:25;:31;;;;;;;;45346:32;45315:63;:106;;;;-1:-1:-1;;;;;;45396:25:0;;;;;;:19;:25;;;;;;;;45395:26;45315:106;:147;;;;-1:-1:-1;;;;;;45439:23:0;;;;;;:19;:23;;;;;;;;45438:24;45315:147;45311:536;;;45479:28;45510:24;45528:4;45510:9;:24::i;:::-;45588:19;;45479:55;;-1:-1:-1;45564:43:0;;;45626:17;:15;:17::i;:::-;:45;;;;;45664:7;45626:45;:84;;;;;45694:16;45693:17;45626:84;45622:214;;;45731:13;:20;;-1:-1:-1;;;;45731:20:0;-1:-1:-1;;;45731:20:0;;;45770:10;:8;:10::i;:::-;45799:13;:21;;-1:-1:-1;;;;45799:21:0;;;45622:214;45464:383;;45311:536;45859:47;45874:4;45880:2;45884:6;45892;45900:5;45859:14;:47::i;:::-;43662:2252;;;;;;43549:2365;;;:::o;50478:479::-;50569:16;;;50583:1;50569:16;;;;;;;;50545:21;;50569:16;;;;;;;;;;-1:-1:-1;50569:16:0;50545:40;;50614:4;50596;50601:1;50596:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50596:23:0;;;:7;;;;;;;;;;:23;;;;50640:16;;:23;;;-1:-1:-1;;;50640:23:0;;;;:16;;;;;:21;;:23;;;;;50596:7;;50640:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50630:4;50635:1;50630:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50630:33:0;;;:7;;;;;;;;;:33;50708:16;;50676:63;;50693:4;;50708:16;50727:11;50676:8;:63::i;:::-;50752:16;;:197;;-1:-1:-1;;;50752:197:0;;-1:-1:-1;;;;;50752:16:0;;;;:67;;:197;;50834:11;;50752:16;;50876:4;;50903;;50923:15;;50752:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50534:423;50478:479;:::o;21867:191::-;21960:6;;;-1:-1:-1;;;;;21977:17:0;;;-1:-1:-1;;;;;;21977:17:0;;;;;;;22010:40;;21960:6;;;21977:17;21960:6;;22010:40;;21941:16;;22010:40;21930:128;21867:191;:::o;38809:235::-;-1:-1:-1;;;;;38892:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;38892:39:0;;;;;;;38942:38;38892:31;:39;38942:25;:38::i;3438:98::-;3496:7;3523:5;3527:1;3523;:5;:::i;:::-;3516:12;3438:98;-1:-1:-1;;;3438:98:0:o;33718:708::-;-1:-1:-1;;;;;33849:18:0;;33841:68;;;;-1:-1:-1;;;33841:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33928:16:0;;33920:64;;;;-1:-1:-1;;;33920:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34070:15:0;;34048:19;34070:15;;;;;;;;;;;34118:21;;;;34096:109;;;;-1:-1:-1;;;34096:109:0;;18401:2:1;34096:109:0;;;18383:21:1;18440:2;18420:18;;;18413:30;18479:34;18459:18;;;18452:62;-1:-1:-1;;;18530:18:1;;;18523:36;18576:19;;34096:109:0;18199:402:1;34096:109:0;-1:-1:-1;;;;;34241:15:0;;;:9;:15;;;;;;;;;;;34259:20;;;34241:38;;34301:13;;;;;;;;:23;;34273:6;;34241:9;34301:23;;34273:6;;34301:23;:::i;:::-;;;;;;;;34357:2;-1:-1:-1;;;;;34342:26:0;34351:4;-1:-1:-1;;;;;34342:26:0;;34361:6;34342:26;;;;160:25:1;;148:2;133:18;;14:177;34342:26:0;;;;;;;;34381:37;42564:410;39182:119;39232:4;39277:1;39256:18;:16;:18::i;:::-;:22;:37;;-1:-1:-1;39288:5:0;;39182:119::o;39256:37::-;-1:-1:-1;39281:4:0;;39182:119::o;48229:1794::-;48268:23;48294:24;48312:4;48294:9;:24::i;:::-;48268:50;;48329:25;48415:21;;48379:19;;48357;;:41;;;;:::i;:::-;:79;;;;:::i;:::-;48329:107;-1:-1:-1;48451:20:0;;;:46;;-1:-1:-1;48475:22:0;;48451:46;48447:59;;;48499:7;;48229:1794::o;48447:59::-;48538:19;;48520:15;:37;48516:107;;;48592:19;;48574:37;;48516:107;48633:23;48747:1;48714:17;48678:19;;48660:15;:37;;;;:::i;:::-;48659:72;;;;:::i;:::-;:89;;;;:::i;:::-;48633:115;-1:-1:-1;48759:26:0;48788:36;:15;48633:115;48788:19;:36::i;:::-;48759:65;-1:-1:-1;48863:21:0;48895:37;48759:65;48895:17;:37::i;:::-;48943:18;48964:44;:21;48990:17;48964:25;:44::i;:::-;48943:65;;49019:23;49045:82;49099:17;49045:35;49060:19;;49045:10;:14;;:35;;;;:::i;:::-;:39;;:82::i;:::-;49019:108;;49138:25;49166:84;49222:17;49166:37;49181:21;;49166:10;:14;;:37;;;;:::i;:84::-;49138:112;-1:-1:-1;49261:23:0;49138:112;49287:28;49300:15;49287:10;:28;:::i;:::-;:48;;;;:::i;:::-;49261:74;;49370:1;49352:15;:19;:42;;;;;49393:1;49375:15;:19;49352:42;49348:280;;;49411:47;49425:15;49442;49411:13;:47::i;:::-;49582:19;;49478:138;;;18808:25:1;;;18864:2;18849:18;;18842:34;;;18892:18;;;18885:34;;;;49478:138:0;;;;;;18796:2:1;49478:138:0;;;49348:280;49662:1;49640:19;:23;;;49674:19;:23;;;49708:21;:25;;;49786:15;;49778:57;;-1:-1:-1;;;;;49786:15:0;;;;49815;;49662:1;49778:57;49662:1;49778:57;49815:15;49786;49778:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49746:89;;;49854:20;49846:29;;;;;;49928:9;;49920:53;;49887:27;;-1:-1:-1;;;;;49928:9:0;;49951:17;;49887:27;49920:53;49887:27;49920:53;49951:17;49928:9;49920:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49886:87;;;49992:22;49984:31;;;;;;48257:1766;;;;;;;;;;;48229:1794::o;46664:1557::-;46826:20;46849:27;46867:4;46873:2;46849:17;:27::i;:::-;-1:-1:-1;;;;;46911:25:0;;46889:19;46911:25;;;:19;:25;;;;;;46826:50;;-1:-1:-1;46889:19:0;46911:25;;:48;;;;-1:-1:-1;;;;;;46940:19:0;;46954:4;46940:19;46911:48;46889:70;;46976:14;46972:1198;;;47007:13;47051:11;;47036:12;;47023:10;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;47007:55;-1:-1:-1;47077:12:0;47093:26;47115:3;47093:17;:6;47007:55;47093:10;:17::i;:26::-;47077:42;-1:-1:-1;47139:8:0;;47136:152;;47185:25;;47169:102;;-1:-1:-1;;;;;47185:25:0;47220:4;47266;47227:36;47185:25;47227:9;:36::i;:::-;:43;;;;:::i;:::-;47169:15;:102::i;:::-;47317:14;47327:4;47317:14;;:::i;:::-;;;46992:351;;46972:1198;;;47353:15;47349:821;;;47401:10;;47446:13;;47474:139;;;;47526:12;;47513:10;;:25;;;;:::i;:::-;47505:33;;47585:12;;47569:13;;:28;;;;:::i;:::-;47557:40;;47474:139;47631:5;47627:136;;;47678:11;;47665:10;;:24;;;;:::i;:::-;47657:32;;47736:11;;47720:13;;:27;;;;:::i;:::-;47708:39;;47627:136;47777:12;47792:26;47814:3;47792:17;:6;47803:5;47792:10;:17::i;:26::-;47777:41;;47881:5;47864:13;;47857:4;:20;;;;:::i;:::-;47856:30;;;;:::i;:::-;47833:19;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;47945:5:0;;-1:-1:-1;47925:16:0;47932:9;47925:4;:16;:::i;:::-;47924:26;;;;:::i;:::-;47901:19;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;47998:15:0;;48017:5;;47991:22;;:4;:22;:::i;:::-;47990:32;;;;:::i;:::-;47965:21;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;48043:8:0;;48039:91;;48072:42;48088:4;48102;48109;48072:15;:42::i;:::-;48144:14;48154:4;48144:14;;:::i;:::-;;;47370:800;;;47349:821;48180:33;48196:4;48202:2;48206:6;48180:15;:33::i;:::-;46815:1406;;46664:1557;;;;;:::o;3081:98::-;3139:7;3166:5;3170:1;3166;:5;:::i;3837:98::-;3895:7;3922:5;3926:1;3922;:5;:::i;50965:363::-;51079:16;;51047:63;;51064:4;;-1:-1:-1;;;;;51079:16:0;51098:11;51047:8;:63::i;:::-;51121:16;;-1:-1:-1;;;;;51121:16:0;:32;51161:9;51194:4;51214:11;51121:16;;51272:7;20633:6;;-1:-1:-1;;;;;20633:6:0;;20560:87;51272:7;51121:199;;;;;;-1:-1:-1;;;;;;51121:199:0;;;-1:-1:-1;;;;;19289:15:1;;;51121:199:0;;;19271:34:1;19321:18;;;19314:34;;;;19364:18;;;19357:34;;;;19407:18;;;19400:34;19471:15;;;19450:19;;;19443:44;51294:15:0;19503:19:1;;;19496:35;19205:19;;51121:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50965:363;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:180::-;1505:6;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;-1:-1:-1;1597:23:1;;1446:180;-1:-1:-1;1446:180:1:o;1631:316::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;-1:-1:-1;;1816:23:1;;;1886:2;1871:18;;1858:32;;-1:-1:-1;1937:2:1;1922:18;;;1909:32;;1631:316;-1:-1:-1;1631:316:1:o;1952:456::-;2029:6;2037;2045;2098:2;2086:9;2077:7;2073:23;2069:32;2066:52;;;2114:1;2111;2104:12;2066:52;2153:9;2140:23;2172:31;2197:5;2172:31;:::i;:::-;2222:5;-1:-1:-1;2279:2:1;2264:18;;2251:32;2292:33;2251:32;2292:33;:::i;:::-;1952:456;;2344:7;;-1:-1:-1;;;2398:2:1;2383:18;;;;2370:32;;1952:456::o;2602:160::-;2667:20;;2723:13;;2716:21;2706:32;;2696:60;;2752:1;2749;2742:12;2767:180;2823:6;2876:2;2864:9;2855:7;2851:23;2847:32;2844:52;;;2892:1;2889;2882:12;2844:52;2915:26;2931:9;2915:26;:::i;2952:247::-;3011:6;3064:2;3052:9;3043:7;3039:23;3035:32;3032:52;;;3080:1;3077;3070:12;3032:52;3119:9;3106:23;3138:31;3163:5;3138:31;:::i;3439:315::-;3504:6;3512;3565:2;3553:9;3544:7;3540:23;3536:32;3533:52;;;3581:1;3578;3571:12;3533:52;3620:9;3607:23;3639:31;3664:5;3639:31;:::i;:::-;3689:5;-1:-1:-1;3713:35:1;3744:2;3729:18;;3713:35;:::i;:::-;3703:45;;3439:315;;;;;:::o;4488:388::-;4556:6;4564;4617:2;4605:9;4596:7;4592:23;4588:32;4585:52;;;4633:1;4630;4623:12;4585:52;4672:9;4659:23;4691:31;4716:5;4691:31;:::i;:::-;4741:5;-1:-1:-1;4798:2:1;4783:18;;4770:32;4811:33;4770:32;4811:33;:::i;:::-;4863:7;4853:17;;;4488:388;;;;;:::o;5013:742::-;5105:6;5158:2;5146:9;5137:7;5133:23;5129:32;5126:52;;;5174:1;5171;5164:12;5126:52;5207:2;5201:9;5249:2;5241:6;5237:15;5318:6;5306:10;5303:22;5282:18;5270:10;5267:34;5264:62;5261:185;;;5368:10;5363:3;5359:20;5356:1;5349:31;5403:4;5400:1;5393:15;5431:4;5428:1;5421:15;5261:185;5462:2;5455:22;5501:23;;5486:39;;5575:2;5560:18;;5547:32;5588:31;5547:32;5588:31;:::i;:::-;5647:2;5635:15;;5628:30;5719:2;5704:18;;;5691:32;5674:15;;;5667:57;;;;-1:-1:-1;5639:6:1;5013:742;-1:-1:-1;5013:742:1:o;5760:380::-;5839:1;5835:12;;;;5882;;;5903:61;;5957:4;5949:6;5945:17;5935:27;;5903:61;6010:2;6002:6;5999:14;5979:18;5976:38;5973:161;;;6056:10;6051:3;6047:20;6044:1;6037:31;6091:4;6088:1;6081:15;6119:4;6116:1;6109:15;5973:161;;5760:380;;;:::o;6145:356::-;6347:2;6329:21;;;6366:18;;;6359:30;6425:34;6420:2;6405:18;;6398:62;6492:2;6477:18;;6145:356::o;6506:127::-;6567:10;6562:3;6558:20;6555:1;6548:31;6598:4;6595:1;6588:15;6622:4;6619:1;6612:15;6638:168;6678:7;6744:1;6740;6736:6;6732:14;6729:1;6726:21;6721:1;6714:9;6707:17;6703:45;6700:71;;;6751:18;;:::i;:::-;-1:-1:-1;6791:9:1;;6638:168::o;6811:217::-;6851:1;6877;6867:132;;6921:10;6916:3;6912:20;6909:1;6902:31;6956:4;6953:1;6946:15;6984:4;6981:1;6974:15;6867:132;-1:-1:-1;7013:9:1;;6811:217::o;7449:128::-;7489:3;7520:1;7516:6;7513:1;7510:13;7507:39;;;7526:18;;:::i;:::-;-1:-1:-1;7562:9:1;;7449:128::o;7940:251::-;8010:6;8063:2;8051:9;8042:7;8038:23;8034:32;8031:52;;;8079:1;8076;8069:12;8031:52;8111:9;8105:16;8130:31;8155:5;8130:31;:::i;8196:125::-;8236:4;8264:1;8261;8258:8;8255:34;;;8269:18;;:::i;:::-;-1:-1:-1;8306:9:1;;8196:125::o;8326:188::-;8405:13;;-1:-1:-1;;;;;8447:42:1;;8437:53;;8427:81;;8504:1;8501;8494:12;8519:450;8606:6;8614;8622;8675:2;8663:9;8654:7;8650:23;8646:32;8643:52;;;8691:1;8688;8681:12;8643:52;8714:40;8744:9;8714:40;:::i;:::-;8704:50;;8773:49;8818:2;8807:9;8803:18;8773:49;:::i;:::-;8763:59;;8865:2;8854:9;8850:18;8844:25;8909:10;8902:5;8898:22;8891:5;8888:33;8878:61;;8935:1;8932;8925:12;8878:61;8958:5;8948:15;;;8519:450;;;;;:::o;8974:179::-;9052:13;;9105:22;9094:34;;9084:45;;9074:73;;9143:1;9140;9133:12;9158:473;9261:6;9269;9277;9285;9293;9346:3;9334:9;9325:7;9321:23;9317:33;9314:53;;;9363:1;9360;9353:12;9314:53;9386:39;9415:9;9386:39;:::i;:::-;9376:49;;9465:2;9454:9;9450:18;9444:25;9434:35;;9509:2;9498:9;9494:18;9488:25;9478:35;;9553:2;9542:9;9538:18;9532:25;9522:35;;9576:49;9620:3;9609:9;9605:19;9576:49;:::i;:::-;9566:59;;9158:473;;;;;;;;:::o;9636:273::-;9704:6;9757:2;9745:9;9736:7;9732:23;9728:32;9725:52;;;9773:1;9770;9763:12;9725:52;9805:9;9799:16;9855:4;9848:5;9844:16;9837:5;9834:27;9824:55;;9875:1;9872;9865:12;9914:422;10003:1;10046:5;10003:1;10060:270;10081:7;10071:8;10068:21;10060:270;;;10140:4;10136:1;10132:6;10128:17;10122:4;10119:27;10116:53;;;10149:18;;:::i;:::-;10199:7;10189:8;10185:22;10182:55;;;10219:16;;;;10182:55;10298:22;;;;10258:15;;;;10060:270;;;10064:3;9914:422;;;;;:::o;10341:806::-;10390:5;10420:8;10410:80;;-1:-1:-1;10461:1:1;10475:5;;10410:80;10509:4;10499:76;;-1:-1:-1;10546:1:1;10560:5;;10499:76;10591:4;10609:1;10604:59;;;;10677:1;10672:130;;;;10584:218;;10604:59;10634:1;10625:10;;10648:5;;;10672:130;10709:3;10699:8;10696:17;10693:43;;;10716:18;;:::i;:::-;-1:-1:-1;;10772:1:1;10758:16;;10787:5;;10584:218;;10886:2;10876:8;10873:16;10867:3;10861:4;10858:13;10854:36;10848:2;10838:8;10835:16;10830:2;10824:4;10821:12;10817:35;10814:77;10811:159;;;-1:-1:-1;10923:19:1;;;10955:5;;10811:159;11002:34;11027:8;11021:4;11002:34;:::i;:::-;11072:6;11068:1;11064:6;11060:19;11051:7;11048:32;11045:58;;;11083:18;;:::i;:::-;11121:20;;10341:806;-1:-1:-1;;;10341:806:1:o;11152:131::-;11212:5;11241:36;11268:8;11262:4;11241:36;:::i;15151:401::-;15353:2;15335:21;;;15392:2;15372:18;;;15365:30;15431:34;15426:2;15411:18;;15404:62;-1:-1:-1;;;15497:2:1;15482:18;;15475:35;15542:3;15527:19;;15151:401::o;15557:399::-;15759:2;15741:21;;;15798:2;15778:18;;;15771:30;15837:34;15832:2;15817:18;;15810:62;-1:-1:-1;;;15903:2:1;15888:18;;15881:33;15946:3;15931:19;;15557:399::o;17082:127::-;17143:10;17138:3;17134:20;17131:1;17124:31;17174:4;17171:1;17164:15;17198:4;17195:1;17188:15;17214:980;17476:4;17524:3;17513:9;17509:19;17555:6;17544:9;17537:25;17581:2;17619:6;17614:2;17603:9;17599:18;17592:34;17662:3;17657:2;17646:9;17642:18;17635:31;17686:6;17721;17715:13;17752:6;17744;17737:22;17790:3;17779:9;17775:19;17768:26;;17829:2;17821:6;17817:15;17803:29;;17850:1;17860:195;17874:6;17871:1;17868:13;17860:195;;;17939:13;;-1:-1:-1;;;;;17935:39:1;17923:52;;18030:15;;;;17995:12;;;;17971:1;17889:9;17860:195;;;-1:-1:-1;;;;;;;18111:32:1;;;;18106:2;18091:18;;18084:60;-1:-1:-1;;;18175:3:1;18160:19;18153:35;18072:3;17214:980;-1:-1:-1;;;17214:980:1:o;19542:306::-;19630:6;19638;19646;19699:2;19687:9;19678:7;19674:23;19670:32;19667:52;;;19715:1;19712;19705:12;19667:52;19744:9;19738:16;19728:26;;19794:2;19783:9;19779:18;19773:25;19763:35;;19838:2;19827:9;19823:18;19817:25;19807:35;;19542:306;;;;;:::o

Swarm Source

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