ETH Price: $3,205.00 (+5.15%)

Token

ElonsPets (ELP)
 

Overview

Max Total Supply

1,000,000,000,000 ELP

Holders

230

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
518,605.836094584741997006 ELP

Value
$0.00
0xc7e86e9443e4a342b4415aacd9dbbe4ce16967fd
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:
ElonsPets

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/*
TG: https://t.me/ElonsPets
*/

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

    function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
    uint256 c = add(a,m);
    uint256 d = sub(c,1);
    return mul(div(d,m),m);
  }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}


contract ElonsPets is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "ElonsPets";
    string private _symbol = "ELP";
    uint256 private _decimals = 18;

    mapping(address => uint256) internal _reflectionBalance;
    mapping(address => uint256) internal _tokenBalance;
    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tokenTotal = 1_000_000_000_000*(10**decimals());
    uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal));

    mapping(address => bool) isTaxless;
    mapping(address => bool) internal _isExcluded;
    address[] internal _excluded;
    mapping(address => bool) internal _excludedFromMaxWallet;

    mapping(address => bool) internal _bots;

    uint256 public _feeDecimal = 0; // do not change this value...
    uint256 public _taxFee = 2; // means 2% which distribute to all holders
    uint256 public _liquidityFee = 8; // means 8% adds to liquidity on each buy and sell
    uint256 public _burnFee = 0; // 0% burn fee however burn wallet receives redistribution 


    address liquidityWallet=0x1146753a51d987212C4929ECa7138418e457BaAD;
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public _taxFeeTotal;
    uint256 public _burnFeeTotal;
    uint256 public _liquidityFeeTotal;

    bool public isFeeActive = true; // should be true
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public maxWalletAmount = 20_000_000_000*(10**decimals()) ; // 2%
    uint256 public minTokensBeforeSwap = 10_000_000*(10**decimals());

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived, uint256 tokensIntoLiqudity);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

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

        setExcludedFromMaxWallet(owner(), true);
        setExcludedFromMaxWallet(address(this), true);
        setExcludedFromMaxWallet(address(uniswapV2Pair), true);
        setExcludedFromMaxWallet(address(uniswapV2Router), true);
        setExcludedFromMaxWallet(liquidityWallet, true);

        // exlcude pair address from tax rewards
        _isExcluded[address(uniswapV2Pair)] = true;
        _excluded.push(address(uniswapV2Pair));

        _reflectionBalance[owner()] = _reflectionTotal;
        emit Transfer(address(0),owner(), _tokenTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint256) {
        return _decimals;
    }

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

    function balanceOf(address account) public override view returns (uint256) {
        if (_isExcluded[account]) return _tokenBalance[account];
        return tokenFromReflection(_reflectionBalance[account]);
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        virtual
        returns (bool)
    {
       _transfer(_msgSender(),recipient,amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override virtual returns (bool) {
        _transfer(sender,recipient,amount);

        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub( amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tokenAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tokenAmount <= _tokenTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            return tokenAmount.mul(_getReflectionRate());
        } else {
            return
                tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul(
                    _getReflectionRate()
                );
        }
    }

    function tokenFromReflection(uint256 reflectionAmount)
        public
        view
        returns (uint256)
    {
        require(
            reflectionAmount <= _reflectionTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getReflectionRate();
        return reflectionAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(
            account != address(uniswapV2Router),
            "ERC20: We can not exclude Uniswap router."
        );
        require(!_isExcluded[account], "ERC20: Account is already excluded");
        if (_reflectionBalance[account] > 0) {
            _tokenBalance[account] = tokenFromReflection(
                _reflectionBalance[account]
            );
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "ERC20: Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tokenBalance[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!_excludedFromMaxWallet[recipient]) {
            require(balanceOf(recipient).add(amount) <= maxWalletAmount, "Transfer Limit Exceeds");
        }

        require(!_bots[sender], "bots cannot use token");

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
        if (!inSwapAndLiquify && overMinTokenBalance && sender != uniswapV2Pair && swapAndLiquifyEnabled) {
            swapAndLiquify(contractTokenBalance);
        }

        uint256 transferAmount = amount;
        uint256 rate = _getReflectionRate();

        if(isFeeActive && !isTaxless[sender] && !isTaxless[recipient] && !inSwapAndLiquify){

            transferAmount = collectFee(sender,transferAmount,rate);

        }

        //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));

        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);

            emit Transfer(sender, recipient, transferAmount);

        return;
        }

        emit Transfer(sender, recipient, transferAmount);

    }

    function collectFee(address account, uint256 amount, uint256 rate) private returns (uint256) {
        uint256 transferAmount = amount;

        //@dev tax fee
        if(_taxFee != 0){
            uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(taxFee);
            _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate));
            _taxFeeTotal = _taxFeeTotal.add(taxFee);
        }

        //@dev liquidity fee
        if(_liquidityFee != 0){
            uint256 liquidityFee = amount.mul(_liquidityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(liquidityFee);
            _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate));
            if(_isExcluded[address(this)]){
                _tokenBalance[address(this)] = _tokenBalance[address(this)].add(liquidityFee);
            }
            _liquidityFeeTotal = _liquidityFeeTotal.add(liquidityFee);
            emit Transfer(account,address(this),liquidityFee);
        }

        if(_burnFee != 0){
            uint256 burnFee = amount.mul(_burnFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(burnFee);
            _tokenTotal = _tokenTotal.sub(burnFee);
            _reflectionBalance[DEAD] = _reflectionBalance[DEAD].add(burnFee.mul(rate));
            if (_isExcluded[DEAD]) {
                _tokenBalance[DEAD] = _tokenBalance[DEAD].add(burnFee);
            }
            _reflectionTotal = _reflectionTotal.sub(burnFee.mul(rate));
            _burnFeeTotal = _burnFeeTotal.add(burnFee);
            emit Transfer(account,DEAD,burnFee);
        }

        return transferAmount;
    }

    function _getReflectionRate() private view returns (uint256) {
        uint256 reflectionSupply = _reflectionTotal;
        uint256 tokenSupply = _tokenTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _reflectionBalance[_excluded[i]] > reflectionSupply ||
                _tokenBalance[_excluded[i]] > tokenSupply
            ) return _reflectionTotal.div(_tokenTotal);
            reflectionSupply = reflectionSupply.sub(
                _reflectionBalance[_excluded[i]]
            );
            tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]);
        }
        if (reflectionSupply < _reflectionTotal.div(_tokenTotal))
            return _reflectionTotal.div(_tokenTotal);
        return reflectionSupply.div(tokenSupply);
    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(contractTokenBalance); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        payable(liquidityWallet).transfer(newBalance);


    }

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

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

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


    function setPair(address pair) external onlyOwner {
        uniswapV2Pair = pair;
    }

    function setTaxless(address account, bool value) external onlyOwner {
        isTaxless[account] = value;
    }

    function setExcludedFromMaxWallet(address account, bool value) public onlyOwner {
        _excludedFromMaxWallet[account] = value;
    }

    function setBots(address[] memory accounts, bool value) external onlyOwner {
        for(uint i = 0; i < accounts.length; i++) {
            _bots[accounts[i]] = value;
        }
    }

    function setSwapAndLiquifyEnabled(bool enabled) external onlyOwner {
        swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }

    function setFeeActive(bool value) external onlyOwner {
        isFeeActive = value;
    }

    function setTaxFee(uint256 fee) external onlyOwner {
        _taxFee = fee;
    }

    function setBurnFee(uint256 fee) external onlyOwner {
        _burnFee = fee;
    }

    function setLiquidityFee(uint256 fee) external onlyOwner {
        _liquidityFee = fee;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        maxWalletAmount = amount;
    }

    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }

    receive() external payable {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526009608081905268456c6f6e735065747360b81b60a09081526200002c9160019190620005c7565b50604080518082019091526003808252620454c560ec1b60209092019182526200005991600291620005c7565b50601260038190556200006e90600a620006e6565b6200007f9064e8d4a51000620007a4565b600781905562000092906000196200081d565b620000a090600019620007c6565b60089081556000600e8190556002600f5560109190915560115560128054731146753a51d987212c4929eca7138418e457baad6001600160a01b0319918216179091556013805461dead92169190911790556017805462ff00ff1916620100011790556003546200011390600a620006e6565b62000124906404a817c800620007a4565b6018556003546200013790600a620006e6565b620001469062989680620007a4565b6019553480156200015657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001eb57600080fd5b505afa15801562000200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022691906200066d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026f57600080fd5b505afa15801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa91906200066d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f357600080fd5b505af115801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e91906200066d565b601b80546001600160a01b03199081166001600160a01b0393841617909155601a8054909116918316919091179055600160096000620003766000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620003d5620003cd6000546001600160a01b031690565b60016200053d565b620003e23060016200053d565b601b54620003fb906001600160a01b031660016200053d565b601a5462000414906001600160a01b031660016200053d565b6012546200042d906001600160a01b031660016200053d565b601b80546001600160a01b039081166000908152600a60205260408120805460ff191660019081179091559254600b8054948501815582527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990930180546001600160a01b0319169390921692909217905560085490600490620004b96000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004e66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200052e91815260200190565b60405180910390a35062000854565b6000546001600160a01b031633146200059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b828054620005d590620007e0565b90600052602060002090601f016020900481019282620005f9576000855562000644565b82601f106200061457805160ff191683800117855562000644565b8280016001018555821562000644579182015b828111156200064457825182559160200191906001019062000627565b506200065292915062000656565b5090565b5b8082111562000652576000815560010162000657565b6000602082840312156200067f578081fd5b81516001600160a01b038116811462000696578182fd5b9392505050565b600181815b80851115620006de578160001904821115620006c257620006c26200083e565b80851615620006d057918102915b93841c9390800290620006a2565b509250929050565b6000620006968383600082620006ff575060016200079e565b816200070e575060006200079e565b8160018114620007275760028114620007325762000752565b60019150506200079e565b60ff8411156200074657620007466200083e565b50506001821b6200079e565b5060208310610133831016604e8410600b841016171562000777575081810a6200079e565b6200078383836200069d565b80600019048211156200079a576200079a6200083e565b0290505b92915050565b6000816000190483118215151615620007c157620007c16200083e565b500290565b600082821015620007db57620007db6200083e565b500390565b600181811c90821680620007f557607f821691505b602082108114156200081757634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200083957634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61277480620008646000396000f3fe6080604052600436106102605760003560e01c80636bc87c3a11610144578063b7bfff65116100b6578063dd62ed3e1161007a578063dd62ed3e146106ea578063e43504da14610730578063e5d41c6b1461074a578063f2cc0c1814610760578063f2fde38b14610780578063f84354f1146107a057600080fd5b8063b7bfff651461063b578063c0b0fda21461065b578063c4081a4c14610671578063c49b9a8014610691578063cba0e996146106b157600080fd5b806395d89b411161010857806395d89b411461059a5780639c0db5f3146105af5780639d46cf8a146105cf578063a457c2d7146105e5578063a9059cbb14610605578063aa4bde281461062557600080fd5b80636bc87c3a1461051157806370a0823114610527578063715018a6146105475780638187f5161461055c5780638da5cb5b1461057c57600080fd5b8063355bc60b116101dd5780634549b039116101a15780634549b0391461045157806347f2dc5b1461047157806348a464731461049157806349bd5a5e146104b15780634a74bb02146104d15780634bf2c7c9146104f157600080fd5b8063355bc60b146103c5578063357bf15c146103db57806339509351146103fb5780633b124fe71461041b578063412201041461043157600080fd5b806319db457d1161022457806319db457d1461033857806323b872dd1461034e57806327a14fc21461036e5780632d83811914610390578063313ce567146103b057600080fd5b806306fdde031461026c578063095ea7b3146102975780630d9a5219146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107c0565b60405161028e91906123e6565b60405180910390f35b3480156102a357600080fd5b506102b76102b236600461228e565b610852565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60155481565b60405190815260200161028e565b3480156102f757600080fd5b50601a5461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506007546102dd565b34801561034457600080fd5b506102dd600e5481565b34801561035a57600080fd5b506102b761036936600461221a565b610869565b34801561037a57600080fd5b5061038e6103893660046123ac565b6108d2565b005b34801561039c57600080fd5b506102dd6103ab3660046123ac565b61090a565b3480156103bc57600080fd5b506003546102dd565b3480156103d157600080fd5b506102dd60145481565b3480156103e757600080fd5b5061038e6103f63660046123ac565b61098e565b34801561040757600080fd5b506102b761041636600461228e565b6109bd565b34801561042757600080fd5b506102dd600f5481565b34801561043d57600080fd5b5061038e61044c36600461225a565b6109f3565b34801561045d57600080fd5b506102dd61046c3660046123c4565b610a48565b34801561047d57600080fd5b5061038e61048c36600461225a565b610b06565b34801561049d57600080fd5b5061038e6104ac3660046123ac565b610b5b565b3480156104bd57600080fd5b50601b5461030b906001600160a01b031681565b3480156104dd57600080fd5b506017546102b79062010000900460ff1681565b3480156104fd57600080fd5b5061038e61050c3660046123ac565b610b8a565b34801561051d57600080fd5b506102dd60105481565b34801561053357600080fd5b506102dd6105423660046121aa565b610bb9565b34801561055357600080fd5b5061038e610c18565b34801561056857600080fd5b5061038e6105773660046121aa565b610c8c565b34801561058857600080fd5b506000546001600160a01b031661030b565b3480156105a657600080fd5b50610281610cd8565b3480156105bb57600080fd5b5061038e6105ca3660046122b9565b610ce7565b3480156105db57600080fd5b506102dd60165481565b3480156105f157600080fd5b506102b761060036600461228e565b610d8b565b34801561061157600080fd5b506102b761062036600461228e565b610dda565b34801561063157600080fd5b506102dd60185481565b34801561064757600080fd5b5061038e610656366004612392565b610de7565b34801561066757600080fd5b506102dd60115481565b34801561067d57600080fd5b5061038e61068c3660046123ac565b610e24565b34801561069d57600080fd5b5061038e6106ac366004612392565b610e53565b3480156106bd57600080fd5b506102b76106cc3660046121aa565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106f657600080fd5b506102dd6107053660046121e2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561073c57600080fd5b506017546102b79060ff1681565b34801561075657600080fd5b506102dd60195481565b34801561076c57600080fd5b5061038e61077b3660046121aa565b610ed3565b34801561078c57600080fd5b5061038e61079b3660046121aa565b6110a1565b3480156107ac57600080fd5b5061038e6107bb3660046121aa565b61118b565b6060600180546107cf90612637565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612637565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b600061085f338484611385565b5060015b92915050565b60006108768484846114a9565b6108c884336108c3856040518060600160405280602881526020016126d2602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611946565b611385565b5060019392505050565b6000546001600160a01b031633146109055760405162461bcd60e51b81526004016108fc90612439565b60405180910390fd5b601855565b60006008548211156109715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108fc565b600061097b611980565b90506109878382611b42565b9392505050565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016108fc90612439565b601055565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161085f9185906108c39086611b84565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000600754831115610a9c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108fc565b81610aba57610ab3610aac611980565b8490611be3565b9050610863565b610ab3610ac5611980565b610b00610af9600e54600a610ada9190612559565b610ae59060026124de565b600f54610af3908990611be3565b90611b42565b8690611c62565b90611be3565b6000546001600160a01b03163314610b305760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b855760405162461bcd60e51b81526004016108fc90612439565b601955565b6000546001600160a01b03163314610bb45760405162461bcd60e51b81526004016108fc90612439565b601155565b6001600160a01b0381166000908152600a602052604081205460ff1615610bf657506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546108639061090a565b6000546001600160a01b03163314610c425760405162461bcd60e51b81526004016108fc90612439565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb65760405162461bcd60e51b81526004016108fc90612439565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600280546107cf90612637565b6000546001600160a01b03163314610d115760405162461bcd60e51b81526004016108fc90612439565b60005b8251811015610d865781600d6000858481518110610d4257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d7e81612672565b915050610d14565b505050565b600061085f33846108c38560405180606001604052806025815260200161271a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611946565b600061085f3384846114a9565b6000546001600160a01b03163314610e115760405162461bcd60e51b81526004016108fc90612439565b6017805460ff1916911515919091179055565b6000546001600160a01b03163314610e4e5760405162461bcd60e51b81526004016108fc90612439565b600f55565b6000546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016108fc90612439565b60178054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ec890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610efd5760405162461bcd60e51b81526004016108fc90612439565b601a546001600160a01b0382811691161415610f6d5760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b60648201526084016108fc565b6001600160a01b0381166000908152600a602052604090205460ff1615610fe15760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016108fc565b6001600160a01b0381166000908152600460205260409020541561103b576001600160a01b0381166000908152600460205260409020546110219061090a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146110cb5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166111305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111b55760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166000908152600a602052604090205460ff166112285760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b60648201526084016108fc565b60005b600b5481101561138157816001600160a01b0316600b828154811061126057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561136f57600b805461128b90600190612620565b815481106112a957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600b80546001600160a01b0390921691839081106112e357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061134957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061137981612672565b91505061122b565b5050565b6001600160a01b0383166113e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fc565b6001600160a01b0382166114485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fc565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661150d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fc565b6001600160a01b03821661156f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fc565b600081116115d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108fc565b6001600160a01b0382166000908152600c602052604090205460ff1661164e576018546116078261160185610bb9565b90611b84565b111561164e5760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b60448201526064016108fc565b6001600160a01b0383166000908152600d602052604090205460ff16156116af5760405162461bcd60e51b81526020600482015260156024820152743137ba399031b0b73737ba103ab9b2903a37b5b2b760591b60448201526064016108fc565b60006116ba30610bb9565b60195460175491925082101590610100900460ff161580156116d95750805b80156116f35750601b546001600160a01b03868116911614155b8015611707575060175462010000900460ff165b156117155761171582611ca4565b826000611720611980565b60175490915060ff16801561174e57506001600160a01b03871660009081526009602052604090205460ff16155b801561177357506001600160a01b03861660009081526009602052604090205460ff16155b80156117875750601754610100900460ff16155b1561179a57611797878383611d15565b91505b6117c66117a78683611be3565b6001600160a01b03891660009081526004602052604090205490611c62565b6001600160a01b03881660009081526004602052604090205561180b6117ec8383611be3565b6001600160a01b03881660009081526004602052604090205490611b84565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600a909152205460ff161561187c576001600160a01b0387166000908152600560205260409020546118629086611c62565b6001600160a01b0388166000908152600560205260409020555b6001600160a01b0386166000908152600a602052604090205460ff1615611913576001600160a01b0386166000908152600560205260409020546118c09083611b84565b6001600160a01b0380881660008181526005602052604090819020939093559151908916906000805160206126fa833981519152906119029086815260200190565b60405180910390a350505050505050565b856001600160a01b0316876001600160a01b03166000805160206126fa8339815191528460405161190291815260200190565b6000818484111561196a5760405162461bcd60e51b81526004016108fc91906123e6565b5060006119778486612620565b95945050505050565b60085460075460009190825b600b54811015611b0f578260046000600b84815481106119bc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a3557508160056000600b8481548110611a0e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a5157600754600854611a4991611b42565b935050505090565b611aa560046000600b8481548110611a7957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c62565b9250611afb60056000600b8481548110611acf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c62565b915080611b0781612672565b91505061198c565b50600754600854611b1f91611b42565b821015611b3c57600754600854611b3591611b42565b9250505090565b611b3582825b600061098783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fd7565b600080611b9183856124de565b9050838110156109875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108fc565b600082611bf257506000610863565b6000611bfe8385612601565b905082611c0b85836124f6565b146109875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108fc565b600061098783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611946565b6017805461ff00191661010017905547611cbd82612005565b6000611cc94783611c62565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611d04573d6000803e3d6000fd5b50506017805461ff00191690555050565b600f54600090839015611d88576000611d4f600e546002611d3691906124de565b611d4190600a612559565b600f54610af3908890611be3565b9050611d5b8282611c62565b9150611d73611d6a8286611be3565b60085490611c62565b600855601454611d839082611b84565b601455505b60105415611e7d576000611dbd600e546002611da491906124de565b611daf90600a612559565b601054610af3908890611be3565b9050611dc98282611c62565b9150611dee611dd88286611be3565b3060009081526004602052604090205490611b84565b30600090815260046020908152604080832093909355600a9052205460ff1615611e3d5730600090815260056020526040902054611e2c9082611b84565b306000908152600560205260409020555b601654611e4a9082611b84565b60165560405181815230906001600160a01b038816906000805160206126fa8339815191529060200160405180910390a3505b60115415611fcf576000611eb2600e546002611e9991906124de565b611ea490600a612559565b601154610af3908890611be3565b9050611ebe8282611c62565b600754909250611ece9082611c62565b600755611eff611ede8286611be3565b6013546001600160a01b031660009081526004602052604090205490611b84565b601380546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600a909152205460ff1615611f7a576013546001600160a01b0316600090815260056020526040902054611f5e9082611b84565b6013546001600160a01b03166000908152600560205260409020555b611f87611d6a8286611be3565b600855601554611f979082611b84565b6015556013546040518281526001600160a01b03918216918816906000805160206126fa8339815191529060200160405180910390a3505b949350505050565b60008183611ff85760405162461bcd60e51b81526004016108fc91906123e6565b50600061197784866124f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061204857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561209c57600080fd5b505afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d491906121c6565b816001815181106120f557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601a5461211b9130911684611385565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061215490859060009086903090429060040161246e565b600060405180830381600087803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b505050505050565b8035612195816126b9565b919050565b8035801515811461219557600080fd5b6000602082840312156121bb578081fd5b8135610987816126b9565b6000602082840312156121d7578081fd5b8151610987816126b9565b600080604083850312156121f4578081fd5b82356121ff816126b9565b9150602083013561220f816126b9565b809150509250929050565b60008060006060848603121561222e578081fd5b8335612239816126b9565b92506020840135612249816126b9565b929592945050506040919091013590565b6000806040838503121561226c578182fd5b8235612277816126b9565b91506122856020840161219a565b90509250929050565b600080604083850312156122a0578182fd5b82356122ab816126b9565b946020939093013593505050565b600080604083850312156122cb578182fd5b823567ffffffffffffffff808211156122e2578384fd5b818501915085601f8301126122f5578384fd5b8135602082821115612309576123096126a3565b8160051b604051601f19603f8301168101818110868211171561232e5761232e6126a3565b604052838152828101945085830182870184018b101561234c578889fd5b8896505b84871015612375576123618161218a565b865260019690960195948301948301612350565b509650612385905087820161219a565b9450505050509250929050565b6000602082840312156123a3578081fd5b6109878261219a565b6000602082840312156123bd578081fd5b5035919050565b600080604083850312156123d6578182fd5b823591506122856020840161219a565b6000602080835283518082850152825b81811015612412578581018301518582016040015282016123f6565b818111156124235783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124bd5784516001600160a01b031683529383019391830191600101612498565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156124f1576124f161268d565b500190565b60008261251157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156125515781600019048211156125375761253761268d565b8085161561254457918102915b93841c939080029061251b565b509250929050565b6000610987838360008261256f57506001610863565b8161257c57506000610863565b8160018114612592576002811461259c576125b8565b6001915050610863565b60ff8411156125ad576125ad61268d565b50506001821b610863565b5060208310610133831016604e8410600b84101617156125db575081810a610863565b6125e58383612516565b80600019048211156125f9576125f961268d565b029392505050565b600081600019048311821515161561261b5761261b61268d565b500290565b6000828210156126325761263261268d565b500390565b600181811c9082168061264b57607f821691505b6020821081141561266c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126865761268661268d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146126ce57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b0daa460ac1abed9a1b37accf6de4d5de9ff229984c7243d4da1426e0db29f4864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80636bc87c3a11610144578063b7bfff65116100b6578063dd62ed3e1161007a578063dd62ed3e146106ea578063e43504da14610730578063e5d41c6b1461074a578063f2cc0c1814610760578063f2fde38b14610780578063f84354f1146107a057600080fd5b8063b7bfff651461063b578063c0b0fda21461065b578063c4081a4c14610671578063c49b9a8014610691578063cba0e996146106b157600080fd5b806395d89b411161010857806395d89b411461059a5780639c0db5f3146105af5780639d46cf8a146105cf578063a457c2d7146105e5578063a9059cbb14610605578063aa4bde281461062557600080fd5b80636bc87c3a1461051157806370a0823114610527578063715018a6146105475780638187f5161461055c5780638da5cb5b1461057c57600080fd5b8063355bc60b116101dd5780634549b039116101a15780634549b0391461045157806347f2dc5b1461047157806348a464731461049157806349bd5a5e146104b15780634a74bb02146104d15780634bf2c7c9146104f157600080fd5b8063355bc60b146103c5578063357bf15c146103db57806339509351146103fb5780633b124fe71461041b578063412201041461043157600080fd5b806319db457d1161022457806319db457d1461033857806323b872dd1461034e57806327a14fc21461036e5780632d83811914610390578063313ce567146103b057600080fd5b806306fdde031461026c578063095ea7b3146102975780630d9a5219146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107c0565b60405161028e91906123e6565b60405180910390f35b3480156102a357600080fd5b506102b76102b236600461228e565b610852565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60155481565b60405190815260200161028e565b3480156102f757600080fd5b50601a5461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506007546102dd565b34801561034457600080fd5b506102dd600e5481565b34801561035a57600080fd5b506102b761036936600461221a565b610869565b34801561037a57600080fd5b5061038e6103893660046123ac565b6108d2565b005b34801561039c57600080fd5b506102dd6103ab3660046123ac565b61090a565b3480156103bc57600080fd5b506003546102dd565b3480156103d157600080fd5b506102dd60145481565b3480156103e757600080fd5b5061038e6103f63660046123ac565b61098e565b34801561040757600080fd5b506102b761041636600461228e565b6109bd565b34801561042757600080fd5b506102dd600f5481565b34801561043d57600080fd5b5061038e61044c36600461225a565b6109f3565b34801561045d57600080fd5b506102dd61046c3660046123c4565b610a48565b34801561047d57600080fd5b5061038e61048c36600461225a565b610b06565b34801561049d57600080fd5b5061038e6104ac3660046123ac565b610b5b565b3480156104bd57600080fd5b50601b5461030b906001600160a01b031681565b3480156104dd57600080fd5b506017546102b79062010000900460ff1681565b3480156104fd57600080fd5b5061038e61050c3660046123ac565b610b8a565b34801561051d57600080fd5b506102dd60105481565b34801561053357600080fd5b506102dd6105423660046121aa565b610bb9565b34801561055357600080fd5b5061038e610c18565b34801561056857600080fd5b5061038e6105773660046121aa565b610c8c565b34801561058857600080fd5b506000546001600160a01b031661030b565b3480156105a657600080fd5b50610281610cd8565b3480156105bb57600080fd5b5061038e6105ca3660046122b9565b610ce7565b3480156105db57600080fd5b506102dd60165481565b3480156105f157600080fd5b506102b761060036600461228e565b610d8b565b34801561061157600080fd5b506102b761062036600461228e565b610dda565b34801561063157600080fd5b506102dd60185481565b34801561064757600080fd5b5061038e610656366004612392565b610de7565b34801561066757600080fd5b506102dd60115481565b34801561067d57600080fd5b5061038e61068c3660046123ac565b610e24565b34801561069d57600080fd5b5061038e6106ac366004612392565b610e53565b3480156106bd57600080fd5b506102b76106cc3660046121aa565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106f657600080fd5b506102dd6107053660046121e2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561073c57600080fd5b506017546102b79060ff1681565b34801561075657600080fd5b506102dd60195481565b34801561076c57600080fd5b5061038e61077b3660046121aa565b610ed3565b34801561078c57600080fd5b5061038e61079b3660046121aa565b6110a1565b3480156107ac57600080fd5b5061038e6107bb3660046121aa565b61118b565b6060600180546107cf90612637565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612637565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b600061085f338484611385565b5060015b92915050565b60006108768484846114a9565b6108c884336108c3856040518060600160405280602881526020016126d2602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611946565b611385565b5060019392505050565b6000546001600160a01b031633146109055760405162461bcd60e51b81526004016108fc90612439565b60405180910390fd5b601855565b60006008548211156109715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108fc565b600061097b611980565b90506109878382611b42565b9392505050565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016108fc90612439565b601055565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161085f9185906108c39086611b84565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000600754831115610a9c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108fc565b81610aba57610ab3610aac611980565b8490611be3565b9050610863565b610ab3610ac5611980565b610b00610af9600e54600a610ada9190612559565b610ae59060026124de565b600f54610af3908990611be3565b90611b42565b8690611c62565b90611be3565b6000546001600160a01b03163314610b305760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b855760405162461bcd60e51b81526004016108fc90612439565b601955565b6000546001600160a01b03163314610bb45760405162461bcd60e51b81526004016108fc90612439565b601155565b6001600160a01b0381166000908152600a602052604081205460ff1615610bf657506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546108639061090a565b6000546001600160a01b03163314610c425760405162461bcd60e51b81526004016108fc90612439565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb65760405162461bcd60e51b81526004016108fc90612439565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600280546107cf90612637565b6000546001600160a01b03163314610d115760405162461bcd60e51b81526004016108fc90612439565b60005b8251811015610d865781600d6000858481518110610d4257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d7e81612672565b915050610d14565b505050565b600061085f33846108c38560405180606001604052806025815260200161271a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611946565b600061085f3384846114a9565b6000546001600160a01b03163314610e115760405162461bcd60e51b81526004016108fc90612439565b6017805460ff1916911515919091179055565b6000546001600160a01b03163314610e4e5760405162461bcd60e51b81526004016108fc90612439565b600f55565b6000546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016108fc90612439565b60178054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ec890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610efd5760405162461bcd60e51b81526004016108fc90612439565b601a546001600160a01b0382811691161415610f6d5760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b60648201526084016108fc565b6001600160a01b0381166000908152600a602052604090205460ff1615610fe15760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016108fc565b6001600160a01b0381166000908152600460205260409020541561103b576001600160a01b0381166000908152600460205260409020546110219061090a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146110cb5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166111305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111b55760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166000908152600a602052604090205460ff166112285760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b60648201526084016108fc565b60005b600b5481101561138157816001600160a01b0316600b828154811061126057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561136f57600b805461128b90600190612620565b815481106112a957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600b80546001600160a01b0390921691839081106112e357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061134957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061137981612672565b91505061122b565b5050565b6001600160a01b0383166113e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fc565b6001600160a01b0382166114485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fc565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661150d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fc565b6001600160a01b03821661156f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fc565b600081116115d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108fc565b6001600160a01b0382166000908152600c602052604090205460ff1661164e576018546116078261160185610bb9565b90611b84565b111561164e5760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b60448201526064016108fc565b6001600160a01b0383166000908152600d602052604090205460ff16156116af5760405162461bcd60e51b81526020600482015260156024820152743137ba399031b0b73737ba103ab9b2903a37b5b2b760591b60448201526064016108fc565b60006116ba30610bb9565b60195460175491925082101590610100900460ff161580156116d95750805b80156116f35750601b546001600160a01b03868116911614155b8015611707575060175462010000900460ff165b156117155761171582611ca4565b826000611720611980565b60175490915060ff16801561174e57506001600160a01b03871660009081526009602052604090205460ff16155b801561177357506001600160a01b03861660009081526009602052604090205460ff16155b80156117875750601754610100900460ff16155b1561179a57611797878383611d15565b91505b6117c66117a78683611be3565b6001600160a01b03891660009081526004602052604090205490611c62565b6001600160a01b03881660009081526004602052604090205561180b6117ec8383611be3565b6001600160a01b03881660009081526004602052604090205490611b84565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600a909152205460ff161561187c576001600160a01b0387166000908152600560205260409020546118629086611c62565b6001600160a01b0388166000908152600560205260409020555b6001600160a01b0386166000908152600a602052604090205460ff1615611913576001600160a01b0386166000908152600560205260409020546118c09083611b84565b6001600160a01b0380881660008181526005602052604090819020939093559151908916906000805160206126fa833981519152906119029086815260200190565b60405180910390a350505050505050565b856001600160a01b0316876001600160a01b03166000805160206126fa8339815191528460405161190291815260200190565b6000818484111561196a5760405162461bcd60e51b81526004016108fc91906123e6565b5060006119778486612620565b95945050505050565b60085460075460009190825b600b54811015611b0f578260046000600b84815481106119bc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a3557508160056000600b8481548110611a0e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a5157600754600854611a4991611b42565b935050505090565b611aa560046000600b8481548110611a7957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c62565b9250611afb60056000600b8481548110611acf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c62565b915080611b0781612672565b91505061198c565b50600754600854611b1f91611b42565b821015611b3c57600754600854611b3591611b42565b9250505090565b611b3582825b600061098783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fd7565b600080611b9183856124de565b9050838110156109875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108fc565b600082611bf257506000610863565b6000611bfe8385612601565b905082611c0b85836124f6565b146109875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108fc565b600061098783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611946565b6017805461ff00191661010017905547611cbd82612005565b6000611cc94783611c62565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611d04573d6000803e3d6000fd5b50506017805461ff00191690555050565b600f54600090839015611d88576000611d4f600e546002611d3691906124de565b611d4190600a612559565b600f54610af3908890611be3565b9050611d5b8282611c62565b9150611d73611d6a8286611be3565b60085490611c62565b600855601454611d839082611b84565b601455505b60105415611e7d576000611dbd600e546002611da491906124de565b611daf90600a612559565b601054610af3908890611be3565b9050611dc98282611c62565b9150611dee611dd88286611be3565b3060009081526004602052604090205490611b84565b30600090815260046020908152604080832093909355600a9052205460ff1615611e3d5730600090815260056020526040902054611e2c9082611b84565b306000908152600560205260409020555b601654611e4a9082611b84565b60165560405181815230906001600160a01b038816906000805160206126fa8339815191529060200160405180910390a3505b60115415611fcf576000611eb2600e546002611e9991906124de565b611ea490600a612559565b601154610af3908890611be3565b9050611ebe8282611c62565b600754909250611ece9082611c62565b600755611eff611ede8286611be3565b6013546001600160a01b031660009081526004602052604090205490611b84565b601380546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600a909152205460ff1615611f7a576013546001600160a01b0316600090815260056020526040902054611f5e9082611b84565b6013546001600160a01b03166000908152600560205260409020555b611f87611d6a8286611be3565b600855601554611f979082611b84565b6015556013546040518281526001600160a01b03918216918816906000805160206126fa8339815191529060200160405180910390a3505b949350505050565b60008183611ff85760405162461bcd60e51b81526004016108fc91906123e6565b50600061197784866124f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061204857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561209c57600080fd5b505afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d491906121c6565b816001815181106120f557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601a5461211b9130911684611385565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061215490859060009086903090429060040161246e565b600060405180830381600087803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b505050505050565b8035612195816126b9565b919050565b8035801515811461219557600080fd5b6000602082840312156121bb578081fd5b8135610987816126b9565b6000602082840312156121d7578081fd5b8151610987816126b9565b600080604083850312156121f4578081fd5b82356121ff816126b9565b9150602083013561220f816126b9565b809150509250929050565b60008060006060848603121561222e578081fd5b8335612239816126b9565b92506020840135612249816126b9565b929592945050506040919091013590565b6000806040838503121561226c578182fd5b8235612277816126b9565b91506122856020840161219a565b90509250929050565b600080604083850312156122a0578182fd5b82356122ab816126b9565b946020939093013593505050565b600080604083850312156122cb578182fd5b823567ffffffffffffffff808211156122e2578384fd5b818501915085601f8301126122f5578384fd5b8135602082821115612309576123096126a3565b8160051b604051601f19603f8301168101818110868211171561232e5761232e6126a3565b604052838152828101945085830182870184018b101561234c578889fd5b8896505b84871015612375576123618161218a565b865260019690960195948301948301612350565b509650612385905087820161219a565b9450505050509250929050565b6000602082840312156123a3578081fd5b6109878261219a565b6000602082840312156123bd578081fd5b5035919050565b600080604083850312156123d6578182fd5b823591506122856020840161219a565b6000602080835283518082850152825b81811015612412578581018301518582016040015282016123f6565b818111156124235783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124bd5784516001600160a01b031683529383019391830191600101612498565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156124f1576124f161268d565b500190565b60008261251157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156125515781600019048211156125375761253761268d565b8085161561254457918102915b93841c939080029061251b565b509250929050565b6000610987838360008261256f57506001610863565b8161257c57506000610863565b8160018114612592576002811461259c576125b8565b6001915050610863565b60ff8411156125ad576125ad61268d565b50506001821b610863565b5060208310610133831016604e8410600b84101617156125db575081810a610863565b6125e58383612516565b80600019048211156125f9576125f961268d565b029392505050565b600081600019048311821515161561261b5761261b61268d565b500290565b6000828210156126325761263261268d565b500390565b600181811c9082168061264b57607f821691505b6020821081141561266c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126865761268661268d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146126ce57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b0daa460ac1abed9a1b37accf6de4d5de9ff229984c7243d4da1426e0db29f4864736f6c63430008040033

Deployed Bytecode Sourcemap

20093:15034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23168:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24190:193;;;;;;;;;;-1:-1:-1;24190:193:0;;;;;:::i;:::-;;:::i;:::-;;;4658:14:1;;4651:22;4633:41;;4621:2;4606:18;24190:193:0;4588:92:1;21467:28:0;;;;;;;;;;;;;;;;;;;11915:25:1;;;11903:2;11888:18;21467:28:0;11870:76:1;21835:42:0;;;;;;;;;;-1:-1:-1;21835:42:0;;;;-1:-1:-1;;;;;21835:42:0;;;;;;-1:-1:-1;;;;;4449:32:1;;;4431:51;;4419:2;4404:18;21835:42:0;4386:102:1;23447:99:0;;;;;;;;;;-1:-1:-1;23527:11:0;;23447:99;;20961:30;;;;;;;;;;;;;;;;24391:353;;;;;;;;;;-1:-1:-1;24391:353:0;;;;;:::i;:::-;;:::i;34859:106::-;;;;;;;;;;-1:-1:-1;34859:106:0;;;;;:::i;:::-;;:::i;:::-;;26114:368;;;;;;;;;;-1:-1:-1;26114:368:0;;;;;:::i;:::-;;:::i;23354:85::-;;;;;;;;;;-1:-1:-1;23422:9:0;;23354:85;;21433:27;;;;;;;;;;;;;;;;34756:95;;;;;;;;;;-1:-1:-1;34756:95:0;;;;;:::i;:::-;;:::i;24752:300::-;;;;;;;;;;-1:-1:-1;24752:300:0;;;;;:::i;:::-;;:::i;21029:26::-;;;;;;;;;;;;;;;;33953:138;;;;;;;;;;-1:-1:-1;33953:138:0;;;;;:::i;:::-;;:::i;25586:520::-;;;;;;;;;;-1:-1:-1;25586:520:0;;;;;:::i;:::-;;:::i;33832:113::-;;;;;;;;;;-1:-1:-1;33832:113:0;;;;;:::i;:::-;;:::i;34973:114::-;;;;;;;;;;-1:-1:-1;34973:114:0;;;;;:::i;:::-;;:::i;21884:29::-;;;;;;;;;;-1:-1:-1;21884:29:0;;;;-1:-1:-1;;;;;21884:29:0;;;21635:40;;;;;;;;;;-1:-1:-1;21635:40:0;;;;;;;;;;;34663:85;;;;;;;;;;-1:-1:-1;34663:85:0;;;;;:::i;:::-;;:::i;21106:32::-;;;;;;;;;;;;;;;;23554:215;;;;;;;;;;-1:-1:-1;23554:215:0;;;;;:::i;:::-;;:::i;17652:148::-;;;;;;;;;;;;;:::i;33735:89::-;;;;;;;;;;-1:-1:-1;33735:89:0;;;;;:::i;:::-;;:::i;17010:79::-;;;;;;;;;;-1:-1:-1;17048:7:0;17075:6;-1:-1:-1;;;;;17075:6:0;17010:79;;23259:87;;;;;;;;;;;;;:::i;34099:188::-;;;;;;;;;;-1:-1:-1;34099:188:0;;;;;:::i;:::-;;:::i;21502:33::-;;;;;;;;;;;;;;;;25060:400;;;;;;;;;;-1:-1:-1;25060:400:0;;;;;:::i;:::-;;:::i;23777:213::-;;;;;;;;;;-1:-1:-1;23777:213:0;;;;;:::i;:::-;;:::i;21684:64::-;;;;;;;;;;;;;;;;34473:91;;;;;;;;;;-1:-1:-1;34473:91:0;;;;;:::i;:::-;;:::i;21196:27::-;;;;;;;;;;;;;;;;34572:83;;;;;;;;;;-1:-1:-1;34572:83:0;;;;;:::i;:::-;;:::i;34295:170::-;;;;;;;;;;-1:-1:-1;34295:170:0;;;;;:::i;:::-;;:::i;25468:110::-;;;;;;;;;;-1:-1:-1;25468:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;25550:20:0;25526:4;25550:20;;;:11;:20;;;;;;;;;25468:110;23998:184;;;;;;;;;;-1:-1:-1;23998:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;24147:18:0;;;24115:7;24147:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23998:184;21544:30;;;;;;;;;;-1:-1:-1;21544:30:0;;;;;;;;21762:64;;;;;;;;;;;;;;;;26490:537;;;;;;;;;;-1:-1:-1;26490:537:0;;;;;:::i;:::-;;:::i;17955:281::-;;;;;;;;;;-1:-1:-1;17955:281:0;;;;;:::i;:::-;;:::i;27035:491::-;;;;;;;;;;-1:-1:-1;27035:491:0;;;;;:::i;:::-;;:::i;23168:83::-;23205:13;23238:5;23231:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23168:83;:::o;24190:193::-;24292:4;24314:39;723:10;24337:7;24346:6;24314:8;:39::i;:::-;-1:-1:-1;24371:4:0;24190:193;;;;;:::o;24391:353::-;24531:4;24548:34;24558:6;24565:9;24575:6;24548:9;:34::i;:::-;24595:119;24604:6;723:10;24624:89;24663:6;24624:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24624:19:0;;;;;;:11;:19;;;;;;;;723:10;24624:33;;;;;;;;;;:37;:89::i;:::-;24595:8;:119::i;:::-;-1:-1:-1;24732:4:0;24391:353;;;;;:::o;34859:106::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;;;;;;;;;34933:15:::1;:24:::0;34859:106::o;26114:368::-;26217:7;26284:16;;26264;:36;;26242:128;;;;-1:-1:-1;;;26242:128:0;;6536:2:1;26242:128:0;;;6518:21:1;6575:2;6555:18;;;6548:30;6614:34;6594:18;;;6587:62;-1:-1:-1;;;6665:18:1;;;6658:40;6715:19;;26242:128:0;6508:232:1;26242:128:0;26381:19;26403:20;:18;:20::i;:::-;26381:42;-1:-1:-1;26441:33:0;:16;26381:42;26441:20;:33::i;:::-;26434:40;26114:368;-1:-1:-1;;;26114:368:0:o;34756:95::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;34824:13:::1;:19:::0;34756:95::o;24752:300::-;723:10;24867:4;24961:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24961:34:0;;;;;;;;;;24867:4;;24889:133;;24939:7;;24961:50;;25000:10;24961:38;:50::i;33953:138::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34044:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:39;;-1:-1:-1;;34044:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33953:138::o;25586:520::-;25708:7;25756:11;;25741;:26;;25733:70;;;;-1:-1:-1;;;25733:70:0;;8464:2:1;25733:70:0;;;8446:21:1;8503:2;8483:18;;;8476:30;8542:33;8522:18;;;8515:61;8593:18;;25733:70:0;8436:181:1;25733:70:0;25819:17;25814:285;;25860:37;25876:20;:18;:20::i;:::-;25860:11;;:15;:37::i;:::-;25853:44;;;;25814:285;25954:133;26048:20;:18;:20::i;:::-;25954:67;25970:50;26004:11;;25999:2;:16;;;;:::i;:::-;:20;;26018:1;25999:20;:::i;:::-;25986:7;;25970:24;;:11;;:15;:24::i;:::-;:28;;:50::i;:::-;25954:11;;:15;:67::i;:::-;:71;;:133::i;33832:113::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33911:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;33911:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33832:113::o;34973:114::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;35051:19:::1;:28:::0;34973:114::o;34663:85::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;34726:8:::1;:14:::0;34663:85::o;23554:215::-;-1:-1:-1;;;;;23644:20:0;;23620:7;23644:20;;;:11;:20;;;;;;;;23640:55;;;-1:-1:-1;;;;;;23673:22:0;;;;;:13;:22;;;;;;;23554:215::o;23640:55::-;-1:-1:-1;;;;;23733:27:0;;;;;;:18;:27;;;;;;23713:48;;:19;:48::i;17652:148::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;17759:1:::1;17743:6:::0;;17722:40:::1;::::0;-1:-1:-1;;;;;17743:6:0;;::::1;::::0;17722:40:::1;::::0;17759:1;;17722:40:::1;17790:1;17773:19:::0;;-1:-1:-1;;;;;;17773:19:0::1;::::0;;17652:148::o;33735:89::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;33796:13:::1;:20:::0;;-1:-1:-1;;;;;;33796:20:0::1;-1:-1:-1::0;;;;;33796:20:0;;;::::1;::::0;;;::::1;::::0;;33735:89::o;23259:87::-;23298:13;23331:7;23324:14;;;;;:::i;34099:188::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;34189:6:::1;34185:95;34205:8;:15;34201:1;:19;34185:95;;;34263:5;34242;:18;34248:8;34257:1;34248:11;;;;;;-1:-1:-1::0;;;34248:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;34242:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;34242:18:0;:26;;-1:-1:-1;;34242:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34222:3;::::1;::::0;::::1;:::i;:::-;;;;34185:95;;;;34099:188:::0;;:::o;25060:400::-;25180:4;25202:228;723:10;25252:7;25274:145;25331:15;25274:145;;;;;;;;;;;;;;;;;723:10;25274:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25274:34:0;;;;;;;;;;;;:38;:145::i;23777:213::-;23899:4;23920:40;723:10;23943:9;23953:6;23920:9;:40::i;34473:91::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;34537:11:::1;:19:::0;;-1:-1:-1;;34537:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34473:91::o;34572:83::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;34634:7:::1;:13:::0;34572:83::o;34295:170::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;34373:21:::1;:31:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34373:31:0;;::::1;;::::0;;34420:37:::1;::::0;::::1;::::0;::::1;::::0;34397:7;4658:14:1;4651:22;4633:41;;4621:2;4606:18;;4588:92;34420:37:0::1;;;;;;;;34295:170:::0;:::o;26490:537::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;26604:15:::1;::::0;-1:-1:-1;;;;;26585:35:0;;::::1;26604:15:::0;::::1;26585:35;;26563:126;;;::::0;-1:-1:-1;;;26563:126:0;;10347:2:1;26563:126:0::1;::::0;::::1;10329:21:1::0;10386:2;10366:18;;;10359:30;10425:34;10405:18;;;10398:62;-1:-1:-1;;;10476:18:1;;;10469:39;10525:19;;26563:126:0::1;10319:231:1::0;26563:126:0::1;-1:-1:-1::0;;;;;26709:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26708:21;26700:68;;;::::0;-1:-1:-1;;;26700:68:0;;6133:2:1;26700:68:0::1;::::0;::::1;6115:21:1::0;6172:2;6152:18;;;6145:30;6211:34;6191:18;;;6184:62;-1:-1:-1;;;6262:18:1;;;6255:32;6304:19;;26700:68:0::1;6105:224:1::0;26700:68:0::1;-1:-1:-1::0;;;;;26783:27:0;::::1;26813:1;26783:27:::0;;;:18:::1;:27;::::0;;;;;:31;26779:169:::1;;-1:-1:-1::0;;;;;26894:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;26856:80:::1;::::0;:19:::1;:80::i;:::-;-1:-1:-1::0;;;;;26831:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:105;26779:169:::1;-1:-1:-1::0;;;;;26958:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26958:27:0::1;26981:4;26958:27:::0;;::::1;::::0;;;26996:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26996:23:0::1;::::0;;::::1;::::0;;26490:537::o;17955:281::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18058:22:0;::::1;18036:110;;;::::0;-1:-1:-1;;;18036:110:0;;6947:2:1;18036:110:0::1;::::0;::::1;6929:21:1::0;6986:2;6966:18;;;6959:30;7025:34;7005:18;;;6998:62;-1:-1:-1;;;7076:18:1;;;7069:36;7122:19;;18036:110:0::1;6919:228:1::0;18036:110:0::1;18183:6;::::0;;18162:38:::1;::::0;-1:-1:-1;;;;;18162:38:0;;::::1;::::0;18183:6;::::1;::::0;18162:38:::1;::::0;::::1;18211:6;:17:::0;;-1:-1:-1;;;;;;18211:17:0::1;-1:-1:-1::0;;;;;18211:17:0;;;::::1;::::0;;;::::1;::::0;;17955:281::o;27035:491::-;17222:6;;-1:-1:-1;;;;;17222:6:0;723:10;17222:22;17214:67;;;;-1:-1:-1;;;17214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27116:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27108:67;;;::::0;-1:-1:-1;;;27108:67:0;;11568:2:1;27108:67:0::1;::::0;::::1;11550:21:1::0;11607:2;11587:18;;;11580:30;11646:34;11626:18;;;11619:62;-1:-1:-1;;;11697:18:1;;;11690:32;11739:19;;27108:67:0::1;11540:224:1::0;27108:67:0::1;27191:9;27186:333;27210:9;:16:::0;27206:20;::::1;27186:333;;;27268:7;-1:-1:-1::0;;;;;27252:23:0::1;:9;27262:1;27252:12;;;;;;-1:-1:-1::0;;;27252:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27252:12:0::1;:23;27248:260;;;27311:9;27321:16:::0;;:20:::1;::::0;27340:1:::1;::::0;27321:20:::1;:::i;:::-;27311:31;;;;;;-1:-1:-1::0;;;27311:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27296:9:::1;:12:::0;;-1:-1:-1;;;;;27311:31:0;;::::1;::::0;27306:1;;27296:12;::::1;;;-1:-1:-1::0;;;27296:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27296:46:0::1;-1:-1:-1::0;;;;;27296:46:0;;::::1;;::::0;;27361:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;27406:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27406:28:0::1;::::0;;27453:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;27453:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27453:15:0;;;;;-1:-1:-1;;;;;;27453:15:0::1;::::0;;;;;27186:333:::1;27035:491:::0;:::o;27248:260::-:1;27228:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27186:333;;;;27035:491:::0;:::o;27534:371::-;-1:-1:-1;;;;;27661:19:0;;27653:68;;;;-1:-1:-1;;;27653:68:0;;11163:2:1;27653:68:0;;;11145:21:1;11202:2;11182:18;;;11175:30;11241:34;11221:18;;;11214:62;-1:-1:-1;;;11292:18:1;;;11285:34;11336:19;;27653:68:0;11135:226:1;27653:68:0;-1:-1:-1;;;;;27740:21:0;;27732:68;;;;-1:-1:-1;;;27732:68:0;;7354:2:1;27732:68:0;;;7336:21:1;7393:2;7373:18;;;7366:30;7432:34;7412:18;;;7405:62;-1:-1:-1;;;7483:18:1;;;7476:32;7525:19;;27732:68:0;7326:224:1;27732:68:0;-1:-1:-1;;;;;27813:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27865:32;;11915:25:1;;;27865:32:0;;11888:18:1;27865:32:0;;;;;;;27534:371;;;:::o;27913:1875::-;-1:-1:-1;;;;;28044:20:0;;28036:70;;;;-1:-1:-1;;;28036:70:0;;10757:2:1;28036:70:0;;;10739:21:1;10796:2;10776:18;;;10769:30;10835:34;10815:18;;;10808:62;-1:-1:-1;;;10886:18:1;;;10879:35;10931:19;;28036:70:0;10729:227:1;28036:70:0;-1:-1:-1;;;;;28125:23:0;;28117:71;;;;-1:-1:-1;;;28117:71:0;;5729:2:1;28117:71:0;;;5711:21:1;5768:2;5748:18;;;5741:30;5807:34;5787:18;;;5780:62;-1:-1:-1;;;5858:18:1;;;5851:33;5901:19;;28117:71:0;5701:225:1;28117:71:0;28216:1;28207:6;:10;28199:64;;;;-1:-1:-1;;;28199:64:0;;9937:2:1;28199:64:0;;;9919:21:1;9976:2;9956:18;;;9949:30;10015:34;9995:18;;;9988:62;-1:-1:-1;;;10066:18:1;;;10059:39;10115:19;;28199:64:0;9909:231:1;28199:64:0;-1:-1:-1;;;;;28280:33:0;;;;;;:22;:33;;;;;;;;28276:152;;28374:15;;28338:32;28363:6;28338:20;28348:9;28338;:20::i;:::-;:24;;:32::i;:::-;:51;;28330:86;;;;-1:-1:-1;;;28330:86:0;;8113:2:1;28330:86:0;;;8095:21:1;8152:2;8132:18;;;8125:30;-1:-1:-1;;;8171:18:1;;;8164:52;8233:18;;28330:86:0;8085:172:1;28330:86:0;-1:-1:-1;;;;;28449:13:0;;;;;;:5;:13;;;;;;;;28448:14;28440:48;;;;-1:-1:-1;;;28440:48:0;;8824:2:1;28440:48:0;;;8806:21:1;8863:2;8843:18;;;8836:30;-1:-1:-1;;;8882:18:1;;;8875:51;8943:18;;28440:48:0;8796:171:1;28440:48:0;28501:28;28532:24;28550:4;28532:9;:24::i;:::-;28618:19;;28653:16;;28501:55;;-1:-1:-1;28594:43:0;;;;28653:16;;;;;28652:17;:40;;;;;28673:19;28652:40;:67;;;;-1:-1:-1;28706:13:0;;-1:-1:-1;;;;;28696:23:0;;;28706:13;;28696:23;;28652:67;:92;;;;-1:-1:-1;28723:21:0;;;;;;;28652:92;28648:161;;;28761:36;28776:20;28761:14;:36::i;:::-;28846:6;28821:22;28878:20;:18;:20::i;:::-;28914:11;;28863:35;;-1:-1:-1;28914:11:0;;:33;;;;-1:-1:-1;;;;;;28930:17:0;;;;;;:9;:17;;;;;;;;28929:18;28914:33;:58;;;;-1:-1:-1;;;;;;28952:20:0;;;;;;:9;:20;;;;;;;;28951:21;28914:58;:79;;;;-1:-1:-1;28977:16:0;;;;;;;28976:17;28914:79;28911:169;;;29028:38;29039:6;29046:14;29061:4;29028:10;:38::i;:::-;29011:55;;28911:169;29152:48;29183:16;:6;29194:4;29183:10;:16::i;:::-;-1:-1:-1;;;;;29152:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;29123:26:0;;;;;;:18;:26;;;;;:77;29245:59;29279:24;:14;29298:4;29279:18;:24::i;:::-;-1:-1:-1;;;;;29245:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;29213:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;29393:19;;;;;:11;:19;;;;;;;29389:109;;;-1:-1:-1;;;;;29453:21:0;;;;;;:13;:21;;;;;;:33;;29479:6;29453:25;:33::i;:::-;-1:-1:-1;;;;;29429:21:0;;;;;;:13;:21;;;;;:57;29389:109;-1:-1:-1;;;;;29512:22:0;;;;;;:11;:22;;;;;;;;29508:210;;;-1:-1:-1;;;;;29578:24:0;;;;;;:13;:24;;;;;;:44;;29607:14;29578:28;:44::i;:::-;-1:-1:-1;;;;;29551:24:0;;;;;;;:13;:24;;;;;;;:71;;;;29644:43;;;;;;-1:-1:-1;;;;;;;;;;;29644:43:0;;;29672:14;11915:25:1;;11903:2;11888:18;;11870:76;29644:43:0;;;;;;;;29700:7;;;;27913:1875;;;:::o;29508:210::-;29752:9;-1:-1:-1;;;;;29735:43:0;29744:6;-1:-1:-1;;;;;29735:43:0;-1:-1:-1;;;;;;;;;;;29763:14:0;29735:43;;;;11915:25:1;;11903:2;11888:18;;11870:76;5558:226:0;5678:7;5714:12;5706:6;;;;5698:29;;;;-1:-1:-1;;;5698:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5738:9:0;5750:5;5754:1;5750;:5;:::i;:::-;5738:17;5558:226;-1:-1:-1;;;;;5558:226:0:o;31569:808::-;31668:16;;31717:11;;31621:7;;31668:16;31621:7;31739:458;31763:9;:16;31759:20;;31739:458;;;31858:16;31823:18;:32;31842:9;31852:1;31842:12;;;;;;-1:-1:-1;;;31842:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31842:12:0;31823:32;;;;;;;;;;;;;:51;;:113;;;31925:11;31895:13;:27;31909:9;31919:1;31909:12;;;;;;-1:-1:-1;;;31909:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31909:12:0;31895:27;;;;;;;;;;;;;:41;31823:113;31801:191;;;31980:11;;31959:16;;:33;;:20;:33::i;:::-;31952:40;;;;;31569:808;:::o;31801:191::-;32026:86;32065:18;:32;32084:9;32094:1;32084:12;;;;;;-1:-1:-1;;;32084:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32084:12:0;32065:32;;;;;;;;;;;;;32026:16;;:20;:86::i;:::-;32007:105;;32141:44;32157:13;:27;32171:9;32181:1;32171:12;;;;;;-1:-1:-1;;;32171:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32171:12:0;32157:27;;;;;;;;;;;;;32141:11;;:15;:44::i;:::-;32127:58;-1:-1:-1;31781:3:0;;;;:::i;:::-;;;;31739:458;;;-1:-1:-1;32251:11:0;;32230:16;;:33;;:20;:33::i;:::-;32211:16;:52;32207:111;;;32306:11;;32285:16;;:33;;:20;:33::i;:::-;32278:40;;;;31569:808;:::o;32207:111::-;32336:33;:16;32357:11;6990:132;7048:7;7075:39;7079:1;7082;7075:39;;;;;;;;;;;;;;;;;:3;:39::i;4655:181::-;4713:7;;4745:5;4749:1;4745;:5;:::i;:::-;4733:17;;4774:1;4769;:6;;4761:46;;;;-1:-1:-1;;;4761:46:0;;7757:2:1;4761:46:0;;;7739:21:1;7796:2;7776:18;;;7769:30;7835:29;7815:18;;;7808:57;7882:18;;4761:46:0;7729:177:1;6043:471:0;6101:7;6346:6;6342:47;;-1:-1:-1;6376:1:0;6369:8;;6342:47;6401:9;6413:5;6417:1;6413;:5;:::i;:::-;6401:17;-1:-1:-1;6446:1:0;6437:5;6441:1;6401:17;6437:5;:::i;:::-;:10;6429:56;;;;-1:-1:-1;;;6429:56:0;;9174:2:1;6429:56:0;;;9156:21:1;9213:2;9193:18;;;9186:30;9252:34;9232:18;;;9225:62;-1:-1:-1;;;9303:18:1;;;9296:31;9344:19;;6429:56:0;9146:223:1;5119:136:0;5177:7;5204:43;5208:1;5211;5204:43;;;;;;;;;;;;;;;;;:3;:43::i;32386:742::-;22109:16;:23;;-1:-1:-1;;22109:23:0;;;;;32761:21:::1;32827:38;32844:20:::0;32827:16:::1;:38::i;:::-;32996:18;33017:41;:21;33043:14:::0;33017:25:::1;:41::i;:::-;33079:15;::::0;33071:45:::1;::::0;32996:62;;-1:-1:-1;;;;;;33079:15:0::1;::::0;33071:45;::::1;;;::::0;32996:62;;33079:15:::1;33071:45:::0;33079:15;33071:45;32996:62;33079:15;33071:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22155:16:0;:24;;-1:-1:-1;;22155:24:0;;;-1:-1:-1;;32386:742:0:o;29796:1765::-;29971:7;;29880;;29925:6;;29971:12;29968:290;;29999:14;30016:46;30045:11;;30059:1;30045:15;;;;:::i;:::-;30040:21;;:2;:21;:::i;:::-;30027:7;;30016:19;;:6;;:10;:19::i;:46::-;29999:63;-1:-1:-1;30094:26:0;:14;29999:63;30094:18;:26::i;:::-;30077:43;-1:-1:-1;30154:38:0;30175:16;:6;30186:4;30175:10;:16::i;:::-;30154;;;:20;:38::i;:::-;30135:16;:57;30222:12;;:24;;30239:6;30222:16;:24::i;:::-;30207:12;:39;-1:-1:-1;29968:290:0;30303:13;;:18;30300:592;;30337:20;30360:52;30395:11;;30409:1;30395:15;;;;:::i;:::-;30390:21;;:2;:21;:::i;:::-;30371:13;;30360:25;;:6;;:10;:25::i;:52::-;30337:75;-1:-1:-1;30444:32:0;:14;30337:75;30444:18;:32::i;:::-;30427:49;-1:-1:-1;30527:61:0;30565:22;:12;30582:4;30565:16;:22::i;:::-;30554:4;30527:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;30518:4;30491:33;;;;:18;:33;;;;;;;;:97;;;;30606:11;:26;;;;;;30603:142;;;30705:4;30683:28;;;;:13;:28;;;;;;:46;;30716:12;30683:32;:46::i;:::-;30674:4;30652:28;;;;:13;:28;;;;;:77;30603:142;30780:18;;:36;;30803:12;30780:22;:36::i;:::-;30759:18;:57;30836:44;;11915:25:1;;;30861:4:0;;-1:-1:-1;;;;;30836:44:0;;;-1:-1:-1;;;;;;;;;;;30836:44:0;11903:2:1;11888:18;30836:44:0;;;;;;;30300:592;;30907:8;;:13;30904:616;;30936:15;30954:47;30984:11;;30998:1;30984:15;;;;:::i;:::-;30979:21;;:2;:21;:::i;:::-;30965:8;;30954:20;;:6;;:10;:20::i;:47::-;30936:65;-1:-1:-1;31033:27:0;:14;30936:65;31033:18;:27::i;:::-;31089:11;;31016:44;;-1:-1:-1;31089:24:0;;31105:7;31089:15;:24::i;:::-;31075:11;:38;31155:47;31184:17;:7;31196:4;31184:11;:17::i;:::-;31174:4;;-1:-1:-1;;;;;31174:4:0;31155:24;;;;:18;:24;;;;;;;:28;:47::i;:::-;31147:4;;;-1:-1:-1;;;;;31147:4:0;;;31128:24;;;;:18;:24;;;;;;;;:74;;;;31233:4;;;;;31221:17;;:11;:17;;;;;;;31217:112;;;31295:4;;-1:-1:-1;;;;;31295:4:0;31281:19;;;;:13;:19;;;;;;:32;;31305:7;31281:23;:32::i;:::-;31273:4;;-1:-1:-1;;;;;31273:4:0;31259:19;;;;:13;:19;;;;;:54;31217:112;31362:39;31383:17;:7;31395:4;31383:11;:17::i;31362:39::-;31343:16;:58;31432:13;;:26;;31450:7;31432:17;:26::i;:::-;31416:13;:42;31495:4;;31478:30;;11915:25:1;;;-1:-1:-1;;;;;31495:4:0;;;;31478:30;;;-1:-1:-1;;;;;;;;;;;31478:30:0;11903:2:1;11888:18;31478:30:0;;;;;;;30904:616;;31539:14;29796:1765;-1:-1:-1;;;;29796:1765:0:o;7618:312::-;7738:7;7773:12;7766:5;7758:28;;;;-1:-1:-1;;;7758:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7797:9:0;7809:5;7813:1;7809;:5;:::i;33136:589::-;33286:16;;;33300:1;33286:16;;;;;;;;33262:21;;33286:16;;;;;;;;;;-1:-1:-1;33286:16:0;33262:40;;33331:4;33313;33318:1;33313:7;;;;;;-1:-1:-1;;;33313:7:0;;;;;;;;;-1:-1:-1;;;;;33313:23:0;;;:7;;;;;;;;;;:23;;;;33357:15;;:22;;;-1:-1:-1;;;33357:22:0;;;;:15;;;;;:20;;:22;;;;;33313:7;;33357:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33347:4;33352:1;33347:7;;;;;;-1:-1:-1;;;33347:7:0;;;;;;;;;-1:-1:-1;;;;;33347:32:0;;;:7;;;;;;;;;:32;33424:15;;33392:62;;33409:4;;33424:15;33442:11;33392:8;:62::i;:::-;33493:15;;:224;;-1:-1:-1;;;33493:224:0;;-1:-1:-1;;;;;33493:15:0;;;;:66;;:224;;33574:11;;33493:15;;33644:4;;33671;;33691:15;;33493:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33136:589;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:160::-;218:20;;274:13;;267:21;257:32;;247:2;;303:1;300;293:12;318:257;377:6;430:2;418:9;409:7;405:23;401:32;398:2;;;451:6;443;436:22;398:2;495:9;482:23;514:31;539:5;514:31;:::i;580:261::-;650:6;703:2;691:9;682:7;678:23;674:32;671:2;;;724:6;716;709:22;671:2;761:9;755:16;780:31;805:5;780:31;:::i;846:398::-;914:6;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1040:9;1027:23;1059:31;1084:5;1059:31;:::i;:::-;1109:5;-1:-1:-1;1166:2:1;1151:18;;1138:32;1179:33;1138:32;1179:33;:::i;:::-;1231:7;1221:17;;;933:311;;;;;:::o;1249:466::-;1326:6;1334;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:2;;;1416:6;1408;1401:22;1363:2;1460:9;1447:23;1479:31;1504:5;1479:31;:::i;:::-;1529:5;-1:-1:-1;1586:2:1;1571:18;;1558:32;1599:33;1558:32;1599:33;:::i;:::-;1353:362;;1651:7;;-1:-1:-1;;;1705:2:1;1690:18;;;;1677:32;;1353:362::o;1720:325::-;1785:6;1793;1846:2;1834:9;1825:7;1821:23;1817:32;1814:2;;;1867:6;1859;1852:22;1814:2;1911:9;1898:23;1930:31;1955:5;1930:31;:::i;:::-;1980:5;-1:-1:-1;2004:35:1;2035:2;2020:18;;2004:35;:::i;:::-;1994:45;;1804:241;;;;;:::o;2050:325::-;2118:6;2126;2179:2;2167:9;2158:7;2154:23;2150:32;2147:2;;;2200:6;2192;2185:22;2147:2;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;2365:2;2350:18;;;;2337:32;;-1:-1:-1;;;2137:238:1:o;2380:1247::-;2470:6;2478;2531:2;2519:9;2510:7;2506:23;2502:32;2499:2;;;2552:6;2544;2537:22;2499:2;2597:9;2584:23;2626:18;2667:2;2659:6;2656:14;2653:2;;;2688:6;2680;2673:22;2653:2;2731:6;2720:9;2716:22;2706:32;;2776:7;2769:4;2765:2;2761:13;2757:27;2747:2;;2803:6;2795;2788:22;2747:2;2844;2831:16;2866:4;2889:2;2885;2882:10;2879:2;;;2895:18;;:::i;:::-;2941:2;2938:1;2934:10;2973:2;2967:9;3036:2;3032:7;3027:2;3023;3019:11;3015:25;3007:6;3003:38;3091:6;3079:10;3076:22;3071:2;3059:10;3056:18;3053:46;3050:2;;;3102:18;;:::i;:::-;3138:2;3131:22;3188:18;;;3222:15;;;;-1:-1:-1;3257:11:1;;;3287;;;3283:20;;3280:33;-1:-1:-1;3277:2:1;;;3331:6;3323;3316:22;3277:2;3358:6;3349:15;;3373:169;3387:2;3384:1;3381:9;3373:169;;;3444:23;3463:3;3444:23;:::i;:::-;3432:36;;3405:1;3398:9;;;;;3488:12;;;;3520;;3373:169;;;-1:-1:-1;3561:6:1;-1:-1:-1;3586:35:1;;-1:-1:-1;3602:18:1;;;3586:35;:::i;:::-;3576:45;;;;;;2489:1138;;;;;:::o;3632:190::-;3688:6;3741:2;3729:9;3720:7;3716:23;3712:32;3709:2;;;3762:6;3754;3747:22;3709:2;3790:26;3806:9;3790:26;:::i;3827:190::-;3886:6;3939:2;3927:9;3918:7;3914:23;3910:32;3907:2;;;3960:6;3952;3945:22;3907:2;-1:-1:-1;3988:23:1;;3897:120;-1:-1:-1;3897:120:1:o;4022:258::-;4087:6;4095;4148:2;4136:9;4127:7;4123:23;4119:32;4116:2;;;4169:6;4161;4154:22;4116:2;4210:9;4197:23;4187:33;;4239:35;4270:2;4259:9;4255:18;4239:35;:::i;4919:603::-;5031:4;5060:2;5089;5078:9;5071:21;5121:6;5115:13;5164:6;5159:2;5148:9;5144:18;5137:34;5189:4;5202:140;5216:6;5213:1;5210:13;5202:140;;;5311:14;;;5307:23;;5301:30;5277:17;;;5296:2;5273:26;5266:66;5231:10;;5202:140;;;5360:6;5357:1;5354:13;5351:2;;;5430:4;5425:2;5416:6;5405:9;5401:22;5397:31;5390:45;5351:2;-1:-1:-1;5506:2:1;5485:15;-1:-1:-1;;5481:29:1;5466:45;;;;5513:2;5462:54;;5040:482;-1:-1:-1;;;5040:482:1:o;9374:356::-;9576:2;9558:21;;;9595:18;;;9588:30;9654:34;9649:2;9634:18;;9627:62;9721:2;9706:18;;9548:182::o;11951:983::-;12213:4;12261:3;12250:9;12246:19;12292:6;12281:9;12274:25;12318:2;12356:6;12351:2;12340:9;12336:18;12329:34;12399:3;12394:2;12383:9;12379:18;12372:31;12423:6;12458;12452:13;12489:6;12481;12474:22;12527:3;12516:9;12512:19;12505:26;;12566:2;12558:6;12554:15;12540:29;;12587:4;12600:195;12614:6;12611:1;12608:13;12600:195;;;12679:13;;-1:-1:-1;;;;;12675:39:1;12663:52;;12770:15;;;;12735:12;;;;12711:1;12629:9;12600:195;;;-1:-1:-1;;;;;;;12851:32:1;;;;12846:2;12831:18;;12824:60;-1:-1:-1;;;12915:3:1;12900:19;12893:35;12812:3;12222:712;-1:-1:-1;;;12222:712:1:o;12939:128::-;12979:3;13010:1;13006:6;13003:1;13000:13;12997:2;;;13016:18;;:::i;:::-;-1:-1:-1;13052:9:1;;12987:80::o;13072:217::-;13112:1;13138;13128:2;;-1:-1:-1;;;13163:31:1;;13217:4;13214:1;13207:15;13245:4;13170:1;13235:15;13128:2;-1:-1:-1;13274:9:1;;13118:171::o;13294:422::-;13383:1;13426:5;13383:1;13440:270;13461:7;13451:8;13448:21;13440:270;;;13520:4;13516:1;13512:6;13508:17;13502:4;13499:27;13496:2;;;13529:18;;:::i;:::-;13579:7;13569:8;13565:22;13562:2;;;13599:16;;;;13562:2;13678:22;;;;13638:15;;;;13440:270;;;13444:3;13358:358;;;;;:::o;13721:131::-;13781:5;13810:36;13837:8;13831:4;13906:5;13936:8;13926:2;;-1:-1:-1;13977:1:1;13991:5;;13926:2;14025:4;14015:2;;-1:-1:-1;14062:1:1;14076:5;;14015:2;14107:4;14125:1;14120:59;;;;14193:1;14188:130;;;;14100:218;;14120:59;14150:1;14141:10;;14164:5;;;14188:130;14225:3;14215:8;14212:17;14209:2;;;14232:18;;:::i;:::-;-1:-1:-1;;14288:1:1;14274:16;;14303:5;;14100:218;;14402:2;14392:8;14389:16;14383:3;14377:4;14374:13;14370:36;14364:2;14354:8;14351:16;14346:2;14340:4;14337:12;14333:35;14330:77;14327:2;;;-1:-1:-1;14439:19:1;;;14471:5;;14327:2;14518:34;14543:8;14537:4;14518:34;:::i;:::-;14588:6;14584:1;14580:6;14576:19;14567:7;14564:32;14561:2;;;14599:18;;:::i;:::-;14637:20;;13916:747;-1:-1:-1;;;13916:747:1:o;14668:168::-;14708:7;14774:1;14770;14766:6;14762:14;14759:1;14756:21;14751:1;14744:9;14737:17;14733:45;14730:2;;;14781:18;;:::i;:::-;-1:-1:-1;14821:9:1;;14720:116::o;14841:125::-;14881:4;14909:1;14906;14903:8;14900:2;;;14914:18;;:::i;:::-;-1:-1:-1;14951:9:1;;14890:76::o;14971:380::-;15050:1;15046:12;;;;15093;;;15114:2;;15168:4;15160:6;15156:17;15146:27;;15114:2;15221;15213:6;15210:14;15190:18;15187:38;15184:2;;;15267:10;15262:3;15258:20;15255:1;15248:31;15302:4;15299:1;15292:15;15330:4;15327:1;15320:15;15184:2;;15026:325;;;:::o;15356:135::-;15395:3;-1:-1:-1;;15416:17:1;;15413:2;;;15436:18;;:::i;:::-;-1:-1:-1;15483:1:1;15472:13;;15403:88::o;15496:127::-;15557:10;15552:3;15548:20;15545:1;15538:31;15588:4;15585:1;15578:15;15612:4;15609:1;15602:15;15628:127;15689:10;15684:3;15680:20;15677:1;15670:31;15720:4;15717:1;15710:15;15744:4;15741:1;15734:15;15760:131;-1:-1:-1;;;;;15835:31:1;;15825:42;;15815:2;;15881:1;15878;15871:12;15815:2;15805:86;:::o

Swarm Source

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