BNB Price: $618.52 (+0.84%)
 

Overview

Max Total Supply

100,000,000DPS

Holders

12,010 (0.00%)

Transfers

-
0

Market

Price

$0.0009 @ 0.000001 BNB

Onchain Market Cap

$86,093.80

Circulating Supply Market Cap

$45,538.02

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Deepspace is a play to earn platform that leverages risk for dynamic yield generating strategies

Market

Volume (24H):$0.00
Market Capitalization:$45,538.02
Circulating Supply:52,893,498.00 DPS
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information

Contract Source Code Verified (Exact Match)

Contract Name:
DEEPSPACE

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at BscScan.com on 2021-08-02
*/

/**
 *
                                                                                          
                                      .:::------:::.                                      
                               .:-=+******************+=-:                                
                            :=*****************************+=:                            
                         -+************************************+:                         
                      :=******************************************=.                      
                    :+************************************+=--::..                        
                  .+********************************+-:.                                  
                 -******************************=:.        .:--=++**###########**++=:     
                +***************************+-.      .-=+*#********###################+.  
              .**************************+:       ..:...              .::-=+*##########*. 
             .*************************-.                                    .:+########- 
             +**********************+:        ..:--==+++*****+++==--:.           =######: 
            =*********************+:    .:-=+**************************+=-.       -####*  
           .*********************: .:=+*************************************=:     +##*.  
           -*******************+-=********************************************-    -#*.   
           +******************************************************************+    =*.    
           ********************************************************************    =      
      ..   ********************************************************************   .       
     --    ********************************************************************           
    =*     +******************************************************************+           
   +#=     =*******************************************=-=********************-           
  +##*      -+************************************+=-. .+*********************.           
 -####=       .:=+**************************+=-:.    .=**********************-            
 +#####+:           .:--==++++++++++==--:..        .=***********************+             
 +#######*=:.                                    :+************************+.             
 :###########*+==-:..           ...:::.       :=**************************+.              
  .=*##################******##*+=-:       :=****************************+                
     :-=+**###########**++=-:.        .:=+******************************-                 
             ......              .:-=*********************************+.                  
                      ...::--=+*************************************+:                    
                      :+******************************************=:                      
                        .-+************************************+-                         
                           .-=******************************=:                            
                               .:-+*******************+=-:.                               
                                     ..::--------::..                                     
                                                                                          
                                                                  
─────────────────────────────────────────
Website: https://deepspace.game/
Telegram: https://t.me/DeepSpaceGame
Twitter: https://twitter.com/DeepSpaceBSC
─────────────────────────────────────────

 */

// SPDX-License-Identifier: Unlicensed


pragma solidity ^0.8.3;

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

/**
 * @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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        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 {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    address public _DevWalletAddress = 0xaCc34268f5D7Cb9B11BfB1ba4D8bD2bc2B49EE4E;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000 * 10**1 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "DEEPSPACE";
    string private _symbol = "DPS";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 4;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _DevFee = 3;
    uint256 private _previousDevFee = _DevFee;
    uint256 public _liquidityFee = 2;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapEnabled = false;
    
    uint256 public _maxTxAmount = _tTotal;
    uint256 public numTokensSellToAddToLiquidity = 50000 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[owner()] = _rTotal;
        
        _setUniswapV2Router(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

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

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

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

    function allowance(address owner, address spender) public view override 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee + _liquidityFee + _DevFee <= 15, "Total fees exceed 15%");
        _taxFee = taxFee;
    }

    function setDevFeePercent(uint256 DevFee) external onlyOwner() {
        require(_taxFee + _liquidityFee + DevFee <= 15, "Total fees exceed 15%");
        _DevFee = DevFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(_taxFee + liquidityFee + _DevFee <= 15, "Total fees exceed 15%");
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner() {
        swapEnabled = _enabled;
    }
    
    function setDevWalletAddress(address _address) external onlyOwner() {
        _DevWalletAddress = _address;
    }
    
    function setNumTokensSellToAddToLiquidity(uint256 _amount) external onlyOwner() {
        numTokensSellToAddToLiquidity = _amount;
    }
    
    function _setUniswapV2Router(address _router) private {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(uniswapV2Pair == address(0))
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;        
    }
    
    function setUniswapV2Router(address _router) external onlyOwner() {
        _setUniswapV2Router(_router); 
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tdev, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tdev);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tdev = calculateDevFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tdev);
        return (tTransferAmount, tFee, tLiquidity, tdev);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rdev = tdev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rdev);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takedev(uint256 tdev) private {
        uint256 currentRate =  _getRate();
        uint256 rdev = tdev.mul(currentRate);
        _rOwned[_DevWalletAddress] = _rOwned[_DevWalletAddress].add(rdev);
        if(_isExcluded[_DevWalletAddress])
            _tOwned[_DevWalletAddress] = _tOwned[_DevWalletAddress].add(tdev);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_DevFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        _previousTaxFee = _taxFee;
        _previousDevFee = _DevFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _DevFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _DevFee = _previousDevFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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 from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
        if(!swapEnabled && (to == uniswapV2Pair || from == uniswapV2Pair))
            revert("Buying and selling is disabled");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // 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(half); // <- 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);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tdev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takedev(tdev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function withdrawalToken(address _tokenAddr, uint _amount) external onlyOwner() {
        IERC20 token = IERC20(_tokenAddr);
        token.transfer(owner(), _amount);
    }
    
    function withdrawalBNB() external onlyOwner() {
        payable(owner()).transfer(address(this).balance);
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"_DevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DevWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","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":"uint256","name":"DevFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","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":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"inputs":[],"name":"withdrawalBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600780546001600160a01b03191673acc34268f5d7cb9b11bfb1ba4d8bd2bc2b49ee4e17905567016345785d8a00006008819055620000469060001962000707565b6200005490600019620006a6565b6009908155604080518082019091528181526844454550535041434560b81b60209091019081526200008a91600b9190620005d0565b506040805180820190915260038082526244505360e81b6020909201918252620000b791600c91620005d0565b50600d805460ff191660091790556004600e819055600f5560036010819055601155600260128190556013556015805461ffff60a81b1916600160a81b179055600854601655652d79883d20006017553480156200011457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060095460016000620001706000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620001a97310ed43c718714eb63d5aa57b78b54704e256024e6200026b565b600160046000620001c26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620002156000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200025d91815260200190565b60405180910390a362000728565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002aa57600080fd5b505afa158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000676565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032e57600080fd5b505afa15801562000343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000369919062000676565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015620003b057600080fd5b505afa158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb919062000676565b601580546001600160a01b0319166001600160a01b03929092169182179055620005ad57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200044957600080fd5b505afa1580156200045e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000484919062000676565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004cd57600080fd5b505afa158015620004e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000508919062000676565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200055157600080fd5b505af115801562000566573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058c919062000676565b601580546001600160a01b0319166001600160a01b03929092169190911790555b601480546001600160a01b0319166001600160a01b039290921691909117905550565b828054620005de90620006ca565b90600052602060002090601f0160209004810192826200060257600085556200064d565b82601f106200061d57805160ff19168380011785556200064d565b828001600101855582156200064d579182015b828111156200064d57825182559160200191906001019062000630565b506200065b9291506200065f565b5090565b5b808211156200065b576000815560010162000660565b60006020828403121562000688578081fd5b81516001600160a01b03811681146200069f578182fd5b9392505050565b600082821015620006c557634e487b7160e01b81526011600452602481fd5b500390565b600181811c90821680620006df57607f821691505b602082108114156200070157634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200072357634e487b7160e01b81526012600452602481fd5b500690565b612e7d80620007386000396000f3fe6080604052600436106102765760003560e01c80635342acb41161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e14610773578063e01af92c146107b9578063ea2f0b37146107d9578063f0f165af146107f9578063f2fde38b14610819578063ffde0a1e146108395761027d565b8063a9059cbb146106c7578063b63d8512146106e7578063bbc2b026146106fd578063c49b9a801461071d578063d12a76881461073d578063d543dbeb146107535761027d565b80637d1db4a5116101135780637d1db4a51461060557806388f820201461061b5780638da5cb5b146106545780638ee88c531461067257806395d89b4114610692578063a457c2d7146106a75761027d565b80635342acb4146105605780636bc87c3a146105995780636ddd1713146105af57806370a08231146105d0578063715018a6146105f05761027d565b8063313ce567116101e85780633bd5d173116101ac5780633bd5d1731461049f578063437823ec146104bf5780634549b039146104df57806349bd5a5e146104ff5780634a74bb021461051f57806352390c02146105405761027d565b8063313ce567146104075780633685d41914610429578063379e29191461044957806339509351146104695780633b124fe7146104895761027d565b806313114a9d1161023a57806313114a9d146103535780631419841d146103725780631694505e1461039257806318160ddd146103b257806323b872dd146103c75780632d838119146103e75761027d565b806303588b6d14610282578063061c82d0146102bf57806306fdde03146102e1578063095ea7b314610303578063120a0612146103335761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cb57600080fd5b506102df6102da366004612b6d565b61084e565b005b3480156102ed57600080fd5b506102f66108c1565b6040516102b69190612bd6565b34801561030f57600080fd5b5061032361031e366004612b0a565b610953565b60405190151581526020016102b6565b34801561033f57600080fd5b506102df61034e366004612a5a565b61096a565b34801561035f57600080fd5b50600a545b6040519081526020016102b6565b34801561037e57600080fd5b506102df61038d366004612a5a565b6109b6565b34801561039e57600080fd5b506014546102a2906001600160a01b031681565b3480156103be57600080fd5b50600854610364565b3480156103d357600080fd5b506103236103e2366004612aca565b6109ec565b3480156103f357600080fd5b50610364610402366004612b6d565b610a55565b34801561041357600080fd5b50600d5460405160ff90911681526020016102b6565b34801561043557600080fd5b506102df610444366004612a5a565b610adb565b34801561045557600080fd5b506102df610464366004612b6d565b610ccb565b34801561047557600080fd5b50610323610484366004612b0a565b610d35565b34801561049557600080fd5b50610364600e5481565b3480156104ab57600080fd5b506102df6104ba366004612b6d565b610d6b565b3480156104cb57600080fd5b506102df6104da366004612a5a565b610e57565b3480156104eb57600080fd5b506103646104fa366004612b85565b610ea5565b34801561050b57600080fd5b506015546102a2906001600160a01b031681565b34801561052b57600080fd5b5060155461032390600160a81b900460ff1681565b34801561054c57600080fd5b506102df61055b366004612a5a565b610f34565b34801561056c57600080fd5b5061032361057b366004612a5a565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105a557600080fd5b5061036460125481565b3480156105bb57600080fd5b5060155461032390600160b01b900460ff1681565b3480156105dc57600080fd5b506103646105eb366004612a5a565b611087565b3480156105fc57600080fd5b506102df6110e9565b34801561061157600080fd5b5061036460165481565b34801561062757600080fd5b50610323610636366004612a5a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561066057600080fd5b506000546001600160a01b03166102a2565b34801561067e57600080fd5b506102df61068d366004612b6d565b61115d565b34801561069e57600080fd5b506102f66111c7565b3480156106b357600080fd5b506103236106c2366004612b0a565b6111d6565b3480156106d357600080fd5b506103236106e2366004612b0a565b611225565b3480156106f357600080fd5b5061036460105481565b34801561070957600080fd5b506102df610718366004612b0a565b611232565b34801561072957600080fd5b506102df610738366004612b35565b611304565b34801561074957600080fd5b5061036460175481565b34801561075f57600080fd5b506102df61076e366004612b6d565b611386565b34801561077f57600080fd5b5061036461078e366004612a92565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107c557600080fd5b506102df6107d4366004612b35565b6113d6565b3480156107e557600080fd5b506102df6107f4366004612a5a565b61141e565b34801561080557600080fd5b506102df610814366004612b6d565b611469565b34801561082557600080fd5b506102df610834366004612a5a565b611498565b34801561084557600080fd5b506102df611582565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161087890612c58565b60405180910390fd5b600f601054601254836108949190612cfd565b61089e9190612cfd565b11156108bc5760405162461bcd60e51b815260040161087890612c29565b600e55565b6060600b80546108d090612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90612d6b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b60006109603384846115e6565b5060015b92915050565b6000546001600160a01b031633146109945760405162461bcd60e51b815260040161087890612c58565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109e05760405162461bcd60e51b815260040161087890612c58565b6109e98161170a565b50565b60006109f9848484611a56565b610a4b8433610a4685604051806060016040528060288152602001612dfb602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611d77565b6115e6565b5060019392505050565b6000600954821115610abc5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610878565b6000610ac6611da3565b9050610ad28382611dc6565b9150505b919050565b6000546001600160a01b03163314610b055760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03811660009081526005602052604090205460ff16610b6d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610878565b60005b600654811015610cc757816001600160a01b031660068281548110610ba557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610cb55760068054610bd090600190612d54565b81548110610bee57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610c2857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610c8e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610cc7565b80610cbf81612da6565b915050610b70565b5050565b6000546001600160a01b03163314610cf55760405162461bcd60e51b815260040161087890612c58565b600f81601254600e54610d089190612cfd565b610d129190612cfd565b1115610d305760405162461bcd60e51b815260040161087890612c29565b601055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610960918590610a469086611dd9565b3360008181526005602052604090205460ff1615610de05760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610878565b6000610deb83611de5565b5050506001600160a01b038616600090815260016020526040902054939450610e1993925084915050611e40565b6001600160a01b038316600090815260016020526040902055600954610e3f9082611e40565b600955600a54610e4f9084611dd9565b600a55505050565b6000546001600160a01b03163314610e815760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600854831115610ef95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610878565b81610f19576000610f0984611de5565b5094965061096495505050505050565b6000610f2484611de5565b5093965061096495505050505050565b6000546001600160a01b03163314610f5e5760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03811660009081526005602052604090205460ff1615610fc75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610878565b6001600160a01b03811660009081526001602052604090205415611021576001600160a01b03811660009081526001602052604090205461100790610a55565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156110c757506001600160a01b038116600090815260026020526040902054610ad6565b6001600160a01b03821660009081526001602052604090205461096490610a55565b6000546001600160a01b031633146111135760405162461bcd60e51b815260040161087890612c58565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111875760405162461bcd60e51b815260040161087890612c58565b600f60105482600e5461119a9190612cfd565b6111a49190612cfd565b11156111c25760405162461bcd60e51b815260040161087890612c29565b601255565b6060600c80546108d090612d6b565b60006109603384610a4685604051806060016040528060258152602001612e23602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611d77565b6000610960338484611a56565b6000546001600160a01b0316331461125c5760405162461bcd60e51b815260040161087890612c58565b816001600160a01b03811663a9059cbb61127e6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190612b51565b50505050565b6000546001600160a01b0316331461132e5760405162461bcd60e51b815260040161087890612c58565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061137b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113b05760405162461bcd60e51b815260040161087890612c58565b6113d060646113ca83600854611e4c90919063ffffffff16565b90611dc6565b60165550565b6000546001600160a01b031633146114005760405162461bcd60e51b815260040161087890612c58565b60158054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114485760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146114935760405162461bcd60e51b815260040161087890612c58565b601755565b6000546001600160a01b031633146114c25760405162461bcd60e51b815260040161087890612c58565b6001600160a01b0381166115275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610878565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115ac5760405162461bcd60e51b815260040161087890612c58565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156109e9573d6000803e3d6000fd5b6001600160a01b0383166116485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610878565b6001600160a01b0382166116a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610878565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190612a76565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c857600080fd5b505afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190612a76565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561184657600080fd5b505afa15801561185a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187e9190612a76565b601580546001600160a01b0319166001600160a01b03929092169182179055611a3357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118da57600080fd5b505afa1580156118ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190612a76565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561195a57600080fd5b505afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190612a76565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119da57600080fd5b505af11580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190612a76565b601580546001600160a01b0319166001600160a01b03929092169190911790555b601480546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b038316611aba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610878565b6001600160a01b038216611b1c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610878565b60008111611b7e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610878565b6000546001600160a01b03848116911614801590611baa57506000546001600160a01b03838116911614155b15611c1257601654811115611c125760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610878565b601554600160b01b900460ff16158015611c5057506015546001600160a01b0383811691161480611c5057506015546001600160a01b038481169116145b15611c9d5760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c656400006044820152606401610878565b6000611ca830611087565b90506016548110611cb857506016545b60175481108015908190611cd65750601554600160a01b900460ff16155b8015611cf057506015546001600160a01b03868116911614155b8015611d055750601554600160a81b900460ff165b15611d18576017549150611d1882611e58565b6001600160a01b03851660009081526004602052604090205460019060ff1680611d5a57506001600160a01b03851660009081526004602052604090205460ff165b15611d63575060005b611d6f86868684611eff565b505050505050565b60008184841115611d9b5760405162461bcd60e51b81526004016108789190612bd6565b505050900390565b6000806000611db0612099565b9092509050611dbf8282611dc6565b9250505090565b6000611dd28284612d15565b9392505050565b6000611dd28284612cfd565b6000806000806000806000806000806000611dff8c612256565b93509350935093506000806000611e208f878787611e1b611da3565b6122ab565b919f509d509b509599509397509195509350505050919395979092949650565b6000611dd28284612d54565b6000611dd28284612d35565b6015805460ff60a01b1916600160a01b1790556000611e78826002611dc6565b90506000611e868383611e40565b905047611e928361230d565b6000611e9e4783611e40565b9050611eaa838261248a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff60a01b19169055505050565b80611f2957611f29600e8054600f5560108054601155601280546013556000928390559082905555565b6001600160a01b03841660009081526005602052604090205460ff168015611f6a57506001600160a01b03831660009081526005602052604090205460ff16155b15611f7f57611f7a8484846125b2565b61207d565b6001600160a01b03841660009081526005602052604090205460ff16158015611fc057506001600160a01b03831660009081526005602052604090205460ff165b15611fd057611f7a8484846126f8565b6001600160a01b03841660009081526005602052604090205460ff1615801561201257506001600160a01b03831660009081526005602052604090205460ff16155b1561202257611f7a8484846127b7565b6001600160a01b03841660009081526005602052604090205460ff16801561206257506001600160a01b03831660009081526005602052604090205460ff165b1561207257611f7a848484612811565b61207d8484846127b7565b806112fe576112fe600f54600e55601154601055601354601255565b6009546008546000918291825b600654811015612224578260016000600684815481106120d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061214f575081600260006006848154811061212857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121665760095460085494509450505050612252565b6121ba600160006006848154811061218e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e40565b925061221060026000600684815481106121e457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e40565b91508061221c81612da6565b9150506120a6565b5060085460095461223491611dc6565b82101561224c57600954600854935093505050612252565b90925090505b9091565b60008060008060006122678661289a565b90506000612274876128b6565b90506000612281886128d2565b9050600061229b8261229585818d89611e40565b90611e40565b9993985091965094509092505050565b60008080806122ba8986611e4c565b905060006122c88987611e4c565b905060006122d68988611e4c565b905060006122e48989611e4c565b905060006122f88261229585818989611e40565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061235057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123a457600080fd5b505afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190612a76565b816001815181106123fd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260145461242391309116846115e6565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245c908590600090869030904290600401612c8d565b600060405180830381600087803b15801561247657600080fd5b505af1158015611d6f573d6000803e3d6000fd5b6014546124a29030906001600160a01b0316846115e6565b6014546001600160a01b031663f305d7198230856000806124cb6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561252e57600080fd5b505af1158015612542573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125679190612ba9565b50506015546040518481526001600160a01b03909116915030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008060008060008060006125c688611de5565b965096509650965096509650965061260c88600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461263b9088611e40565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461266a9087611dd9565b6001600160a01b038a1660009081526001602052604090205561268c826128ee565b61269581612977565b61269f8584612a36565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516126e491815260200190565b60405180910390a350505050505050505050565b600080600080600080600061270c88611de5565b965096509650965096509650965061275287600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546127889085611dd9565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461266a9087611dd9565b60008060008060008060006127cb88611de5565b965096509650965096509650965061263b87600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b600080600080600080600061282588611de5565b965096509650965096509650965061286b88600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546127529088611e40565b600061096460646113ca600e5485611e4c90919063ffffffff16565b600061096460646113ca60125485611e4c90919063ffffffff16565b600061096460646113ca60105485611e4c90919063ffffffff16565b60006128f8611da3565b905060006129068383611e4c565b306000908152600160205260409020549091506129239082611dd9565b3060009081526001602090815260408083209390935560059052205460ff161561297257306000908152600260205260409020546129619084611dd9565b306000908152600260205260409020555b505050565b6000612981611da3565b9050600061298f8383611e4c565b6007546001600160a01b03166000908152600160205260409020549091506129b79082611dd9565b600780546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615612972576007546001600160a01b0316600090815260026020526040902054612a169084611dd9565b6007546001600160a01b0316600090815260026020526040902055505050565b600954612a439083611e40565b600955600a54612a539082611dd9565b600a555050565b600060208284031215612a6b578081fd5b8135611dd281612dd7565b600060208284031215612a87578081fd5b8151611dd281612dd7565b60008060408385031215612aa4578081fd5b8235612aaf81612dd7565b91506020830135612abf81612dd7565b809150509250929050565b600080600060608486031215612ade578081fd5b8335612ae981612dd7565b92506020840135612af981612dd7565b929592945050506040919091013590565b60008060408385031215612b1c578182fd5b8235612b2781612dd7565b946020939093013593505050565b600060208284031215612b46578081fd5b8135611dd281612dec565b600060208284031215612b62578081fd5b8151611dd281612dec565b600060208284031215612b7e578081fd5b5035919050565b60008060408385031215612b97578182fd5b823591506020830135612abf81612dec565b600080600060608486031215612bbd578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612c0257858101830151858201604001528201612be6565b81811115612c135783604083870101525b50601f01601f1916929092016040019392505050565b602080825260159082015274546f74616c2066656573206578636565642031352560581b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612cdc5784516001600160a01b031683529383019391830191600101612cb7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612d1057612d10612dc1565b500190565b600082612d3057634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612d4f57612d4f612dc1565b500290565b600082821015612d6657612d66612dc1565b500390565b600181811c90821680612d7f57607f821691505b60208210811415612da057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dba57612dba612dc1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109e957600080fd5b80151581146109e957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c5947515526c45fdcc78d007342f882152f70cf49ea15a57ad5c727010d32b0564736f6c63430008030033

Deployed Bytecode

0x6080604052600436106102765760003560e01c80635342acb41161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e14610773578063e01af92c146107b9578063ea2f0b37146107d9578063f0f165af146107f9578063f2fde38b14610819578063ffde0a1e146108395761027d565b8063a9059cbb146106c7578063b63d8512146106e7578063bbc2b026146106fd578063c49b9a801461071d578063d12a76881461073d578063d543dbeb146107535761027d565b80637d1db4a5116101135780637d1db4a51461060557806388f820201461061b5780638da5cb5b146106545780638ee88c531461067257806395d89b4114610692578063a457c2d7146106a75761027d565b80635342acb4146105605780636bc87c3a146105995780636ddd1713146105af57806370a08231146105d0578063715018a6146105f05761027d565b8063313ce567116101e85780633bd5d173116101ac5780633bd5d1731461049f578063437823ec146104bf5780634549b039146104df57806349bd5a5e146104ff5780634a74bb021461051f57806352390c02146105405761027d565b8063313ce567146104075780633685d41914610429578063379e29191461044957806339509351146104695780633b124fe7146104895761027d565b806313114a9d1161023a57806313114a9d146103535780631419841d146103725780631694505e1461039257806318160ddd146103b257806323b872dd146103c75780632d838119146103e75761027d565b806303588b6d14610282578063061c82d0146102bf57806306fdde03146102e1578063095ea7b314610303578063120a0612146103335761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cb57600080fd5b506102df6102da366004612b6d565b61084e565b005b3480156102ed57600080fd5b506102f66108c1565b6040516102b69190612bd6565b34801561030f57600080fd5b5061032361031e366004612b0a565b610953565b60405190151581526020016102b6565b34801561033f57600080fd5b506102df61034e366004612a5a565b61096a565b34801561035f57600080fd5b50600a545b6040519081526020016102b6565b34801561037e57600080fd5b506102df61038d366004612a5a565b6109b6565b34801561039e57600080fd5b506014546102a2906001600160a01b031681565b3480156103be57600080fd5b50600854610364565b3480156103d357600080fd5b506103236103e2366004612aca565b6109ec565b3480156103f357600080fd5b50610364610402366004612b6d565b610a55565b34801561041357600080fd5b50600d5460405160ff90911681526020016102b6565b34801561043557600080fd5b506102df610444366004612a5a565b610adb565b34801561045557600080fd5b506102df610464366004612b6d565b610ccb565b34801561047557600080fd5b50610323610484366004612b0a565b610d35565b34801561049557600080fd5b50610364600e5481565b3480156104ab57600080fd5b506102df6104ba366004612b6d565b610d6b565b3480156104cb57600080fd5b506102df6104da366004612a5a565b610e57565b3480156104eb57600080fd5b506103646104fa366004612b85565b610ea5565b34801561050b57600080fd5b506015546102a2906001600160a01b031681565b34801561052b57600080fd5b5060155461032390600160a81b900460ff1681565b34801561054c57600080fd5b506102df61055b366004612a5a565b610f34565b34801561056c57600080fd5b5061032361057b366004612a5a565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105a557600080fd5b5061036460125481565b3480156105bb57600080fd5b5060155461032390600160b01b900460ff1681565b3480156105dc57600080fd5b506103646105eb366004612a5a565b611087565b3480156105fc57600080fd5b506102df6110e9565b34801561061157600080fd5b5061036460165481565b34801561062757600080fd5b50610323610636366004612a5a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561066057600080fd5b506000546001600160a01b03166102a2565b34801561067e57600080fd5b506102df61068d366004612b6d565b61115d565b34801561069e57600080fd5b506102f66111c7565b3480156106b357600080fd5b506103236106c2366004612b0a565b6111d6565b3480156106d357600080fd5b506103236106e2366004612b0a565b611225565b3480156106f357600080fd5b5061036460105481565b34801561070957600080fd5b506102df610718366004612b0a565b611232565b34801561072957600080fd5b506102df610738366004612b35565b611304565b34801561074957600080fd5b5061036460175481565b34801561075f57600080fd5b506102df61076e366004612b6d565b611386565b34801561077f57600080fd5b5061036461078e366004612a92565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156107c557600080fd5b506102df6107d4366004612b35565b6113d6565b3480156107e557600080fd5b506102df6107f4366004612a5a565b61141e565b34801561080557600080fd5b506102df610814366004612b6d565b611469565b34801561082557600080fd5b506102df610834366004612a5a565b611498565b34801561084557600080fd5b506102df611582565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161087890612c58565b60405180910390fd5b600f601054601254836108949190612cfd565b61089e9190612cfd565b11156108bc5760405162461bcd60e51b815260040161087890612c29565b600e55565b6060600b80546108d090612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90612d6b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b60006109603384846115e6565b5060015b92915050565b6000546001600160a01b031633146109945760405162461bcd60e51b815260040161087890612c58565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109e05760405162461bcd60e51b815260040161087890612c58565b6109e98161170a565b50565b60006109f9848484611a56565b610a4b8433610a4685604051806060016040528060288152602001612dfb602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611d77565b6115e6565b5060019392505050565b6000600954821115610abc5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610878565b6000610ac6611da3565b9050610ad28382611dc6565b9150505b919050565b6000546001600160a01b03163314610b055760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03811660009081526005602052604090205460ff16610b6d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610878565b60005b600654811015610cc757816001600160a01b031660068281548110610ba557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610cb55760068054610bd090600190612d54565b81548110610bee57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610c2857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610c8e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610cc7565b80610cbf81612da6565b915050610b70565b5050565b6000546001600160a01b03163314610cf55760405162461bcd60e51b815260040161087890612c58565b600f81601254600e54610d089190612cfd565b610d129190612cfd565b1115610d305760405162461bcd60e51b815260040161087890612c29565b601055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610960918590610a469086611dd9565b3360008181526005602052604090205460ff1615610de05760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610878565b6000610deb83611de5565b5050506001600160a01b038616600090815260016020526040902054939450610e1993925084915050611e40565b6001600160a01b038316600090815260016020526040902055600954610e3f9082611e40565b600955600a54610e4f9084611dd9565b600a55505050565b6000546001600160a01b03163314610e815760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600854831115610ef95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610878565b81610f19576000610f0984611de5565b5094965061096495505050505050565b6000610f2484611de5565b5093965061096495505050505050565b6000546001600160a01b03163314610f5e5760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03811660009081526005602052604090205460ff1615610fc75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610878565b6001600160a01b03811660009081526001602052604090205415611021576001600160a01b03811660009081526001602052604090205461100790610a55565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156110c757506001600160a01b038116600090815260026020526040902054610ad6565b6001600160a01b03821660009081526001602052604090205461096490610a55565b6000546001600160a01b031633146111135760405162461bcd60e51b815260040161087890612c58565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111875760405162461bcd60e51b815260040161087890612c58565b600f60105482600e5461119a9190612cfd565b6111a49190612cfd565b11156111c25760405162461bcd60e51b815260040161087890612c29565b601255565b6060600c80546108d090612d6b565b60006109603384610a4685604051806060016040528060258152602001612e23602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611d77565b6000610960338484611a56565b6000546001600160a01b0316331461125c5760405162461bcd60e51b815260040161087890612c58565b816001600160a01b03811663a9059cbb61127e6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190612b51565b50505050565b6000546001600160a01b0316331461132e5760405162461bcd60e51b815260040161087890612c58565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061137b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113b05760405162461bcd60e51b815260040161087890612c58565b6113d060646113ca83600854611e4c90919063ffffffff16565b90611dc6565b60165550565b6000546001600160a01b031633146114005760405162461bcd60e51b815260040161087890612c58565b60158054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114485760405162461bcd60e51b815260040161087890612c58565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146114935760405162461bcd60e51b815260040161087890612c58565b601755565b6000546001600160a01b031633146114c25760405162461bcd60e51b815260040161087890612c58565b6001600160a01b0381166115275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610878565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115ac5760405162461bcd60e51b815260040161087890612c58565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156109e9573d6000803e3d6000fd5b6001600160a01b0383166116485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610878565b6001600160a01b0382166116a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610878565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190612a76565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c857600080fd5b505afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190612a76565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561184657600080fd5b505afa15801561185a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187e9190612a76565b601580546001600160a01b0319166001600160a01b03929092169182179055611a3357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118da57600080fd5b505afa1580156118ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119129190612a76565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561195a57600080fd5b505afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190612a76565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119da57600080fd5b505af11580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190612a76565b601580546001600160a01b0319166001600160a01b03929092169190911790555b601480546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b038316611aba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610878565b6001600160a01b038216611b1c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610878565b60008111611b7e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610878565b6000546001600160a01b03848116911614801590611baa57506000546001600160a01b03838116911614155b15611c1257601654811115611c125760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610878565b601554600160b01b900460ff16158015611c5057506015546001600160a01b0383811691161480611c5057506015546001600160a01b038481169116145b15611c9d5760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c656400006044820152606401610878565b6000611ca830611087565b90506016548110611cb857506016545b60175481108015908190611cd65750601554600160a01b900460ff16155b8015611cf057506015546001600160a01b03868116911614155b8015611d055750601554600160a81b900460ff165b15611d18576017549150611d1882611e58565b6001600160a01b03851660009081526004602052604090205460019060ff1680611d5a57506001600160a01b03851660009081526004602052604090205460ff165b15611d63575060005b611d6f86868684611eff565b505050505050565b60008184841115611d9b5760405162461bcd60e51b81526004016108789190612bd6565b505050900390565b6000806000611db0612099565b9092509050611dbf8282611dc6565b9250505090565b6000611dd28284612d15565b9392505050565b6000611dd28284612cfd565b6000806000806000806000806000806000611dff8c612256565b93509350935093506000806000611e208f878787611e1b611da3565b6122ab565b919f509d509b509599509397509195509350505050919395979092949650565b6000611dd28284612d54565b6000611dd28284612d35565b6015805460ff60a01b1916600160a01b1790556000611e78826002611dc6565b90506000611e868383611e40565b905047611e928361230d565b6000611e9e4783611e40565b9050611eaa838261248a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff60a01b19169055505050565b80611f2957611f29600e8054600f5560108054601155601280546013556000928390559082905555565b6001600160a01b03841660009081526005602052604090205460ff168015611f6a57506001600160a01b03831660009081526005602052604090205460ff16155b15611f7f57611f7a8484846125b2565b61207d565b6001600160a01b03841660009081526005602052604090205460ff16158015611fc057506001600160a01b03831660009081526005602052604090205460ff165b15611fd057611f7a8484846126f8565b6001600160a01b03841660009081526005602052604090205460ff1615801561201257506001600160a01b03831660009081526005602052604090205460ff16155b1561202257611f7a8484846127b7565b6001600160a01b03841660009081526005602052604090205460ff16801561206257506001600160a01b03831660009081526005602052604090205460ff165b1561207257611f7a848484612811565b61207d8484846127b7565b806112fe576112fe600f54600e55601154601055601354601255565b6009546008546000918291825b600654811015612224578260016000600684815481106120d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061214f575081600260006006848154811061212857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121665760095460085494509450505050612252565b6121ba600160006006848154811061218e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e40565b925061221060026000600684815481106121e457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e40565b91508061221c81612da6565b9150506120a6565b5060085460095461223491611dc6565b82101561224c57600954600854935093505050612252565b90925090505b9091565b60008060008060006122678661289a565b90506000612274876128b6565b90506000612281886128d2565b9050600061229b8261229585818d89611e40565b90611e40565b9993985091965094509092505050565b60008080806122ba8986611e4c565b905060006122c88987611e4c565b905060006122d68988611e4c565b905060006122e48989611e4c565b905060006122f88261229585818989611e40565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061235057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123a457600080fd5b505afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190612a76565b816001815181106123fd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260145461242391309116846115e6565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245c908590600090869030904290600401612c8d565b600060405180830381600087803b15801561247657600080fd5b505af1158015611d6f573d6000803e3d6000fd5b6014546124a29030906001600160a01b0316846115e6565b6014546001600160a01b031663f305d7198230856000806124cb6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561252e57600080fd5b505af1158015612542573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125679190612ba9565b50506015546040518481526001600160a01b03909116915030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008060008060008060006125c688611de5565b965096509650965096509650965061260c88600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461263b9088611e40565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461266a9087611dd9565b6001600160a01b038a1660009081526001602052604090205561268c826128ee565b61269581612977565b61269f8584612a36565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516126e491815260200190565b60405180910390a350505050505050505050565b600080600080600080600061270c88611de5565b965096509650965096509650965061275287600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546127889085611dd9565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461266a9087611dd9565b60008060008060008060006127cb88611de5565b965096509650965096509650965061263b87600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b600080600080600080600061282588611de5565b965096509650965096509650965061286b88600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611e4090919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546127529088611e40565b600061096460646113ca600e5485611e4c90919063ffffffff16565b600061096460646113ca60125485611e4c90919063ffffffff16565b600061096460646113ca60105485611e4c90919063ffffffff16565b60006128f8611da3565b905060006129068383611e4c565b306000908152600160205260409020549091506129239082611dd9565b3060009081526001602090815260408083209390935560059052205460ff161561297257306000908152600260205260409020546129619084611dd9565b306000908152600260205260409020555b505050565b6000612981611da3565b9050600061298f8383611e4c565b6007546001600160a01b03166000908152600160205260409020549091506129b79082611dd9565b600780546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615612972576007546001600160a01b0316600090815260026020526040902054612a169084611dd9565b6007546001600160a01b0316600090815260026020526040902055505050565b600954612a439083611e40565b600955600a54612a539082611dd9565b600a555050565b600060208284031215612a6b578081fd5b8135611dd281612dd7565b600060208284031215612a87578081fd5b8151611dd281612dd7565b60008060408385031215612aa4578081fd5b8235612aaf81612dd7565b91506020830135612abf81612dd7565b809150509250929050565b600080600060608486031215612ade578081fd5b8335612ae981612dd7565b92506020840135612af981612dd7565b929592945050506040919091013590565b60008060408385031215612b1c578182fd5b8235612b2781612dd7565b946020939093013593505050565b600060208284031215612b46578081fd5b8135611dd281612dec565b600060208284031215612b62578081fd5b8151611dd281612dec565b600060208284031215612b7e578081fd5b5035919050565b60008060408385031215612b97578182fd5b823591506020830135612abf81612dec565b600080600060608486031215612bbd578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612c0257858101830151858201604001528201612be6565b81811115612c135783604083870101525b50601f01601f1916929092016040019392505050565b602080825260159082015274546f74616c2066656573206578636565642031352560581b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612cdc5784516001600160a01b031683529383019391830191600101612cb7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612d1057612d10612dc1565b500190565b600082612d3057634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612d4f57612d4f612dc1565b500290565b600082821015612d6657612d66612dc1565b500390565b600181811c90821680612d7f57607f821691505b60208210811415612da057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dba57612dba612dc1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109e957600080fd5b80151581146109e957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c5947515526c45fdcc78d007342f882152f70cf49ea15a57ad5c727010d32b0564736f6c63430008030033

Deployed Bytecode Sourcemap

32630:20927:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33080:77;;;;;;;;;;-1:-1:-1;33080:77:0;;;;-1:-1:-1;;;;;33080:77:0;;;;;;-1:-1:-1;;;;;3266:32:1;;;3248:51;;3236:2;3221:18;33080:77:0;;;;;;;;39941:181;;;;;;;;;;-1:-1:-1;39941:181:0;;;;;:::i;:::-;;:::i;:::-;;34836:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35748:161::-;;;;;;;;;;-1:-1:-1;35748:161:0;;;;;:::i;:::-;;:::i;:::-;;;4675:14:1;;4668:22;4650:41;;4638:2;4623:18;35748:161:0;4605:92:1;41005:115:0;;;;;;;;;;-1:-1:-1;41005:115:0;;;;;:::i;:::-;;:::i;36869:87::-;;;;;;;;;;-1:-1:-1;36938:10:0;;36869:87;;;11501:25:1;;;11489:2;11474:18;36869:87:0;11456:76:1;41773:114:0;;;;;;;;;;-1:-1:-1;41773:114:0;;;;;:::i;:::-;;:::i;33753:41::-;;;;;;;;;;-1:-1:-1;33753:41:0;;;;-1:-1:-1;;;;;33753:41:0;;;35113:95;;;;;;;;;;-1:-1:-1;35193:7:0;;35113:95;;35917:313;;;;;;;;;;-1:-1:-1;35917:313:0;;;;;:::i;:::-;;:::i;37796:253::-;;;;;;;;;;-1:-1:-1;37796:253:0;;;;;:::i;:::-;;:::i;35022:83::-;;;;;;;;;;-1:-1:-1;35088:9:0;;35022:83;;35088:9;;;;12991:36:1;;12979:2;12964:18;35022:83:0;12946:87:1;38512:479:0;;;;;;;;;;-1:-1:-1;38512:479:0;;;;;:::i;:::-;;:::i;40130:181::-;;;;;;;;;;-1:-1:-1;40130:181:0;;;;;:::i;:::-;;:::i;36238:218::-;;;;;;;;;;-1:-1:-1;36238:218:0;;;;;:::i;:::-;;:::i;33484:26::-;;;;;;;;;;;;;;;;36964:378;;;;;;;;;;-1:-1:-1;36964:378:0;;;;;:::i;:::-;;:::i;39696:111::-;;;;;;;;;;-1:-1:-1;39696:111:0;;;;;:::i;:::-;;:::i;37350:438::-;;;;;;;;;;-1:-1:-1;37350:438:0;;;;;:::i;:::-;;:::i;33801:28::-;;;;;;;;;;-1:-1:-1;33801:28:0;;;;-1:-1:-1;;;;;33801:28:0;;;33870:40;;;;;;;;;;-1:-1:-1;33870:40:0;;;;-1:-1:-1;;;33870:40:0;;;;;;38057:447;;;;;;;;;;-1:-1:-1;38057:447:0;;;;;:::i;:::-;;:::i;45922:123::-;;;;;;;;;;-1:-1:-1;45922:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;46010:27:0;45986:4;46010:27;;;:18;:27;;;;;;;;;45922:123;33652:32;;;;;;;;;;;;;;;;33917:31;;;;;;;;;;-1:-1:-1;33917:31:0;;;;-1:-1:-1;;;33917:31:0;;;;;;35216:198;;;;;;;;;;-1:-1:-1;35216:198:0;;;;;:::i;:::-;;:::i;24113:148::-;;;;;;;;;;;;;:::i;33961:37::-;;;;;;;;;;;;;;;;36741:120;;;;;;;;;;-1:-1:-1;36741:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;36833:20:0;36809:4;36833:20;;;:11;:20;;;;;;;;;36741:120;23462:87;;;;;;;;;;-1:-1:-1;23508:7:0;23535:6;-1:-1:-1;;;;;23535:6:0;23462:87;;40323:205;;;;;;;;;;-1:-1:-1;40323:205:0;;;;;:::i;:::-;;:::i;34927:87::-;;;;;;;;;;;;;:::i;36464:269::-;;;;;;;;;;-1:-1:-1;36464:269:0;;;;;:::i;:::-;;:::i;35422:167::-;;;;;;;;;;-1:-1:-1;35422:167:0;;;;;:::i;:::-;;:::i;33571:26::-;;;;;;;;;;;;;;;;53252:175;;;;;;;;;;-1:-1:-1;53252:175:0;;;;;:::i;:::-;;:::i;40709:171::-;;;;;;;;;;-1:-1:-1;40709:171:0;;;;;:::i;:::-;;:::i;34005:60::-;;;;;;;;;;;;;;;;40539:162;;;;;;;;;;-1:-1:-1;40539:162:0;;;;;:::i;:::-;;:::i;35597:143::-;;;;;;;;;;-1:-1:-1;35597:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;35705:18:0;;;35678:7;35705:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;35597:143;40892:101;;;;;;;;;;-1:-1:-1;40892:101:0;;;;;:::i;:::-;;:::i;39819:110::-;;;;;;;;;;-1:-1:-1;39819:110:0;;;;;:::i;:::-;;:::i;41132:138::-;;;;;;;;;;-1:-1:-1;41132:138:0;;;;;:::i;:::-;;:::i;24416:244::-;;;;;;;;;;-1:-1:-1;24416:244:0;;;;;:::i;:::-;;:::i;53439:113::-;;;;;;;;;;;;;:::i;39941:181::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;;;;;;;;;40059:2:::1;40048:7;;40032:13;;40023:6;:22;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;40015:72;;;;-1:-1:-1::0;;;40015:72:0::1;;;;;;;:::i;:::-;40098:7;:16:::0;39941:181::o;34836:83::-;34873:13;34906:5;34899:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34836:83;:::o;35748:161::-;35823:4;35840:39;14249:10;35863:7;35872:6;35840:8;:39::i;:::-;-1:-1:-1;35897:4:0;35748:161;;;;;:::o;41005:115::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;41084:17:::1;:28:::0;;-1:-1:-1;;;;;;41084:28:0::1;-1:-1:-1::0;;;;;41084:28:0;;;::::1;::::0;;;::::1;::::0;;41005:115::o;41773:114::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;41850:28:::1;41870:7;41850:19;:28::i;:::-;41773:114:::0;:::o;35917:313::-;36015:4;36032:36;36042:6;36050:9;36061:6;36032:9;:36::i;:::-;36079:121;36088:6;14249:10;36110:89;36148:6;36110:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36110:19:0;;;;;;:11;:19;;;;;;;;14249:10;36110:33;;;;;;;;;;:37;:89::i;:::-;36079:8;:121::i;:::-;-1:-1:-1;36218:4:0;35917:313;;;;;:::o;37796:253::-;37862:7;37901;;37890;:18;;37882:73;;;;-1:-1:-1;;;37882:73:0;;6510:2:1;37882:73:0;;;6492:21:1;6549:2;6529:18;;;6522:30;6588:34;6568:18;;;6561:62;-1:-1:-1;;;6639:18:1;;;6632:40;6689:19;;37882:73:0;6482:232:1;37882:73:0;37966:19;37989:10;:8;:10::i;:::-;37966:33;-1:-1:-1;38017:24:0;:7;37966:33;38017:11;:24::i;:::-;38010:31;;;37796:253;;;;:::o;38512:479::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38594:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38586:60;;;::::0;-1:-1:-1;;;38586:60:0;;8087:2:1;38586:60:0::1;::::0;::::1;8069:21:1::0;8126:2;8106:18;;;8099:30;8165:29;8145:18;;;8138:57;8212:18;;38586:60:0::1;8059:177:1::0;38586:60:0::1;38662:9;38657:327;38681:9;:16:::0;38677:20;::::1;38657:327;;;38739:7;-1:-1:-1::0;;;;;38723:23:0::1;:9;38733:1;38723:12;;;;;;-1:-1:-1::0;;;38723:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38723:12:0::1;:23;38719:254;;;38782:9;38792:16:::0;;:20:::1;::::0;38811:1:::1;::::0;38792:20:::1;:::i;:::-;38782:31;;;;;;-1:-1:-1::0;;;38782:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;38767:9:::1;:12:::0;;-1:-1:-1;;;;;38782:31:0;;::::1;::::0;38777:1;;38767:12;::::1;;;-1:-1:-1::0;;;38767:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;38767:46:0::1;-1:-1:-1::0;;;;;38767:46:0;;::::1;;::::0;;38832:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;38871:11:::1;:20:::0;;;;:28;;-1:-1:-1;;38871:28:0::1;::::0;;38918:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;38918:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38918:15:0;;;;;-1:-1:-1;;;;;;38918:15:0::1;::::0;;;;;38952:5:::1;;38719:254;38699:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38657:327;;;;38512:479:::0;:::o;40130:181::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;40248:2:::1;40238:6;40222:13;;40212:7;;:23;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;40204:72;;;;-1:-1:-1::0;;;40204:72:0::1;;;;;;;:::i;:::-;40287:7;:16:::0;40130:181::o;36238:218::-;14249:10;36326:4;36375:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36375:34:0;;;;;;;;;;36326:4;;36343:83;;36366:7;;36375:50;;36414:10;36375:38;:50::i;36964:378::-;14249:10;37016:14;37065:19;;;:11;:19;;;;;;;;37064:20;37056:77;;;;-1:-1:-1;;;37056:77:0;;11144:2:1;37056:77:0;;;11126:21:1;11183:2;11163:18;;;11156:30;11222:34;11202:18;;;11195:62;-1:-1:-1;;;11273:18:1;;;11266:42;11325:19;;37056:77:0;11116:234:1;37056:77:0;37145:15;37170:19;37181:7;37170:10;:19::i;:::-;-1:-1:-1;;;;;;;;37218:15:0;;;;;;:7;:15;;;;;;37144:45;;-1:-1:-1;37218:28:0;;:15;-1:-1:-1;37144:45:0;;-1:-1:-1;;37218:19:0;:28::i;:::-;-1:-1:-1;;;;;37200:15:0;;;;;;:7;:15;;;;;:46;37267:7;;:20;;37279:7;37267:11;:20::i;:::-;37257:7;:30;37311:10;;:23;;37326:7;37311:14;:23::i;:::-;37298:10;:36;-1:-1:-1;;;36964:378:0:o;39696:111::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39765:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;39765:34:0::1;39795:4;39765:34;::::0;;39696:111::o;37350:438::-;37440:7;37479;;37468;:18;;37460:62;;;;-1:-1:-1;;;37460:62:0;;8443:2:1;37460:62:0;;;8425:21:1;8482:2;8462:18;;;8455:30;8521:33;8501:18;;;8494:61;8572:18;;37460:62:0;8415:181:1;37460:62:0;37538:17;37533:248;;37573:15;37598:19;37609:7;37598:10;:19::i;:::-;-1:-1:-1;37572:45:0;;-1:-1:-1;37632:14:0;;-1:-1:-1;;;;;;37632:14:0;37533:248;37681:23;37713:19;37724:7;37713:10;:19::i;:::-;-1:-1:-1;37679:53:0;;-1:-1:-1;37747:22:0;;-1:-1:-1;;;;;;37747:22:0;38057:447;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38254:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38253:21;38245:61;;;::::0;-1:-1:-1;;;38245:61:0;;7731:2:1;38245:61:0::1;::::0;::::1;7713:21:1::0;7770:2;7750:18;;;7743:30;7809:29;7789:18;;;7782:57;7856:18;;38245:61:0::1;7703:177:1::0;38245:61:0::1;-1:-1:-1::0;;;;;38320:16:0;::::1;38339:1;38320:16:::0;;;:7:::1;:16;::::0;;;;;:20;38317:108:::1;;-1:-1:-1::0;;;;;38396:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;38376:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;38357:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;38317:108:::1;-1:-1:-1::0;;;;;38435:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;38435:27:0::1;38458:4;38435:27:::0;;::::1;::::0;;;38473:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;38473:23:0::1;::::0;;::::1;::::0;;38057:447::o;35216:198::-;-1:-1:-1;;;;;35306:20:0;;35282:7;35306:20;;;:11;:20;;;;;;;;35302:49;;;-1:-1:-1;;;;;;35335:16:0;;;;;;:7;:16;;;;;;35328:23;;35302:49;-1:-1:-1;;;;;35389:16:0;;;;;;:7;:16;;;;;;35369:37;;:19;:37::i;24113:148::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;24220:1:::1;24204:6:::0;;24183:40:::1;::::0;-1:-1:-1;;;;;24204:6:0;;::::1;::::0;24183:40:::1;::::0;24220:1;;24183:40:::1;24251:1;24234:19:::0;;-1:-1:-1;;;;;;24234:19:0::1;::::0;;24113:148::o;40323:205::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;40453:2:::1;40442:7;;40427:12;40417:7;;:22;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;40409:72;;;;-1:-1:-1::0;;;40409:72:0::1;;;;;;;:::i;:::-;40492:13;:28:::0;40323:205::o;34927:87::-;34966:13;34999:7;34992:14;;;;;:::i;36464:269::-;36557:4;36574:129;14249:10;36597:7;36606:96;36645:15;36606:96;;;;;;;;;;;;;;;;;14249:10;36606:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36606:34:0;;;;;;;;;;;;:38;:96::i;35422:167::-;35500:4;35517:42;14249:10;35541:9;35552:6;35517:9;:42::i;53252:175::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;53365:10;-1:-1:-1;;;;;53387:14:0;::::1;;53402:7;23508::::0;23535:6;-1:-1:-1;;;;;23535:6:0;23462:87;;53402:7:::1;53387:32;::::0;-1:-1:-1;;;;;;53387:32:0::1;::::0;;;;;;-1:-1:-1;;;;;3811:32:1;;;53387::0::1;::::0;::::1;3793:51:1::0;3860:18;;;3853:34;;;3766:18;;53387:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23753:1;53252:175:::0;;:::o;40709:171::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;40786:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;40786:32:0::1;-1:-1:-1::0;;;;40786:32:0;;::::1;;::::0;;40834:38:::1;::::0;::::1;::::0;::::1;::::0;40810:8;4675:14:1;4668:22;4650:41;;4638:2;4623:18;;4605:92;40834:38:0::1;;;;;;;;40709:171:::0;:::o;40539:162::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;40633:60:::1;40677:5;40633:25;40645:12;40633:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;40618:12;:75:::0;-1:-1:-1;40539:162:0:o;40892:101::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;40963:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;40963:22:0::1;-1:-1:-1::0;;;;40963:22:0;;::::1;::::0;;;::::1;::::0;;40892:101::o;39819:110::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39886:27:0::1;39916:5;39886:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;39886:35:0::1;::::0;;39819:110::o;41132:138::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;41223:29:::1;:39:::0;41132:138::o;24416:244::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24505:22:0;::::1;24497:73;;;::::0;-1:-1:-1;;;24497:73:0;;6921:2:1;24497:73:0::1;::::0;::::1;6903:21:1::0;6960:2;6940:18;;;6933:30;6999:34;6979:18;;;6972:62;-1:-1:-1;;;7050:18:1;;;7043:36;7096:19;;24497:73:0::1;6893:228:1::0;24497:73:0::1;24607:6;::::0;;24586:38:::1;::::0;-1:-1:-1;;;;;24586:38:0;;::::1;::::0;24607:6;::::1;::::0;24586:38:::1;::::0;::::1;24635:6;:17:::0;;-1:-1:-1;;;;;;24635:17:0::1;-1:-1:-1::0;;;;;24635:17:0;;;::::1;::::0;;;::::1;::::0;;24416:244::o;53439:113::-;23508:7;23535:6;-1:-1:-1;;;;;23535:6:0;14249:10;23682:23;23674:68;;;;-1:-1:-1;;;23674:68:0;;;;;;;:::i;:::-;23508:7;23535:6;;53496:48:::1;::::0;-1:-1:-1;;;;;23535:6:0;;;;53522:21:::1;53496:48:::0;::::1;;;::::0;53522:21;;53496:48;23508:7;53496:48;53522:21;23535:6;53496:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;46053:337:::0;-1:-1:-1;;;;;46146:19:0;;46138:68;;;;-1:-1:-1;;;46138:68:0;;10739:2:1;46138:68:0;;;10721:21:1;10778:2;10758:18;;;10751:30;10817:34;10797:18;;;10790:62;-1:-1:-1;;;10868:18:1;;;10861:34;10912:19;;46138:68:0;10711:226:1;46138:68:0;-1:-1:-1;;;;;46225:21:0;;46217:68;;;;-1:-1:-1;;;46217:68:0;;7328:2:1;46217:68:0;;;7310:21:1;7367:2;7347:18;;;7340:30;7406:34;7386:18;;;7379:62;-1:-1:-1;;;7457:18:1;;;7450:32;7499:19;;46217:68:0;7300:224:1;46217:68:0;-1:-1:-1;;;;;46298:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;46350:32;;11501:25:1;;;46350:32:0;;11474:18:1;46350:32:0;;;;;;;46053:337;;;:::o;41282:479::-;41347:35;41404:7;41347:65;;41457:16;-1:-1:-1;;;;;41457:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41439:53:0;;41501:4;41508:16;-1:-1:-1;;;;;41508:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41439:93;;-1:-1:-1;;;;;;41439:93:0;;;;;;;-1:-1:-1;;;;;3540:15:1;;;41439:93:0;;;3522:34:1;3592:15;;3572:18;;;3565:43;3457:18;;41439:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41423:13;:109;;-1:-1:-1;;;;;;41423:109:0;-1:-1:-1;;;;;41423:109:0;;;;;;;;;41543:157;;41622:16;-1:-1:-1;;;;;41622:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41604:56:0;;41669:4;41676:16;-1:-1:-1;;;;;41676:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41604:96;;-1:-1:-1;;;;;;41604:96:0;;;;;;;-1:-1:-1;;;;;3540:15:1;;;41604:96:0;;;3522:34:1;3592:15;;3572:18;;;3565:43;3457:18;;41604:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41588:13;:112;;-1:-1:-1;;;;;;41588:112:0;-1:-1:-1;;;;;41588:112:0;;;;;;;;;;41543:157;41711:15;:34;;-1:-1:-1;;;;;;41711:34:0;-1:-1:-1;;;;;41711:34:0;;;;;;;;;;-1:-1:-1;41282:479:0:o;46398:1958::-;-1:-1:-1;;;;;46520:18:0;;46512:68;;;;-1:-1:-1;;;46512:68:0;;10333:2:1;46512:68:0;;;10315:21:1;10372:2;10352:18;;;10345:30;10411:34;10391:18;;;10384:62;-1:-1:-1;;;10462:18:1;;;10455:35;10507:19;;46512:68:0;10305:227:1;46512:68:0;-1:-1:-1;;;;;46599:16:0;;46591:64;;;;-1:-1:-1;;;46591:64:0;;5747:2:1;46591:64:0;;;5729:21:1;5786:2;5766:18;;;5759:30;5825:34;5805:18;;;5798:62;-1:-1:-1;;;5876:18:1;;;5869:33;5919:19;;46591:64:0;5719:225:1;46591:64:0;46683:1;46674:6;:10;46666:64;;;;-1:-1:-1;;;46666:64:0;;9923:2:1;46666:64:0;;;9905:21:1;9962:2;9942:18;;;9935:30;10001:34;9981:18;;;9974:62;-1:-1:-1;;;10052:18:1;;;10045:39;10101:19;;46666:64:0;9895:231:1;46666:64:0;23508:7;23535:6;-1:-1:-1;;;;;46744:15:0;;;23535:6;;46744:15;;;;:32;;-1:-1:-1;23508:7:0;23535:6;-1:-1:-1;;;;;46763:13:0;;;23535:6;;46763:13;;46744:32;46741:125;;;46809:12;;46799:6;:22;;46791:75;;;;-1:-1:-1;;;46791:75:0;;8803:2:1;46791:75:0;;;8785:21:1;8842:2;8822:18;;;8815:30;8881:34;8861:18;;;8854:62;-1:-1:-1;;;8932:18:1;;;8925:38;8980:19;;46791:75:0;8775:230:1;46791:75:0;46895:11;;-1:-1:-1;;;46895:11:0;;;;46894:12;:62;;;;-1:-1:-1;46917:13:0;;-1:-1:-1;;;;;46911:19:0;;;46917:13;;46911:19;;:44;;-1:-1:-1;46942:13:0;;-1:-1:-1;;;;;46934:21:0;;;46942:13;;46934:21;46911:44;46891:120;;;46971:40;;-1:-1:-1;;;46971:40:0;;6151:2:1;46971:40:0;;;6133:21:1;6190:2;6170:18;;;6163:30;6229:32;6209:18;;;6202:60;6279:18;;46971:40:0;6123:180:1;46891:120:0;47306:28;47337:24;47355:4;47337:9;:24::i;:::-;47306:55;;47409:12;;47385:20;:36;47382:112;;-1:-1:-1;47470:12:0;;47382:112;47565:29;;47541:53;;;;;;;47623;;-1:-1:-1;47660:16:0;;-1:-1:-1;;;47660:16:0;;;;47659:17;47623:53;:91;;;;-1:-1:-1;47701:13:0;;-1:-1:-1;;;;;47693:21:0;;;47701:13;;47693:21;;47623:91;:129;;;;-1:-1:-1;47731:21:0;;-1:-1:-1;;;47731:21:0;;;;47623:129;47605:318;;;47802:29;;47779:52;;47875:36;47890:20;47875:14;:36::i;:::-;-1:-1:-1;;;;;48131:24:0;;48004:12;48131:24;;;:18;:24;;;;;;48019:4;;48131:24;;;:50;;-1:-1:-1;;;;;;48159:22:0;;;;;;:18;:22;;;;;;;;48131:50;48128:96;;;-1:-1:-1;48207:5:0;48128:96;48310:38;48325:4;48330:2;48333:6;48340:7;48310:14;:38::i;:::-;46398:1958;;;;;;:::o;11619:206::-;11705:7;11766:12;11758:6;;;;11750:29;;;;-1:-1:-1;;;11750:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11801:5:0;;;11619:206::o;43531:163::-;43572:7;43593:15;43610;43629:19;:17;:19::i;:::-;43592:56;;-1:-1:-1;43592:56:0;-1:-1:-1;43666:20:0;43592:56;;43666:11;:20::i;:::-;43659:27;;;;43531:163;:::o;10477:98::-;10535:7;10562:5;10566:1;10562;:5;:::i;:::-;10555:12;10477:98;-1:-1:-1;;;10477:98:0:o;9340:::-;9398:7;9425:5;9429:1;9425;:5;:::i;42148:454::-;42207:7;42216;42225;42234;42243;42252;42261;42282:23;42307:12;42321:18;42341:12;42357:20;42369:7;42357:11;:20::i;:::-;42281:96;;;;;;;;42389:15;42406:23;42431:12;42447:56;42459:7;42468:4;42474:10;42486:4;42492:10;:8;:10::i;:::-;42447:11;:56::i;:::-;42388:115;;-1:-1:-1;42388:115:0;-1:-1:-1;42388:115:0;-1:-1:-1;42554:15:0;;-1:-1:-1;42571:4:0;;-1:-1:-1;42577:10:0;;-1:-1:-1;42589:4:0;-1:-1:-1;;;;42148:454:0;;;;;;;;;:::o;9721:98::-;9779:7;9806:5;9810:1;9806;:5;:::i;10078:98::-;10136:7;10163:5;10167:1;10163;:5;:::i;48364:985::-;34372:16;:23;;-1:-1:-1;;;;34372:23:0;-1:-1:-1;;;34372:23:0;;;;48515:27:::1;:20:::0;48540:1:::1;48515:24;:27::i;:::-;48500:42:::0;-1:-1:-1;48553:17:0::1;48573:30;:20:::0;48500:42;48573:24:::1;:30::i;:::-;48553:50:::0;-1:-1:-1;48906:21:0::1;48972:22;48989:4:::0;48972:16:::1;:22::i;:::-;49125:18;49146:41;:21;49172:14:::0;49146:25:::1;:41::i;:::-;49125:62;;49237:35;49250:9;49261:10;49237:12;:35::i;:::-;49298:43;::::0;;12727:25:1;;;12783:2;12768:18;;12761:34;;;12811:18;;;12804:34;;;49298:43:0::1;::::0;12715:2:1;12700:18;49298:43:0::1;;;;;;;-1:-1:-1::0;;34418:16:0;:24;;-1:-1:-1;;;;34418:24:0;;;-1:-1:-1;;;48364:985:0:o;50615:834::-;50726:7;50722:40;;50748:14;45556:7;;;45538:15;:25;45592:7;;;45574:15;:25;45634:13;;;45610:21;:37;-1:-1:-1;45668:11:0;;;;45690;;;;45712:17;45495:242;50748:14;-1:-1:-1;;;;;50787:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;50811:22:0;;;;;;:11;:22;;;;;;;;50810:23;50787:46;50783:597;;;50850:48;50872:6;50880:9;50891:6;50850:21;:48::i;:::-;50783:597;;;-1:-1:-1;;;;;50921:19:0;;;;;;:11;:19;;;;;;;;50920:20;:46;;;;-1:-1:-1;;;;;;50944:22:0;;;;;;:11;:22;;;;;;;;50920:46;50916:464;;;50983:46;51003:6;51011:9;51022:6;50983:19;:46::i;50916:464::-;-1:-1:-1;;;;;51052:19:0;;;;;;:11;:19;;;;;;;;51051:20;:47;;;;-1:-1:-1;;;;;;51076:22:0;;;;;;:11;:22;;;;;;;;51075:23;51051:47;51047:333;;;51115:44;51133:6;51141:9;51152:6;51115:17;:44::i;51047:333::-;-1:-1:-1;;;;;51181:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;51204:22:0;;;;;;:11;:22;;;;;;;;51181:45;51177:203;;;51243:48;51265:6;51273:9;51284:6;51243:21;:48::i;51177:203::-;51324:44;51342:6;51350:9;51361:6;51324:17;:44::i;:::-;51404:7;51400:41;;51426:15;45803;;45793:7;:25;45839:15;;45829:7;:25;45881:21;;45865:13;:37;45749:161;43702:561;43799:7;;43835;;43752;;;;;43859:289;43883:9;:16;43879:20;;43859:289;;;43949:7;43925;:21;43933:9;43943:1;43933:12;;;;;;-1:-1:-1;;;43933:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43933:12:0;43925:21;;;;;;;;;;;;;:31;;:66;;;43984:7;43960;:21;43968:9;43978:1;43968:12;;;;;;-1:-1:-1;;;43968:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43968:12:0;43960:21;;;;;;;;;;;;;:31;43925:66;43921:97;;;44001:7;;44010;;43993:25;;;;;;;;;43921:97;44043:34;44055:7;:21;44063:9;44073:1;44063:12;;;;;;-1:-1:-1;;;44063:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44063:12:0;44055:21;;;;;;;;;;;;;44043:7;;:11;:34::i;:::-;44033:44;;44102:34;44114:7;:21;44122:9;44132:1;44122:12;;;;;;-1:-1:-1;;;44122:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44122:12:0;44114:21;;;;;;;;;;;;;44102:7;;:11;:34::i;:::-;44092:44;-1:-1:-1;43901:3:0;;;;:::i;:::-;;;;43859:289;;;-1:-1:-1;44184:7:0;;44172;;:20;;:11;:20::i;:::-;44162:7;:30;44158:61;;;44202:7;;44211;;44194:25;;;;;;;;44158:61;44238:7;;-1:-1:-1;44247:7:0;-1:-1:-1;43702:561:0;;;:::o;42610:405::-;42670:7;42679;42688;42697;42717:12;42732:24;42748:7;42732:15;:24::i;:::-;42717:39;;42767:18;42788:30;42810:7;42788:21;:30::i;:::-;42767:51;;42829:12;42844:24;42860:7;42844:15;:24::i;:::-;42829:39;-1:-1:-1;42879:23:0;42905:43;42829:39;42905:33;42927:10;42905:33;:7;42917:4;42905:11;:17::i;:::-;:21;;:33::i;:43::-;42879:69;42984:4;;-1:-1:-1;42990:10:0;;-1:-1:-1;42990:10:0;-1:-1:-1;42610:405:0;;-1:-1:-1;;;42610:405:0:o;43023:500::-;43152:7;;;;43208:24;:7;43220:11;43208;:24::i;:::-;43190:42;-1:-1:-1;43243:12:0;43258:21;:4;43267:11;43258:8;:21::i;:::-;43243:36;-1:-1:-1;43290:18:0;43311:27;:10;43326:11;43311:14;:27::i;:::-;43290:48;-1:-1:-1;43349:12:0;43364:21;:4;43373:11;43364:8;:21::i;:::-;43349:36;-1:-1:-1;43396:23:0;43422:43;43349:36;43422:33;43444:10;43422:33;:7;43434:4;43422:11;:17::i;:43::-;43484:7;;;;-1:-1:-1;43510:4:0;;-1:-1:-1;43023:500:0;;-1:-1:-1;;;;;;;;;43023:500:0:o;49357:589::-;49507:16;;;49521:1;49507:16;;;;;;;;49483:21;;49507:16;;;;;;;;;;-1:-1:-1;49507:16:0;49483:40;;49552:4;49534;49539:1;49534:7;;;;;;-1:-1:-1;;;49534:7:0;;;;;;;;;-1:-1:-1;;;;;49534:23:0;;;:7;;;;;;;;;;:23;;;;49578:15;;:22;;;-1:-1:-1;;;49578:22:0;;;;:15;;;;;:20;;:22;;;;;49534:7;;49578:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49568:4;49573:1;49568:7;;;;;;-1:-1:-1;;;49568:7:0;;;;;;;;;-1:-1:-1;;;;;49568:32:0;;;:7;;;;;;;;;:32;49645:15;;49613:62;;49630:4;;49645:15;49663:11;49613:8;:62::i;:::-;49714:15;;:224;;-1:-1:-1;;;49714:224:0;;-1:-1:-1;;;;;49714:15:0;;;;:66;;:224;;49795:11;;49714:15;;49865:4;;49892;;49912:15;;49714:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49954:580;50134:15;;50102:62;;50119:4;;-1:-1:-1;;;;;50134:15:0;50152:11;50102:8;:62::i;:::-;50207:15;;-1:-1:-1;;;;;50207:15:0;:31;50246:9;50279:4;50299:11;50207:15;;50411:7;23508;23535:6;-1:-1:-1;;;;;23535:6:0;23462:87;;50411:7;50207:252;;;;;;-1:-1:-1;;;;;;50207:252:0;;;-1:-1:-1;;;;;4257:15:1;;;50207:252:0;;;4239:34:1;4289:18;;;4282:34;;;;4332:18;;;4325:34;;;;4375:18;;;4368:34;4439:15;;;4418:19;;;4411:44;50433:15:0;4471:19:1;;;4464:35;4173:19;;50207:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;50499:13:0;;50475:51;;11501:25:1;;;-1:-1:-1;;;;;50499:13:0;;;;-1:-1:-1;50492:4:0;;50475:51;;11489:2:1;11474:18;50475:51:0;;;;;;;49954:580;;:::o;52639:605::-;52742:15;52759:23;52784:12;52798:23;52823:12;52837:18;52857:12;52873:19;52884:7;52873:10;:19::i;:::-;52741:151;;;;;;;;;;;;;;52921:28;52941:7;52921;:15;52929:6;-1:-1:-1;;;;;52921:15:0;-1:-1:-1;;;;;52921:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;52903:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52978:7;:15;;;;:28;;52998:7;52978:19;:28::i;:::-;-1:-1:-1;;;;;52960:15:0;;;;;;;:7;:15;;;;;;:46;;;;53038:18;;;;;;;:39;;53061:15;53038:22;:39::i;:::-;-1:-1:-1;;;;;53017:18:0;;;;;;:7;:18;;;;;:60;53091:26;53106:10;53091:14;:26::i;:::-;53128:14;53137:4;53128:8;:14::i;:::-;53153:23;53165:4;53171;53153:11;:23::i;:::-;53209:9;-1:-1:-1;;;;;53192:44:0;53201:6;-1:-1:-1;;;;;53192:44:0;;53220:15;53192:44;;;;11501:25:1;;11489:2;11474:18;;11456:76;53192:44:0;;;;;;;;52639:605;;;;;;;;;;:::o;52006:625::-;52107:15;52124:23;52149:12;52163:23;52188:12;52202:18;52222:12;52238:19;52249:7;52238:10;:19::i;:::-;52106:151;;;;;;;;;;;;;;52286:28;52306:7;52286;:15;52294:6;-1:-1:-1;;;;;52286:15:0;-1:-1:-1;;;;;52286:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;52268:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;52346:18;;;;;:7;:18;;;;;:39;;52369:15;52346:22;:39::i;:::-;-1:-1:-1;;;;;52325:18:0;;;;;;:7;:18;;;;;;;;:60;;;;52417:7;:18;;;;:39;;52440:15;52417:22;:39::i;51457:541::-;51556:15;51573:23;51598:12;51612:23;51637:12;51651:18;51671:12;51687:19;51698:7;51687:10;:19::i;:::-;51555:151;;;;;;;;;;;;;;51735:28;51755:7;51735;:15;51743:6;-1:-1:-1;;;;;51735:15:0;-1:-1:-1;;;;;51735:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;39003:681::-;39106:15;39123:23;39148:12;39162:23;39187:12;39201:18;39221:12;39237:19;39248:7;39237:10;:19::i;:::-;39105:151;;;;;;;;;;;;;;39285:28;39305:7;39285;:15;39293:6;-1:-1:-1;;;;;39285:15:0;-1:-1:-1;;;;;39285:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;39267:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39342:7;:15;;;;:28;;39362:7;39342:19;:28::i;44993:154::-;45057:7;45084:55;45123:5;45084:20;45096:7;;45084;:11;;:20;;;;:::i;45317:166::-;45387:7;45414:61;45459:5;45414:26;45426:13;;45414:7;:11;;:26;;;;:::i;45155:154::-;45219:7;45246:55;45285:5;45246:20;45258:7;;45246;:11;;:20;;;;:::i;44275:355::-;44338:19;44361:10;:8;:10::i;:::-;44338:33;-1:-1:-1;44382:18:0;44403:27;:10;44338:33;44403:14;:27::i;:::-;44482:4;44466:22;;;;:7;:22;;;;;;44382:48;;-1:-1:-1;44466:38:0;;44382:48;44466:26;:38::i;:::-;44457:4;44441:22;;;;:7;:22;;;;;;;;:63;;;;44518:11;:26;;;;;;44515:107;;;44600:4;44584:22;;;;:7;:22;;;;;;:38;;44611:10;44584:26;:38::i;:::-;44575:4;44559:22;;;;:7;:22;;;;;:63;44515:107;44275:355;;;:::o;44642:339::-;44693:19;44716:10;:8;:10::i;:::-;44693:33;-1:-1:-1;44737:12:0;44752:21;:4;44693:33;44752:8;:21::i;:::-;44821:17;;-1:-1:-1;;;;;44821:17:0;44813:26;;;;:7;:26;;;;;;44737:36;;-1:-1:-1;44813:36:0;;44737;44813:30;:36::i;:::-;44792:17;;;-1:-1:-1;;;;;44792:17:0;;;44784:26;;;;:7;:26;;;;;;;;:65;;;;44875:17;;;;;44863:30;;:11;:30;;;;;;;44860:113;;;44945:17;;-1:-1:-1;;;;;44945:17:0;44937:26;;;;:7;:26;;;;;;:36;;44968:4;44937:30;:36::i;:::-;44916:17;;-1:-1:-1;;;;;44916:17:0;44908:26;;;;:7;:26;;;;;:65;44642:339;;;:::o;41993:147::-;42071:7;;:17;;42083:4;42071:11;:17::i;:::-;42061:7;:27;42112:10;;:20;;42127:4;42112:14;:20::i;:::-;42099:10;:33;-1:-1:-1;;41993:147:0:o;14:257:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;;;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;;;;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:325::-;;;1545:2;1533:9;1524:7;1520:23;1516:32;1513:2;;;1566:6;1558;1551:22;1513:2;1610:9;1597:23;1629:31;1654:5;1629:31;:::i;:::-;1679:5;1731:2;1716:18;;;;1703:32;;-1:-1:-1;;;1503:238:1:o;1746:251::-;;1855:2;1843:9;1834:7;1830:23;1826:32;1823:2;;;1876:6;1868;1861:22;1823:2;1920:9;1907:23;1939:28;1961:5;1939:28;:::i;2002:255::-;;2122:2;2110:9;2101:7;2097:23;2093:32;2090:2;;;2143:6;2135;2128:22;2090:2;2180:9;2174:16;2199:28;2221:5;2199:28;:::i;2262:190::-;;2374:2;2362:9;2353:7;2349:23;2345:32;2342:2;;;2395:6;2387;2380:22;2342:2;-1:-1:-1;2423:23:1;;2332:120;-1:-1:-1;2332:120:1:o;2457:319::-;;;2583:2;2571:9;2562:7;2558:23;2554:32;2551:2;;;2604:6;2596;2589:22;2551:2;2645:9;2632:23;2622:33;;2705:2;2694:9;2690:18;2677:32;2718:28;2740:5;2718:28;:::i;2781:316::-;;;;2938:2;2926:9;2917:7;2913:23;2909:32;2906:2;;;2959:6;2951;2944:22;2906:2;2993:9;2987:16;2977:26;;3043:2;3032:9;3028:18;3022:25;3012:35;;3087:2;3076:9;3072:18;3066:25;3056:35;;2896:201;;;;;:::o;4937:603::-;;5078:2;5107;5096:9;5089:21;5139:6;5133:13;5182:6;5177:2;5166:9;5162:18;5155:34;5207:4;5220:140;5234:6;5231:1;5228:13;5220:140;;;5329:14;;;5325:23;;5319:30;5295:17;;;5314:2;5291:26;5284:66;5249:10;;5220:140;;;5378:6;5375:1;5372:13;5369:2;;;5448:4;5443:2;5434:6;5423:9;5419:22;5415:31;5408:45;5369:2;-1:-1:-1;5524:2:1;5503:15;-1:-1:-1;;5499:29:1;5484:45;;;;5531:2;5480:54;;5058:482;-1:-1:-1;;;5058:482:1:o;9010:345::-;9212:2;9194:21;;;9251:2;9231:18;;;9224:30;-1:-1:-1;;;9285:2:1;9270:18;;9263:51;9346:2;9331:18;;9184:171::o;9360:356::-;9562:2;9544:21;;;9581:18;;;9574:30;9640:34;9635:2;9620:18;;9613:62;9707:2;9692:18;;9534:182::o;11537:983::-;;11847:3;11836:9;11832:19;11878:6;11867:9;11860:25;11904:2;11942:6;11937:2;11926:9;11922:18;11915:34;11985:3;11980:2;11969:9;11965:18;11958:31;12009:6;12044;12038:13;12075:6;12067;12060:22;12113:3;12102:9;12098:19;12091:26;;12152:2;12144:6;12140:15;12126:29;;12173:4;12186:195;12200:6;12197:1;12194:13;12186:195;;;12265:13;;-1:-1:-1;;;;;12261:39:1;12249:52;;12356:15;;;;12321:12;;;;12297:1;12215:9;12186:195;;;-1:-1:-1;;;;;;;12437:32:1;;;;12432:2;12417:18;;12410:60;-1:-1:-1;;;12501:3:1;12486:19;12479:35;12398:3;11808:712;-1:-1:-1;;;11808:712:1:o;13038:128::-;;13109:1;13105:6;13102:1;13099:13;13096:2;;;13115:18;;:::i;:::-;-1:-1:-1;13151:9:1;;13086:80::o;13171:217::-;;13237:1;13227:2;;-1:-1:-1;;;13262:31:1;;13316:4;13313:1;13306:15;13344:4;13269:1;13334:15;13227:2;-1:-1:-1;13373:9:1;;13217:171::o;13393:168::-;;13499:1;13495;13491:6;13487:14;13484:1;13481:21;13476:1;13469:9;13462:17;13458:45;13455:2;;;13506:18;;:::i;:::-;-1:-1:-1;13546:9:1;;13445:116::o;13566:125::-;;13634:1;13631;13628:8;13625:2;;;13639:18;;:::i;:::-;-1:-1:-1;13676:9:1;;13615:76::o;13696:380::-;13775:1;13771:12;;;;13818;;;13839:2;;13893:4;13885:6;13881:17;13871:27;;13839:2;13946;13938:6;13935:14;13915:18;13912:38;13909:2;;;13992:10;13987:3;13983:20;13980:1;13973:31;14027:4;14024:1;14017:15;14055:4;14052:1;14045:15;13909:2;;13751:325;;;:::o;14081:135::-;;-1:-1:-1;;14141:17:1;;14138:2;;;14161:18;;:::i;:::-;-1:-1:-1;14208:1:1;14197:13;;14128:88::o;14221:127::-;14282:10;14277:3;14273:20;14270:1;14263:31;14313:4;14310:1;14303:15;14337:4;14334:1;14327:15;14353:131;-1:-1:-1;;;;;14428:31:1;;14418:42;;14408:2;;14474:1;14471;14464:12;14489:118;14575:5;14568:13;14561:21;14554:5;14551:32;14541:2;;14597:1;14594;14587:12

Swarm Source

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