ETH Price: $3,386.45 (-0.25%)
Gas: 3 Gwei

Token

SUPER BOBBY (BOBBY)
 

Overview

Max Total Supply

1,000 BOBBY

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8.197809488 BOBBY

Value
$0.00
0x27a628f9dba3612557c55ca929dc5a491d5d50cb
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SUPERBOBBY

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

/*

t.me/superbobbyerc

*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.24;

interface IERC20 {
    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.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

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

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

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

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

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

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

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

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


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

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

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

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

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


}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract SUPERBOBBY 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;

    mapping(address => bool) private _isExcludedFromLimit;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    address payable _marketingAddress = payable(address(0x5107d771A23fC824204E6478a89789d6B65d07D4));

    string private _name = "SUPER BOBBY";
    string private _symbol = "BOBBY";
    uint8 private _decimals = 9;

    struct BuyFee {
        uint8 reflection;
        uint8 liquidity;
        uint8 marketing;
    }

    struct SellFee {
        uint8 reflection;
        uint8 liquidity;
        uint8 marketing;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint8 private _reflectionFee;
    uint8 private _liquidityFee;
    uint8 private _marketingFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = _tTotal.div(1000).mul(20); //2%
    uint256 private numTokensSellToAddToLiquidity = _tTotal.div(1000).mul(3); //0.3%
    uint256 public _maxWalletSize = _tTotal.div(1000).mul(20); // 2%

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

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

    uint256 launchedAt = 0;
    bool tradingOpen = false;

    mapping (address => uint256) public _lastTrade;

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        buyFee.reflection = 1;
        buyFee.liquidity = 1;
        buyFee.marketing = 18;

        sellFee.reflection = 1;
        sellFee.liquidity = 1;
        sellFee.marketing = 18;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D  );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner, and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        _isExcludedFromLimit[_marketingAddress] = true;
        _isExcludedFromLimit[owner()] = true;
        _isExcludedFromLimit[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }


    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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function excludeFromLimit(address account) public onlyOwner {
        _isExcludedFromLimit[account] = true;
    }

    function includeInLimit(address account) public onlyOwner {
        _isExcludedFromLimit[account] = false;
    }

    function setBothFees(
        uint8 buy_reflection,
        uint8 buy_liquidity,
        uint8 buy_marketing,
        uint8 sell_reflection,
        uint8 sell_liquidity,
        uint8 sell_marketing


    ) external onlyOwner {
        buyFee.reflection = buy_reflection;
        buyFee.liquidity = buy_liquidity;
        buyFee.marketing = buy_marketing;

        sellFee.reflection = sell_reflection;
        sellFee.liquidity = sell_liquidity;
        sellFee.marketing = sell_marketing;
    }



    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

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

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateReflectionFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tWallet = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        tTransferAmount = tTransferAmount.sub(tWallet);

        return (tTransferAmount, tFee, tLiquidity, tWallet);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 tWallet,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rWallet = tWallet.mul(currentRate);
        uint256 rTransferAmount = rAmount
            .sub(rFee)
            .sub(rLiquidity)
            .sub(rWallet);
        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 _takeWalletFee(uint256 tWallet) private {
        uint256 currentRate = _getRate();
        uint256 rWallet = tWallet.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rWallet);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tWallet);
    }

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

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

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

   
    function removeAllFee() private {
        _reflectionFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
     
    }

    function setBuy() private {
        _reflectionFee = buyFee.reflection;
        _liquidityFee = buyFee.liquidity;
        _marketingFee = buyFee.marketing;
      
    }

    function setSell() private {
        _reflectionFee = sellFee.reflection;
        _liquidityFee = sellFee.liquidity;
        _marketingFee = sellFee.marketing;
      
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function isExcludedFromLimit(address account) public view returns (bool) {
        return _isExcludedFromLimit[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(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading

        // 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;
        }
        if (takeFee) {
            if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
                if (to != uniswapV2Pair) {
                    require(
                        amount + balanceOf(to) <= _maxWalletSize,
                        "Recipient exceeds max wallet size."
                    );
                }

              
            }
        }

        //transfer amount, it will take reflection, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        // Split the contract balance into halves
        uint256 denominator = (buyFee.liquidity + sellFee.liquidity + buyFee.marketing + sellFee.marketing) * 2;
        uint256 tokensToAddLiquidityWith = (tokens * (buyFee.liquidity + sellFee.liquidity)) / denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity));
        uint256 ethToAddLiquidityWith = unitBalance * (buyFee.liquidity + sellFee.liquidity);

        if (ethToAddLiquidityWith > 0) {
            // Add liquidity to uniswap
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        // Send ETH to marketing
        uint256 marketingAmt = unitBalance * 2 * (buyFee.marketing + sellFee.marketing);
       

        if (marketingAmt > 0) {
            payable(_marketingAddress).transfer(marketingAmt);
        }

    
    }

    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
            address(this),
            block.timestamp
        );
    }

    //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 (sender == uniswapV2Pair) {
                setBuy();
            }
            if (recipient == uniswapV2Pair) {
                setSell();
            }
        }

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

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tWallet
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tWallet,
            _getRate()
        );

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeWalletFee(tWallet);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tWallet
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tWallet,
            _getRate()
        );

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeWalletFee(tWallet);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tWallet
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tWallet,
            _getRate()
        );

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeWalletFee(tWallet);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tWallet
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tWallet,
            _getRate()
        );

        _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);
        _takeWalletFee(tWallet);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function openTrading(bool _status) external onlyOwner() {
        tradingOpen = _status;
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","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":"_maxWalletSize","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":"buyFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromLimit","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":"includeInLimit","outputs":[],"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":"isExcludedFromLimit","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":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy_reflection","type":"uint8"},{"internalType":"uint8","name":"buy_liquidity","type":"uint8"},{"internalType":"uint8","name":"buy_marketing","type":"uint8"},{"internalType":"uint8","name":"sell_reflection","type":"uint8"},{"internalType":"uint8","name":"sell_liquidity","type":"uint8"},{"internalType":"uint8","name":"sell_marketing","type":"uint8"}],"name":"setBothFees","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405264e8d4a5100060098190556200001c905f1962000588565b62000029905f19620005b2565b600a55600c80546001600160a01b031916735107d771a23fc824204e6478a89789d6b65d07d417905560408051808201909152600b81526a535550455220424f42425960a81b6020820152600d9062000083908262000666565b50604080518082019091526005815264424f42425960d81b6020820152600e90620000af908262000666565b50600f805460ff191660099081179091556012805460ff60201b191664010000000017905554620000f290601490620000eb906103e86200045e565b90620004b0565b6013556009546200010e90600390620000eb906103e86200045e565b60149081556009546200012a9190620000eb906103e86200045e565b6015555f6016556017805460ff1916905534801562000147575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54335f9081526002602090815260409182902092909255601080546212010162ffffff199182168117909255601180549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156200020d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000233919062000732565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a5919062000732565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002f0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000316919062000732565b6001600160a01b0390811660a0528116608052600160055f620003405f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260058452828120805486166001908117909155600c805484168352848320805488168317905554909216815260089384905291822080549094168117909355620003c15f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526008909252902080549091166001179055620004083390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200044f91815260200190565b60405180910390a350620007d8565b5f620004a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200053a60201b60201c565b90505b92915050565b5f825f03620004c157505f620004aa565b5f620004ce83856200075a565b905082620004dd858362000774565b14620004a75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b5f81836200055d5760405162461bcd60e51b81526004016200053191906200078a565b505f6200056b848662000774565b95945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8262000599576200059962000574565b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620004aa57620004aa6200059e565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005f157607f821691505b6020821081036200061057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200066157805f5260205f20601f840160051c810160208510156200063d5750805b601f840160051c820191505b818110156200065e575f815560010162000649565b50505b505050565b81516001600160401b03811115620006825762000682620005c8565b6200069a81620006938454620005dc565b8462000616565b602080601f831160018114620006d0575f8415620006b85750858301515b5f19600386901b1c1916600185901b1785556200072a565b5f85815260208120601f198616915b828110156200070057888601518255948401946001909101908401620006df565b50858210156200071e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000743575f80fd5b81516001600160a01b0381168114620004a7575f80fd5b8082028115828204841417620004aa57620004aa6200059e565b5f8262000785576200078562000574565b500490565b5f602080835283518060208501525f5b81811015620007b8578581018301518582016040015282016200079a565b505f604082860101526040601f19601f8301168501019250505092915050565b60805160a05161224e620008395f395f81816103ca01528181610d9301528181610ee90152818161123001526112a601525f81816102480152818161166d0152818161172401528181611760015281816117cc0152611827015261224e5ff3fe6080604052600436106101b2575f3560e01c806370a08231116100e757806395d89b4111610087578063b27bcfba11610062578063b27bcfba14610550578063d94160e01461056f578063dd62ed3e146105a6578063ea2f0b37146105ea575f80fd5b806395d89b41146104f2578063a87859f614610506578063a9059cbb14610531575f80fd5b806388f82020116100c257806388f820201461046b5780638da5cb5b146104a25780638f9a55c0146104be57806391d919a9146104d3575f80fd5b806370a0823114610423578063715018a6146104425780637d1db4a514610456575f80fd5b80632b14ca5611610152578063437823ec1161012d578063437823ec1461036e578063470624021461038d57806349bd5a5e146103b95780635342acb4146103ec575f80fd5b80632b14ca56146102de5780632d8381191461032e578063313ce5671461034d575f80fd5b80631694505e1161018d5780631694505e1461023757806318160ddd1461028257806323b872dd146102a05780632a9b8072146102bf575f80fd5b806306fdde03146101bd578063095ea7b3146101e75780630bd3a7f914610216575f80fd5b366101b957005b5f80fd5b3480156101c8575f80fd5b506101d1610609565b6040516101de9190611e37565b60405180910390f35b3480156101f2575f80fd5b50610206610201366004611e97565b610699565b60405190151581526020016101de565b348015610221575f80fd5b50610235610230366004611ec1565b6106af565b005b348015610242575f80fd5b5061026a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101de565b34801561028d575f80fd5b506009545b6040519081526020016101de565b3480156102ab575f80fd5b506102066102ba366004611edc565b610704565b3480156102ca575f80fd5b506102356102d9366004611f1a565b61076b565b3480156102e9575f80fd5b5060115461030a9060ff808216916101008104821691620100009091041683565b6040805160ff948516815292841660208401529216918101919091526060016101de565b348015610339575f80fd5b50610292610348366004611f39565b6107c1565b348015610358575f80fd5b50600f5460405160ff90911681526020016101de565b348015610379575f80fd5b50610235610388366004611ec1565b610843565b348015610398575f80fd5b5060105461030a9060ff808216916101008104821691620100009091041683565b3480156103c4575f80fd5b5061026a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f7575f80fd5b50610206610406366004611ec1565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561042e575f80fd5b5061029261043d366004611ec1565b61088f565b34801561044d575f80fd5b506102356108eb565b348015610461575f80fd5b5061029260135481565b348015610476575f80fd5b50610206610485366004611ec1565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104ad575f80fd5b505f546001600160a01b031661026a565b3480156104c9575f80fd5b5061029260155481565b3480156104de575f80fd5b506102356104ed366004611ec1565b61095c565b3480156104fd575f80fd5b506101d16109a5565b348015610511575f80fd5b50610292610520366004611ec1565b60186020525f908152604090205481565b34801561053c575f80fd5b5061020661054b366004611e97565b6109b4565b34801561055b575f80fd5b5061023561056a366004611f65565b6109c0565b34801561057a575f80fd5b50610206610589366004611ec1565b6001600160a01b03165f9081526008602052604090205460ff1690565b3480156105b1575f80fd5b506102926105c0366004611fd5565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156105f5575f80fd5b50610235610604366004611ec1565b610a3e565b6060600d80546106189061200c565b80601f01602080910402602001604051908101604052809291908181526020018280546106449061200c565b801561068f5780601f106106665761010080835404028352916020019161068f565b820191905f5260205f20905b81548152906001019060200180831161067257829003601f168201915b5050505050905090565b5f6106a5338484610a87565b5060015b92915050565b5f546001600160a01b031633146106e15760405162461bcd60e51b81526004016106d890612044565b60405180910390fd5b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b5f610710848484610baa565b610761843361075c856040518060600160405280602881526020016121f1602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190610fa3565b610a87565b5060019392505050565b5f546001600160a01b031633146107945760405162461bcd60e51b81526004016106d890612044565b6017805460ff191682151590811790915560ff1680156107b45750601654155b156107be57436016555b50565b5f600a548211156108275760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016106d8565b5f610830610fdb565b905061083c8382610ffc565b9392505050565b5f546001600160a01b0316331461086c5760405162461bcd60e51b81526004016106d890612044565b6001600160a01b03165f908152600560205260409020805460ff19166001179055565b6001600160a01b0381165f9081526006602052604081205460ff16156108ca57506001600160a01b03165f9081526003602052604090205490565b6001600160a01b0382165f908152600260205260409020546106a9906107c1565b5f546001600160a01b031633146109145760405162461bcd60e51b81526004016106d890612044565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109855760405162461bcd60e51b81526004016106d890612044565b6001600160a01b03165f908152600860205260409020805460ff19169055565b6060600e80546106189061200c565b5f6106a5338484610baa565b5f546001600160a01b031633146109e95760405162461bcd60e51b81526004016106d890612044565b6010805460ff97881661ffff199182161761010097891688021762ff00001990811662010000978a16880217909255601180549589169590911694909417928716909502919091179093169290931602179055565b5f546001600160a01b03163314610a675760405162461bcd60e51b81526004016106d890612044565b6001600160a01b03165f908152600560205260409020805460ff19169055565b6001600160a01b038316610ae95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d8565b6001600160a01b038216610b4a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d8565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c0e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d8565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d8565b5f8111610cd15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106d8565b5f546001600160a01b03848116911614801590610cfb57505f546001600160a01b03838116911614155b15610d525760175460ff16610d525760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016106d8565b5f610d5c3061088f565b90506013548110610d6c57506013545b60145481108015908190610d8a57506012546301000000900460ff16155b8015610dc857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015610dde5750601254640100000000900460ff165b15610df1576014549150610df18261103d565b6001600160a01b0385165f9081526005602052604090205460019060ff1680610e3157506001600160a01b0385165f9081526005602052604090205460ff165b15610e3957505f5b8015610f8f576001600160a01b0386165f9081526008602052604090205460ff16158015610e7f57506001600160a01b0385165f9081526008602052604090205460ff16155b15610f8f57601354841115610ee75760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016106d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614610f8f57601554610f2c8661088f565b610f36908661208d565b1115610f8f5760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b60648201526084016106d8565b610f9b86868684611217565b505050505050565b5f8184841115610fc65760405162461bcd60e51b81526004016106d89190611e37565b505f610fd284866120a0565b95945050505050565b5f805f610fe661147d565b9092509050610ff58282610ffc565b9250505090565b5f61083c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115ec565b6012805463ff000000191663010000001790556011546010545f916201000080820460ff908116939182048116926110829261010091829004831692919004166120b3565b61108c91906120b3565b61109691906120b3565b6110a19060026120cc565b60115460105460ff92831693505f9284926110c99261010091829004831692919004166120b3565b6110d69060ff16856120ef565b6110e09190612106565b90505f6110ed82856120a0565b9050476110f982611618565b5f61110482476120a0565b6011546010549192505f916111299160ff6101009182900481169291909104166120b3565b6111369060ff16876120a0565b6111409083612106565b6011546010549192505f916111659160ff6101009182900481169291909104166120b3565b6111729060ff16836120ef565b905080156111845761118486826117c6565b6011546010545f916111a69160ff6201000092839004811692909104166120b3565b60ff166111b48460026120ef565b6111be91906120ef565b905080156111ff57600c546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156111fd573d5f803e3d5ffd5b505b50506012805463ff0000001916905550505050505050565b801561131a5761122e6012805462ffffff19169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036112a4576010546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361131a576011546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b6001600160a01b0384165f9081526006602052604090205460ff16801561135957506001600160a01b0383165f9081526006602052604090205460ff16155b1561136e576113698484846118a3565b611466565b6001600160a01b0384165f9081526006602052604090205460ff161580156113ad57506001600160a01b0383165f9081526006602052604090205460ff165b156113bd576113698484846119e2565b6001600160a01b0384165f9081526006602052604090205460ff161580156113fd57506001600160a01b0383165f9081526006602052604090205460ff16155b1561140d57611369848484611a96565b6001600160a01b0384165f9081526006602052604090205460ff16801561144b57506001600160a01b0383165f9081526006602052604090205460ff165b1561145b57611369848484611ae7565b611466848484611a96565b6114776012805462ffffff19169055565b50505050565b600a546009545f918291825b6007548110156115bc578260025f600784815481106114aa576114aa612125565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061151257508160035f600784815481106114ec576114ec612125565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561152857600a54600954945094505050509091565b61156c60025f6007848154811061154157611541612125565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611b62565b92506115b260035f6007848154811061158757611587612125565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611b62565b9150600101611489565b50600954600a546115cc91610ffc565b8210156115e357600a546009549350935050509091565b90939092509050565b5f818361160c5760405162461bcd60e51b81526004016106d89190611e37565b505f610fd28486612106565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061164b5761164b612125565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116eb9190612139565b816001815181106116fe576116fe612125565b60200260200101906001600160a01b031690816001600160a01b031681525050611749307f000000000000000000000000000000000000000000000000000000000000000084610a87565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061179d9085905f90869030904290600401612154565b5f604051808303815f87803b1580156117b4575f80fd5b505af1158015610f9b573d5f803e3d5ffd5b6117f1307f000000000000000000000000000000000000000000000000000000000000000084610a87565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611877573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061189c91906121c5565b5050505050565b5f805f806118b085611ba3565b93509350935093505f805f6118cf888787876118ca610fdb565b611bfc565b6001600160a01b038d165f9081526003602052604090205492955090935091506118f99089611b62565b6001600160a01b038b165f908152600360209081526040808320939093556002905220546119279084611b62565b6001600160a01b03808c165f9081526002602052604080822093909355908b16815220546119559083611c59565b6001600160a01b038a165f9081526002602052604090205561197685611cb7565b61197f84611cb7565b6119898187611d3a565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516119ce91815260200190565b60405180910390a350505050505050505050565b5f805f806119ef85611ba3565b93509350935093505f805f611a09888787876118ca610fdb565b6001600160a01b038d165f908152600260205260409020549295509093509150611a339084611b62565b6001600160a01b03808c165f90815260026020908152604080832094909455918c16815260039091522054611a689088611c59565b6001600160a01b038a165f908152600360209081526040808320939093556002905220546119559083611c59565b5f805f80611aa385611ba3565b93509350935093505f805f611abd888787876118ca610fdb565b6001600160a01b038d165f9081526002602052604090205492955090935091506119279084611b62565b5f805f80611af485611ba3565b93509350935093505f805f611b0e888787876118ca610fdb565b6001600160a01b038d165f908152600360205260409020549295509093509150611b389089611b62565b6001600160a01b038b165f90815260036020908152604080832093909355600290522054611a3390845b5f61083c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fa3565b5f805f805f611bb186611d5e565b90505f611bbd87611d7e565b90505f611bc988611d9d565b90505f611be083611bda8b87611b62565b90611b62565b9050611bec8183611b62565b9993985091965094509092505050565b5f808080611c0a8986611db9565b90505f611c178987611db9565b90505f611c248988611db9565b90505f611c318989611db9565b90505f611c4482611bda85818989611b62565b949d949c50929a509298505050505050505050565b5f80611c65838561208d565b90508381101561083c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106d8565b5f611cc0610fdb565b90505f611ccd8383611db9565b305f90815260026020526040902054909150611ce99082611c59565b305f9081526002602090815260408083209390935560069052205460ff1615611d3557305f90815260036020526040902054611d259084611c59565b305f908152600360205260409020555b505050565b600a54611d479083611b62565b600a55600b54611d579082611c59565b600b555050565b6012545f906106a990606490611d7890859060ff16611db9565b90610ffc565b6012545f906106a990606490611d78908590610100900460ff16611db9565b6012545f906106a990606490611d7890859062010000900460ff165b5f825f03611dc857505f6106a9565b5f611dd383856120ef565b905082611de08583612106565b1461083c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106d8565b5f602080835283518060208501525f5b81811015611e6357858101830151858201604001528201611e47565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107be575f80fd5b5f8060408385031215611ea8575f80fd5b8235611eb381611e83565b946020939093013593505050565b5f60208284031215611ed1575f80fd5b813561083c81611e83565b5f805f60608486031215611eee575f80fd5b8335611ef981611e83565b92506020840135611f0981611e83565b929592945050506040919091013590565b5f60208284031215611f2a575f80fd5b8135801515811461083c575f80fd5b5f60208284031215611f49575f80fd5b5035919050565b803560ff81168114611f60575f80fd5b919050565b5f805f805f8060c08789031215611f7a575f80fd5b611f8387611f50565b9550611f9160208801611f50565b9450611f9f60408801611f50565b9350611fad60608801611f50565b9250611fbb60808801611f50565b9150611fc960a08801611f50565b90509295509295509295565b5f8060408385031215611fe6575f80fd5b8235611ff181611e83565b9150602083013561200181611e83565b809150509250929050565b600181811c9082168061202057607f821691505b60208210810361203e57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106a9576106a9612079565b818103818111156106a9576106a9612079565b60ff81811683821601908111156106a9576106a9612079565b60ff81811683821602908116908181146120e8576120e8612079565b5092915050565b80820281158282048414176106a9576106a9612079565b5f8261212057634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612149575f80fd5b815161083c81611e83565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156121a45784516001600160a01b03168352938301939183019160010161217f565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156121d7575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208f507989d6d1ec518cd17e5ce91c47396f957ac01014829d98340bcaf690e4c464736f6c63430008180033

Deployed Bytecode

0x6080604052600436106101b2575f3560e01c806370a08231116100e757806395d89b4111610087578063b27bcfba11610062578063b27bcfba14610550578063d94160e01461056f578063dd62ed3e146105a6578063ea2f0b37146105ea575f80fd5b806395d89b41146104f2578063a87859f614610506578063a9059cbb14610531575f80fd5b806388f82020116100c257806388f820201461046b5780638da5cb5b146104a25780638f9a55c0146104be57806391d919a9146104d3575f80fd5b806370a0823114610423578063715018a6146104425780637d1db4a514610456575f80fd5b80632b14ca5611610152578063437823ec1161012d578063437823ec1461036e578063470624021461038d57806349bd5a5e146103b95780635342acb4146103ec575f80fd5b80632b14ca56146102de5780632d8381191461032e578063313ce5671461034d575f80fd5b80631694505e1161018d5780631694505e1461023757806318160ddd1461028257806323b872dd146102a05780632a9b8072146102bf575f80fd5b806306fdde03146101bd578063095ea7b3146101e75780630bd3a7f914610216575f80fd5b366101b957005b5f80fd5b3480156101c8575f80fd5b506101d1610609565b6040516101de9190611e37565b60405180910390f35b3480156101f2575f80fd5b50610206610201366004611e97565b610699565b60405190151581526020016101de565b348015610221575f80fd5b50610235610230366004611ec1565b6106af565b005b348015610242575f80fd5b5061026a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016101de565b34801561028d575f80fd5b506009545b6040519081526020016101de565b3480156102ab575f80fd5b506102066102ba366004611edc565b610704565b3480156102ca575f80fd5b506102356102d9366004611f1a565b61076b565b3480156102e9575f80fd5b5060115461030a9060ff808216916101008104821691620100009091041683565b6040805160ff948516815292841660208401529216918101919091526060016101de565b348015610339575f80fd5b50610292610348366004611f39565b6107c1565b348015610358575f80fd5b50600f5460405160ff90911681526020016101de565b348015610379575f80fd5b50610235610388366004611ec1565b610843565b348015610398575f80fd5b5060105461030a9060ff808216916101008104821691620100009091041683565b3480156103c4575f80fd5b5061026a7f0000000000000000000000007cba1999341e2cc2f698dc3c7128d047d978b8b381565b3480156103f7575f80fd5b50610206610406366004611ec1565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561042e575f80fd5b5061029261043d366004611ec1565b61088f565b34801561044d575f80fd5b506102356108eb565b348015610461575f80fd5b5061029260135481565b348015610476575f80fd5b50610206610485366004611ec1565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104ad575f80fd5b505f546001600160a01b031661026a565b3480156104c9575f80fd5b5061029260155481565b3480156104de575f80fd5b506102356104ed366004611ec1565b61095c565b3480156104fd575f80fd5b506101d16109a5565b348015610511575f80fd5b50610292610520366004611ec1565b60186020525f908152604090205481565b34801561053c575f80fd5b5061020661054b366004611e97565b6109b4565b34801561055b575f80fd5b5061023561056a366004611f65565b6109c0565b34801561057a575f80fd5b50610206610589366004611ec1565b6001600160a01b03165f9081526008602052604090205460ff1690565b3480156105b1575f80fd5b506102926105c0366004611fd5565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156105f5575f80fd5b50610235610604366004611ec1565b610a3e565b6060600d80546106189061200c565b80601f01602080910402602001604051908101604052809291908181526020018280546106449061200c565b801561068f5780601f106106665761010080835404028352916020019161068f565b820191905f5260205f20905b81548152906001019060200180831161067257829003601f168201915b5050505050905090565b5f6106a5338484610a87565b5060015b92915050565b5f546001600160a01b031633146106e15760405162461bcd60e51b81526004016106d890612044565b60405180910390fd5b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b5f610710848484610baa565b610761843361075c856040518060600160405280602881526020016121f1602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190610fa3565b610a87565b5060019392505050565b5f546001600160a01b031633146107945760405162461bcd60e51b81526004016106d890612044565b6017805460ff191682151590811790915560ff1680156107b45750601654155b156107be57436016555b50565b5f600a548211156108275760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016106d8565b5f610830610fdb565b905061083c8382610ffc565b9392505050565b5f546001600160a01b0316331461086c5760405162461bcd60e51b81526004016106d890612044565b6001600160a01b03165f908152600560205260409020805460ff19166001179055565b6001600160a01b0381165f9081526006602052604081205460ff16156108ca57506001600160a01b03165f9081526003602052604090205490565b6001600160a01b0382165f908152600260205260409020546106a9906107c1565b5f546001600160a01b031633146109145760405162461bcd60e51b81526004016106d890612044565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109855760405162461bcd60e51b81526004016106d890612044565b6001600160a01b03165f908152600860205260409020805460ff19169055565b6060600e80546106189061200c565b5f6106a5338484610baa565b5f546001600160a01b031633146109e95760405162461bcd60e51b81526004016106d890612044565b6010805460ff97881661ffff199182161761010097891688021762ff00001990811662010000978a16880217909255601180549589169590911694909417928716909502919091179093169290931602179055565b5f546001600160a01b03163314610a675760405162461bcd60e51b81526004016106d890612044565b6001600160a01b03165f908152600560205260409020805460ff19169055565b6001600160a01b038316610ae95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106d8565b6001600160a01b038216610b4a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106d8565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c0e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106d8565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106d8565b5f8111610cd15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106d8565b5f546001600160a01b03848116911614801590610cfb57505f546001600160a01b03838116911614155b15610d525760175460ff16610d525760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016106d8565b5f610d5c3061088f565b90506013548110610d6c57506013545b60145481108015908190610d8a57506012546301000000900460ff16155b8015610dc857507f0000000000000000000000007cba1999341e2cc2f698dc3c7128d047d978b8b36001600160a01b0316856001600160a01b031614155b8015610dde5750601254640100000000900460ff165b15610df1576014549150610df18261103d565b6001600160a01b0385165f9081526005602052604090205460019060ff1680610e3157506001600160a01b0385165f9081526005602052604090205460ff165b15610e3957505f5b8015610f8f576001600160a01b0386165f9081526008602052604090205460ff16158015610e7f57506001600160a01b0385165f9081526008602052604090205460ff16155b15610f8f57601354841115610ee75760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016106d8565b7f0000000000000000000000007cba1999341e2cc2f698dc3c7128d047d978b8b36001600160a01b0316856001600160a01b031614610f8f57601554610f2c8661088f565b610f36908661208d565b1115610f8f5760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b60648201526084016106d8565b610f9b86868684611217565b505050505050565b5f8184841115610fc65760405162461bcd60e51b81526004016106d89190611e37565b505f610fd284866120a0565b95945050505050565b5f805f610fe661147d565b9092509050610ff58282610ffc565b9250505090565b5f61083c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115ec565b6012805463ff000000191663010000001790556011546010545f916201000080820460ff908116939182048116926110829261010091829004831692919004166120b3565b61108c91906120b3565b61109691906120b3565b6110a19060026120cc565b60115460105460ff92831693505f9284926110c99261010091829004831692919004166120b3565b6110d69060ff16856120ef565b6110e09190612106565b90505f6110ed82856120a0565b9050476110f982611618565b5f61110482476120a0565b6011546010549192505f916111299160ff6101009182900481169291909104166120b3565b6111369060ff16876120a0565b6111409083612106565b6011546010549192505f916111659160ff6101009182900481169291909104166120b3565b6111729060ff16836120ef565b905080156111845761118486826117c6565b6011546010545f916111a69160ff6201000092839004811692909104166120b3565b60ff166111b48460026120ef565b6111be91906120ef565b905080156111ff57600c546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156111fd573d5f803e3d5ffd5b505b50506012805463ff0000001916905550505050505050565b801561131a5761122e6012805462ffffff19169055565b7f0000000000000000000000007cba1999341e2cc2f698dc3c7128d047d978b8b36001600160a01b0316846001600160a01b0316036112a4576010546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b7f0000000000000000000000007cba1999341e2cc2f698dc3c7128d047d978b8b36001600160a01b0316836001600160a01b03160361131a576011546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b6001600160a01b0384165f9081526006602052604090205460ff16801561135957506001600160a01b0383165f9081526006602052604090205460ff16155b1561136e576113698484846118a3565b611466565b6001600160a01b0384165f9081526006602052604090205460ff161580156113ad57506001600160a01b0383165f9081526006602052604090205460ff165b156113bd576113698484846119e2565b6001600160a01b0384165f9081526006602052604090205460ff161580156113fd57506001600160a01b0383165f9081526006602052604090205460ff16155b1561140d57611369848484611a96565b6001600160a01b0384165f9081526006602052604090205460ff16801561144b57506001600160a01b0383165f9081526006602052604090205460ff165b1561145b57611369848484611ae7565b611466848484611a96565b6114776012805462ffffff19169055565b50505050565b600a546009545f918291825b6007548110156115bc578260025f600784815481106114aa576114aa612125565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061151257508160035f600784815481106114ec576114ec612125565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561152857600a54600954945094505050509091565b61156c60025f6007848154811061154157611541612125565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611b62565b92506115b260035f6007848154811061158757611587612125565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611b62565b9150600101611489565b50600954600a546115cc91610ffc565b8210156115e357600a546009549350935050509091565b90939092509050565b5f818361160c5760405162461bcd60e51b81526004016106d89190611e37565b505f610fd28486612106565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061164b5761164b612125565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116eb9190612139565b816001815181106116fe576116fe612125565b60200260200101906001600160a01b031690816001600160a01b031681525050611749307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610a87565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061179d9085905f90869030904290600401612154565b5f604051808303815f87803b1580156117b4575f80fd5b505af1158015610f9b573d5f803e3d5ffd5b6117f1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610a87565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611877573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061189c91906121c5565b5050505050565b5f805f806118b085611ba3565b93509350935093505f805f6118cf888787876118ca610fdb565b611bfc565b6001600160a01b038d165f9081526003602052604090205492955090935091506118f99089611b62565b6001600160a01b038b165f908152600360209081526040808320939093556002905220546119279084611b62565b6001600160a01b03808c165f9081526002602052604080822093909355908b16815220546119559083611c59565b6001600160a01b038a165f9081526002602052604090205561197685611cb7565b61197f84611cb7565b6119898187611d3a565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516119ce91815260200190565b60405180910390a350505050505050505050565b5f805f806119ef85611ba3565b93509350935093505f805f611a09888787876118ca610fdb565b6001600160a01b038d165f908152600260205260409020549295509093509150611a339084611b62565b6001600160a01b03808c165f90815260026020908152604080832094909455918c16815260039091522054611a689088611c59565b6001600160a01b038a165f908152600360209081526040808320939093556002905220546119559083611c59565b5f805f80611aa385611ba3565b93509350935093505f805f611abd888787876118ca610fdb565b6001600160a01b038d165f9081526002602052604090205492955090935091506119279084611b62565b5f805f80611af485611ba3565b93509350935093505f805f611b0e888787876118ca610fdb565b6001600160a01b038d165f908152600360205260409020549295509093509150611b389089611b62565b6001600160a01b038b165f90815260036020908152604080832093909355600290522054611a3390845b5f61083c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fa3565b5f805f805f611bb186611d5e565b90505f611bbd87611d7e565b90505f611bc988611d9d565b90505f611be083611bda8b87611b62565b90611b62565b9050611bec8183611b62565b9993985091965094509092505050565b5f808080611c0a8986611db9565b90505f611c178987611db9565b90505f611c248988611db9565b90505f611c318989611db9565b90505f611c4482611bda85818989611b62565b949d949c50929a509298505050505050505050565b5f80611c65838561208d565b90508381101561083c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106d8565b5f611cc0610fdb565b90505f611ccd8383611db9565b305f90815260026020526040902054909150611ce99082611c59565b305f9081526002602090815260408083209390935560069052205460ff1615611d3557305f90815260036020526040902054611d259084611c59565b305f908152600360205260409020555b505050565b600a54611d479083611b62565b600a55600b54611d579082611c59565b600b555050565b6012545f906106a990606490611d7890859060ff16611db9565b90610ffc565b6012545f906106a990606490611d78908590610100900460ff16611db9565b6012545f906106a990606490611d7890859062010000900460ff165b5f825f03611dc857505f6106a9565b5f611dd383856120ef565b905082611de08583612106565b1461083c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106d8565b5f602080835283518060208501525f5b81811015611e6357858101830151858201604001528201611e47565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107be575f80fd5b5f8060408385031215611ea8575f80fd5b8235611eb381611e83565b946020939093013593505050565b5f60208284031215611ed1575f80fd5b813561083c81611e83565b5f805f60608486031215611eee575f80fd5b8335611ef981611e83565b92506020840135611f0981611e83565b929592945050506040919091013590565b5f60208284031215611f2a575f80fd5b8135801515811461083c575f80fd5b5f60208284031215611f49575f80fd5b5035919050565b803560ff81168114611f60575f80fd5b919050565b5f805f805f8060c08789031215611f7a575f80fd5b611f8387611f50565b9550611f9160208801611f50565b9450611f9f60408801611f50565b9350611fad60608801611f50565b9250611fbb60808801611f50565b9150611fc960a08801611f50565b90509295509295509295565b5f8060408385031215611fe6575f80fd5b8235611ff181611e83565b9150602083013561200181611e83565b809150509250929050565b600181811c9082168061202057607f821691505b60208210810361203e57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106a9576106a9612079565b818103818111156106a9576106a9612079565b60ff81811683821601908111156106a9576106a9612079565b60ff81811683821602908116908181146120e8576120e8612079565b5092915050565b80820281158282048414176106a9576106a9612079565b5f8261212057634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612149575f80fd5b815161083c81611e83565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156121a45784516001600160a01b03168352938301939183019160010161217f565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156121d7575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208f507989d6d1ec518cd17e5ce91c47396f957ac01014829d98340bcaf690e4c464736f6c63430008180033

Deployed Bytecode Sourcemap

24728:20565:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28006:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28991:193;;;;;;;;;;-1:-1:-1;28991:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;28991:193:0;1023:187:1;30347:115:0;;;;;;;;;;-1:-1:-1;30347:115:0;;;;;:::i;:::-;;:::i;:::-;;26025:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;26025:51:0;1467:230:1;28283:95:0;;;;;;;;;;-1:-1:-1;28363:7:0;;28283:95;;;1848:25:1;;;1836:2;1821:18;28283:95:0;1702:177:1;29192:446:0;;;;;;;;;;-1:-1:-1;29192:446:0;;;;;:::i;:::-;;:::i;45098:192::-;;;;;;;;;;-1:-1:-1;45098:192:0;;;;;:::i;:::-;;:::i;25889:22::-;;;;;;;;;;-1:-1:-1;25889:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;2843:4:1;2831:17;;;2813:36;;2885:17;;;2880:2;2865:18;;2858:45;2939:17;;2919:18;;;2912:45;;;;2801:2;2786:18;25889:22:0;2623:340:1;29778:322:0;;;;;;;;;;-1:-1:-1;29778:322:0;;;;;:::i;:::-;;:::i;28192:83::-;;;;;;;;;;-1:-1:-1;28258:9:0;;28192:83;;28258:9;;;;3295:36:1;;3283:2;3268:18;28192:83:0;3153:184:1;30110:111:0;;;;;;;;;;-1:-1:-1;30110:111:0;;;;;:::i;:::-;;:::i;25862:20::-;;;;;;;;;;-1:-1:-1;25862:20:0;;;;;;;;;;;;;;;;;;;;;;26083:38;;;;;;;;;;;;;;;35162:124;;;;;;;;;;-1:-1:-1;35162:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;35251:27:0;35227:4;35251:27;;;:18;:27;;;;;;;;;35162:124;28386:198;;;;;;;;;;-1:-1:-1;28386:198:0;;;;;:::i;:::-;;:::i;15226:148::-;;;;;;;;;;;;;:::i;26200:55::-;;;;;;;;;;;;;;;;29648:120;;;;;;;;;;-1:-1:-1;29648:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;29740:20:0;29716:4;29740:20;;;:11;:20;;;;;;;;;29648:120;14584:79;;;;;;;;;;-1:-1:-1;14622:7:0;14649:6;-1:-1:-1;;;;;14649:6:0;14584:79;;26353:57;;;;;;;;;;;;;;;;30470:114;;;;;;;;;;-1:-1:-1;30470:114:0;;;;;:::i;:::-;;:::i;28097:87::-;;;;;;;;;;;;;:::i;26865:46::-;;;;;;;;;;-1:-1:-1;26865:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;28592:199;;;;;;;;;;-1:-1:-1;28592:199:0;;;;;:::i;:::-;;:::i;30592:514::-;;;;;;;;;;-1:-1:-1;30592:514:0;;;;;:::i;:::-;;:::i;35294:128::-;;;;;;;;;;-1:-1:-1;35294:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;35385:29:0;35361:4;35385:29;;;:20;:29;;;;;;;;;35294:128;28799:184;;;;;;;;;;-1:-1:-1;28799:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;28948:18:0;;;28916:7;28948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28799:184;30229:110;;;;;;;;;;-1:-1:-1;30229:110:0;;;;;:::i;:::-;;:::i;28006:83::-;28043:13;28076:5;28069:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28006:83;:::o;28991:193::-;29093:4;29115:39;7428:10;29138:7;29147:6;29115:8;:39::i;:::-;-1:-1:-1;29172:4:0;28991:193;;;;;:::o;30347:115::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;30418:29:0::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;30418:36:0::1;30450:4;30418:36;::::0;;30347:115::o;29192:446::-;29324:4;29341:36;29351:6;29359:9;29370:6;29341:9;:36::i;:::-;29388:220;29411:6;7428:10;29459:138;29515:6;29459:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29459:19:0;;;;;;:11;:19;;;;;;;;7428:10;29459:33;;;;;;;;;;:37;:138::i;:::-;29388:8;:220::i;:::-;-1:-1:-1;29626:4:0;29192:446;;;;;:::o;45098:192::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;45165:11:::1;:21:::0;;-1:-1:-1;;45165:21:0::1;::::0;::::1;;::::0;;::::1;::::0;;;::::1;45200:11:::0;:30;::::1;;;-1:-1:-1::0;45215:10:0::1;::::0;:15;45200:30:::1;45197:86;;;45259:12;45246:10;:25:::0;45197:86:::1;45098:192:::0;:::o;29778:322::-;29872:7;29930;;29919;:18;;29897:110;;;;-1:-1:-1;;;29897:110:0;;5592:2:1;29897:110:0;;;5574:21:1;5631:2;5611:18;;;5604:30;5670:34;5650:18;;;5643:62;-1:-1:-1;;;5721:18:1;;;5714:40;5771:19;;29897:110:0;5390:406:1;29897:110:0;30018:19;30040:10;:8;:10::i;:::-;30018:32;-1:-1:-1;30068:24:0;:7;30018:32;30068:11;:24::i;:::-;30061:31;29778:322;-1:-1:-1;;;29778:322:0:o;30110:111::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30179:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;30179:34:0::1;30209:4;30179:34;::::0;;30110:111::o;28386:198::-;-1:-1:-1;;;;;28476:20:0;;28452:7;28476:20;;;:11;:20;;;;;;;;28472:49;;;-1:-1:-1;;;;;;28505:16:0;;;;;:7;:16;;;;;;;28386:198::o;28472:49::-;-1:-1:-1;;;;;28559:16:0;;;;;;:7;:16;;;;;;28539:37;;:19;:37::i;15226:148::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;15333:1:::1;15317:6:::0;;15296:40:::1;::::0;-1:-1:-1;;;;;15317:6:0;;::::1;::::0;15296:40:::1;::::0;15333:1;;15296:40:::1;15364:1;15347:19:::0;;-1:-1:-1;;;;;;15347:19:0::1;::::0;;15226:148::o;30470:114::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30539:29:0::1;30571:5;30539:29:::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;30539:37:0::1;::::0;;30470:114::o;28097:87::-;28136:13;28169:7;28162:14;;;;;:::i;28592:199::-;28697:4;28719:42;7428:10;28743:9;28754:6;28719:9;:42::i;30592:514::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;30839:6:::1;:34:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;30884:32:0;;;;30839:34:::1;30884:32:::0;;::::1;::::0;::::1;;-1:-1:-1::0;;30927:32:0;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;30972:7:::1;:36:::0;;;;::::1;31019:34:::0;;;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;31064::::0;;::::1;::::0;;;::::1;;;::::0;;30592:514::o;30229:110::-;14796:6;;-1:-1:-1;;;;;14796:6:0;7428:10;14796:22;14788:67;;;;-1:-1:-1;;;14788:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30296:27:0::1;30326:5;30296:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;30296:35:0::1;::::0;;30229:110::o;35430:371::-;-1:-1:-1;;;;;35557:19:0;;35549:68;;;;-1:-1:-1;;;35549:68:0;;6003:2:1;35549:68:0;;;5985:21:1;6042:2;6022:18;;;6015:30;6081:34;6061:18;;;6054:62;-1:-1:-1;;;6132:18:1;;;6125:34;6176:19;;35549:68:0;5801:400:1;35549:68:0;-1:-1:-1;;;;;35636:21:0;;35628:68;;;;-1:-1:-1;;;35628:68:0;;6408:2:1;35628:68:0;;;6390:21:1;6447:2;6427:18;;;6420:30;6486:34;6466:18;;;6459:62;-1:-1:-1;;;6537:18:1;;;6530:32;6579:19;;35628:68:0;6206:398:1;35628:68:0;-1:-1:-1;;;;;35709:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35761:32;;1848:25:1;;;35761:32:0;;1821:18:1;35761:32:0;;;;;;;35430:371;;;:::o;35809:2343::-;-1:-1:-1;;;;;35931:18:0;;35923:68;;;;-1:-1:-1;;;35923:68:0;;6811:2:1;35923:68:0;;;6793:21:1;6850:2;6830:18;;;6823:30;6889:34;6869:18;;;6862:62;-1:-1:-1;;;6940:18:1;;;6933:35;6985:19;;35923:68:0;6609:401:1;35923:68:0;-1:-1:-1;;;;;36010:16:0;;36002:64;;;;-1:-1:-1;;;36002:64:0;;7217:2:1;36002:64:0;;;7199:21:1;7256:2;7236:18;;;7229:30;7295:34;7275:18;;;7268:62;-1:-1:-1;;;7346:18:1;;;7339:33;7389:19;;36002:64:0;7015:399:1;36002:64:0;36094:1;36085:6;:10;36077:64;;;;-1:-1:-1;;;36077:64:0;;7621:2:1;36077:64:0;;;7603:21:1;7660:2;7640:18;;;7633:30;7699:34;7679:18;;;7672:62;-1:-1:-1;;;7750:18:1;;;7743:39;7799:19;;36077:64:0;7419:405:1;36077:64:0;14622:7;14649:6;-1:-1:-1;;;;;36167:15:0;;;14649:6;;36167:15;;;;:32;;-1:-1:-1;14622:7:0;14649:6;-1:-1:-1;;;;;36186:13:0;;;14649:6;;36186:13;;36167:32;36162:88;;;36210:11;;;;36202:48;;;;-1:-1:-1;;;36202:48:0;;8031:2:1;36202:48:0;;;8013:21:1;8070:2;8050:18;;;8043:30;8109:26;8089:18;;;8082:54;8153:18;;36202:48:0;7829:348:1;36202:48:0;36585:28;36616:24;36634:4;36616:9;:24::i;:::-;36585:55;;36681:12;;36657:20;:36;36653:104;;-1:-1:-1;36733:12:0;;36653:104;36833:29;;36796:66;;;;;;;36891:53;;-1:-1:-1;36928:16:0;;;;;;;36927:17;36891:53;:91;;;;;36969:13;-1:-1:-1;;;;;36961:21:0;:4;-1:-1:-1;;;;;36961:21:0;;;36891:91;:129;;;;-1:-1:-1;36999:21:0;;;;;;;36891:129;36873:318;;;37070:29;;37047:52;;37143:36;37158:20;37143:14;:36::i;:::-;-1:-1:-1;;;;;37384:24:0;;37264:12;37384:24;;;:18;:24;;;;;;37279:4;;37384:24;;;:50;;-1:-1:-1;;;;;;37412:22:0;;;;;;:18;:22;;;;;;;;37384:50;37380:98;;;-1:-1:-1;37461:5:0;37380:98;37492:7;37488:536;;;-1:-1:-1;;;;;37521:26:0;;;;;;:20;:26;;;;;;;;37520:27;:56;;;;-1:-1:-1;;;;;;37552:24:0;;;;;;:20;:24;;;;;;;;37551:25;37520:56;37516:497;;;37637:12;;37627:6;:22;;37597:136;;;;-1:-1:-1;;;37597:136:0;;8384:2:1;37597:136:0;;;8366:21:1;8423:2;8403:18;;;8396:30;8462:34;8442:18;;;8435:62;-1:-1:-1;;;8513:18:1;;;8506:38;8561:19;;37597:136:0;8182:404:1;37597:136:0;37762:13;-1:-1:-1;;;;;37756:19:0;:2;-1:-1:-1;;;;;37756:19:0;;37752:228;;37860:14;;37843:13;37853:2;37843:9;:13::i;:::-;37834:22;;:6;:22;:::i;:::-;:40;;37800:160;;;;-1:-1:-1;;;37800:160:0;;9055:2:1;37800:160:0;;;9037:21:1;9094:2;9074:18;;;9067:30;9133:34;9113:18;;;9106:62;-1:-1:-1;;;9184:18:1;;;9177:32;9226:19;;37800:160:0;8853:398:1;37800:160:0;38103:41;38118:4;38124:2;38128:6;38136:7;38103:14;:41::i;:::-;35912:2240;;;35809:2343;;;:::o;4092:226::-;4212:7;4248:12;4240:6;;;;4232:29;;;;-1:-1:-1;;;4232:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4272:9:0;4284:5;4288:1;4284;:5;:::i;:::-;4272:17;4092:226;-1:-1:-1;;;;;4092:226:0:o;32639:164::-;32681:7;32702:15;32719;32738:19;:17;:19::i;:::-;32701:56;;-1:-1:-1;32701:56:0;-1:-1:-1;32775:20:0;32701:56;;32775:11;:20::i;:::-;32768:27;;;;32639:164;:::o;5072:132::-;5130:7;5157:39;5161:1;5164;5157:39;;;;;;;;;;;;;;;;;:3;:39::i;38160:1195::-;26717:16;:23;;-1:-1:-1;;26717:23:0;;;;;38363:7:::1;:17:::0;38344:6:::1;:16:::0;26717:23;;38363:17;;;::::1;26717:23:::0;38363:17;;::::1;::::0;38344:16;;::::1;::::0;::::1;::::0;38305:36:::1;::::0;26717:23;38324:17;;;::::1;::::0;::::1;::::0;38305:16;;::::1;;:36;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;38304:81;::::0;38384:1:::1;38304:81;:::i;:::-;38461:7;:17:::0;38442:6:::1;:16:::0;38282:103:::1;::::0;;::::1;::::0;-1:-1:-1;38396:32:0::1;::::0;38282:103;;38442:36:::1;::::0;38461:17:::1;::::0;;;::::1;::::0;::::1;::::0;38442:16;;::::1;;:36;:::i;:::-;38432:47;::::0;::::1;;:6:::0;:47:::1;:::i;:::-;38431:63;;;;:::i;:::-;38396:98:::0;-1:-1:-1;38505:14:0::1;38522:33;38396:98:::0;38522:6;:33:::1;:::i;:::-;38505:50:::0;-1:-1:-1;38593:21:0::1;38627:24;38505:50:::0;38627:16:::1;:24::i;:::-;38664:20;38687:38;38711:14:::0;38687:21:::1;:38;:::i;:::-;38808:7;:17:::0;38789:6:::1;:16:::0;38664:61;;-1:-1:-1;38736:19:0::1;::::0;38789:36:::1;::::0;38808:17:::1;;::::0;;;::::1;::::0;::::1;::::0;38789:16;;;::::1;;:36;:::i;:::-;38774:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;38758:69;::::0;:12;:69:::1;:::i;:::-;38904:7;:17:::0;38885:6:::1;:16:::0;38736:91;;-1:-1:-1;38838:29:0::1;::::0;38885:36:::1;::::0;38904:17:::1;;::::0;;;::::1;::::0;::::1;::::0;38885:16;;;::::1;;:36;:::i;:::-;38870:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;38838:84:::0;-1:-1:-1;38939:25:0;;38935:160:::1;;39022:61;39035:24;39061:21;39022:12;:61::i;:::-;39202:7;:17:::0;39183:6:::1;:16:::0;39141:20:::1;::::0;39183:36:::1;::::0;39202:17:::1;::::0;;;;::::1;::::0;::::1;::::0;39183:16;;::::1;;:36;:::i;:::-;39164:56;;:15;:11:::0;39178:1:::1;39164:15;:::i;:::-;:56;;;;:::i;:::-;39141:79:::0;-1:-1:-1;39246:16:0;;39242:98:::1;;39287:17;::::0;39279:49:::1;::::0;-1:-1:-1;;;;;39287:17:0;;::::1;::::0;39279:49;::::1;;;::::0;39315:12;;39287:17:::1;39279:49:::0;39287:17;39279:49;39315:12;39287:17;39279:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39242:98;-1:-1:-1::0;;26763:16:0;:24;;-1:-1:-1;;26763:24:0;;;-1:-1:-1;;;;;;;38160:1195:0:o;40560:1022::-;40715:7;40711:230;;;40739:14;34699;:18;;-1:-1:-1;;34756:17:0;;;34656:132;40739:14;40782:13;-1:-1:-1;;;;;40772:23:0;:6;-1:-1:-1;;;;;40772:23:0;;40768:72;;34850:6;:17;34833:14;:34;;34850:17;;;;-1:-1:-1;;34878:32:0;;;;;;;34850:17;34894:16;;;;;34878:32;;-1:-1:-1;;34921:32:0;34937:16;;;;;;;;;34921:32;;;;;;;;;40816:8;40871:13;-1:-1:-1;;;;;40858:26:0;:9;-1:-1:-1;;;;;40858:26:0;;40854:76;;35032:7;:18;35015:14;:35;;35032:18;;;;-1:-1:-1;;35061:33:0;;;;;;;35032:18;35077:17;;;;;35061:33;;-1:-1:-1;;35105:33:0;35121:17;;;;;;;;;35105:33;;;;;;;;;40905:9;-1:-1:-1;;;;;40957:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40981:22:0;;;;;;:11;:22;;;;;;;;40980:23;40957:46;40953:597;;;41020:48;41042:6;41050:9;41061:6;41020:21;:48::i;:::-;40953:597;;;-1:-1:-1;;;;;41091:19:0;;;;;;:11;:19;;;;;;;;41090:20;:46;;;;-1:-1:-1;;;;;;41114:22:0;;;;;;:11;:22;;;;;;;;41090:46;41086:464;;;41153:46;41173:6;41181:9;41192:6;41153:19;:46::i;41086:464::-;-1:-1:-1;;;;;41222:19:0;;;;;;:11;:19;;;;;;;;41221:20;:47;;;;-1:-1:-1;;;;;;41246:22:0;;;;;;:11;:22;;;;;;;;41245:23;41221:47;41217:333;;;41285:44;41303:6;41311:9;41322:6;41285:17;:44::i;41217:333::-;-1:-1:-1;;;;;41351:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41374:22:0;;;;;;:11;:22;;;;;;;;41351:45;41347:203;;;41413:48;41435:6;41443:9;41454:6;41413:21;:48::i;41347:203::-;41494:44;41512:6;41520:9;41531:6;41494:17;:44::i;:::-;41560:14;34699;:18;;-1:-1:-1;;34756:17:0;;;34656:132;41560:14;40560:1022;;;;:::o;32811:605::-;32909:7;;32945;;32862;;;;;32963:338;32987:9;:16;32983:20;;32963:338;;;33071:7;33047;:21;33055:9;33065:1;33055:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33055:12:0;33047:21;;;;;;;;;;;;;:31;;:83;;;33123:7;33099;:21;33107:9;33117:1;33107:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33107:12:0;33099:21;;;;;;;;;;;;;:31;33047:83;33025:146;;;33154:7;;33163;;33146:25;;;;;;;32811:605;;:::o;33025:146::-;33196:34;33208:7;:21;33216:9;33226:1;33216:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33216:12:0;33208:21;;;;;;;;;;;;;33196:7;;:11;:34::i;:::-;33186:44;;33255:34;33267:7;:21;33275:9;33285:1;33275:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33275:12:0;33267:21;;;;;;;;;;;;;33255:7;;:11;:34::i;:::-;33245:44;-1:-1:-1;33005:3:0;;32963:338;;;-1:-1:-1;33337:7:0;;33325;;:20;;:11;:20::i;:::-;33315:7;:30;33311:61;;;33355:7;;33364;;33347:25;;;;;;32811:605;;:::o;33311:61::-;33391:7;;33400;;-1:-1:-1;32811:605:0;-1:-1:-1;32811:605:0:o;5700:312::-;5820:7;5855:12;5848:5;5840:28;;;;-1:-1:-1;;;5840:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5879:9:0;5891:5;5895:1;5891;:5;:::i;39363:589::-;39513:16;;;39527:1;39513:16;;;;;;;;39489:21;;39513:16;;;;;;;;;;-1:-1:-1;39513:16:0;39489:40;;39558:4;39540;39545:1;39540:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39540:23:0;;;-1:-1:-1;;;;;39540:23:0;;;;;39584:15;-1:-1:-1;;;;;39584:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39574:4;39579:1;39574:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39574:32:0;;;-1:-1:-1;;;;;39574:32:0;;;;;39619:62;39636:4;39651:15;39669:11;39619:8;:62::i;:::-;39720:224;;-1:-1:-1;;;39720:224:0;;-1:-1:-1;;;;;39720:15:0;:66;;;;:224;;39801:11;;39827:1;;39871:4;;39898;;39918:15;;39720:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39960:519;40108:62;40125:4;40140:15;40158:11;40108:8;:62::i;:::-;40213:258;;-1:-1:-1;;;40213:258:0;;40285:4;40213:258;;;12013:34:1;;;12063:18;;;12056:34;;;40331:1:0;12106:18:1;;;12099:34;;;12149:18;;;12142:34;12192:19;;;12185:44;40445:15:0;12245:19:1;;;12238:35;40213:15:0;-1:-1:-1;;;;;40213:31:0;;;;40252:9;;11947:19:1;;40213:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39960:519;;:::o;43285:863::-;43436:23;43474:12;43501:18;43534:15;43563:20;43575:7;43563:11;:20::i;:::-;43421:162;;;;;;;;43595:15;43612:23;43637:12;43653:135;43679:7;43701:4;43720:10;43745:7;43767:10;:8;:10::i;:::-;43653:11;:135::i;:::-;-1:-1:-1;;;;;43819:15:0;;;;;;:7;:15;;;;;;43594:194;;-1:-1:-1;43594:194:0;;-1:-1:-1;43594:194:0;-1:-1:-1;43819:28:0;;43839:7;43819:19;:28::i;:::-;-1:-1:-1;;;;;43801:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43876:7;:15;;;;:28;;43896:7;43876:19;:28::i;:::-;-1:-1:-1;;;;;43858:15:0;;;;;;;:7;:15;;;;;;:46;;;;43936:18;;;;;;;:39;;43959:15;43936:22;:39::i;:::-;-1:-1:-1;;;;;43915:18:0;;;;;;:7;:18;;;;;:60;43986:26;44001:10;43986:14;:26::i;:::-;44023:23;44038:7;44023:14;:23::i;:::-;44057;44069:4;44075;44057:11;:23::i;:::-;44113:9;-1:-1:-1;;;;;44096:44:0;44105:6;-1:-1:-1;;;;;44096:44:0;;44124:15;44096:44;;;;1848:25:1;;1836:2;1821:18;;1702:177;44096:44:0;;;;;;;;43410:738;;;;;;;43285:863;;;:::o;42402:875::-;42551:23;42589:12;42616:18;42649:15;42678:20;42690:7;42678:11;:20::i;:::-;42536:162;;;;;;;;42710:15;42727:23;42752:12;42768:135;42794:7;42816:4;42835:10;42860:7;42882:10;:8;:10::i;42768:135::-;-1:-1:-1;;;;;42934:15:0;;;;;;:7;:15;;;;;;42709:194;;-1:-1:-1;42709:194:0;;-1:-1:-1;42709:194:0;-1:-1:-1;42934:28:0;;42709:194;42934:19;:28::i;:::-;-1:-1:-1;;;;;42916:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42994:18;;;;;:7;:18;;;;;:39;;43017:15;42994:22;:39::i;:::-;-1:-1:-1;;;;;42973:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43065:7;:18;;;;:39;;43088:15;43065:22;:39::i;41590:802::-;41737:23;41775:12;41802:18;41835:15;41864:20;41876:7;41864:11;:20::i;:::-;41722:162;;;;;;;;41896:15;41913:23;41938:12;41954:135;41980:7;42002:4;42021:10;42046:7;42068:10;:8;:10::i;41954:135::-;-1:-1:-1;;;;;42120:15:0;;;;;;:7;:15;;;;;;41895:194;;-1:-1:-1;41895:194:0;;-1:-1:-1;41895:194:0;-1:-1:-1;42120:28:0;;41895:194;42120:19;:28::i;44156:934::-;44307:23;44345:12;44372:18;44405:15;44434:20;44446:7;44434:11;:20::i;:::-;44292:162;;;;;;;;44466:15;44483:23;44508:12;44524:135;44550:7;44572:4;44591:10;44616:7;44638:10;:8;:10::i;44524:135::-;-1:-1:-1;;;;;44690:15:0;;;;;;:7;:15;;;;;;44465:194;;-1:-1:-1;44465:194:0;;-1:-1:-1;44465:194:0;-1:-1:-1;44690:28:0;;44710:7;44690:19;:28::i;:::-;-1:-1:-1;;;;;44672:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44747:7;:15;;;;:28;;44767:7;3653:136;3711:7;3738:43;3742:1;3745;3738:43;;;;;;;;;;;;;;;;;:3;:43::i;31367:568::-;31468:7;31490;31512;31534;31569:12;31584:31;31607:7;31584:22;:31::i;:::-;31569:46;;31626:18;31647:30;31669:7;31647:21;:30::i;:::-;31626:51;;31688:15;31706:30;31728:7;31706:21;:30::i;:::-;31688:48;-1:-1:-1;31747:23:0;31773:33;31795:10;31773:17;:7;31785:4;31773:11;:17::i;:::-;:21;;:33::i;:::-;31747:59;-1:-1:-1;31835:28:0;31747:59;31855:7;31835:19;:28::i;:::-;31817:46;31901:4;;-1:-1:-1;31907:10:0;;-1:-1:-1;31907:10:0;-1:-1:-1;31367:568:0;;-1:-1:-1;;;31367:568:0:o;31943:688::-;32168:7;;;;32265:24;:7;32277:11;32265;:24::i;:::-;32247:42;-1:-1:-1;32300:12:0;32315:21;:4;32324:11;32315:8;:21::i;:::-;32300:36;-1:-1:-1;32347:18:0;32368:27;:10;32383:11;32368:14;:27::i;:::-;32347:48;-1:-1:-1;32406:15:0;32424:24;:7;32436:11;32424;:24::i;:::-;32406:42;-1:-1:-1;32459:23:0;32485:88;32406:42;32485:61;32535:10;32485:61;:7;32511:4;32485:25;:31::i;:88::-;32592:7;;;;-1:-1:-1;32618:4:0;;-1:-1:-1;31943:688:0;;-1:-1:-1;;;;;;;;;31943:688:0:o;3189:181::-;3247:7;;3279:5;3283:1;3279;:5;:::i;:::-;3267:17;;3308:1;3303;:6;;3295:46;;;;-1:-1:-1;;;3295:46:0;;12797:2:1;3295:46:0;;;12779:21:1;12836:2;12816:18;;;12809:30;12875:29;12855:18;;;12848:57;12922:18;;3295:46:0;12595:351:1;33424:355:0;33487:19;33509:10;:8;:10::i;:::-;33487:32;-1:-1:-1;33530:18:0;33551:27;:10;33487:32;33551:14;:27::i;:::-;33630:4;33614:22;;;;:7;:22;;;;;;33530:48;;-1:-1:-1;33614:38:0;;33530:48;33614:26;:38::i;:::-;33605:4;33589:22;;;;:7;:22;;;;;;;;:63;;;;33667:11;:26;;;;;;33663:108;;;33749:4;33733:22;;;;:7;:22;;;;;;:38;;33760:10;33733:26;:38::i;:::-;33724:4;33708:22;;;;:7;:22;;;;;:63;33663:108;33476:303;;33424:355;:::o;31212:147::-;31290:7;;:17;;31302:4;31290:11;:17::i;:::-;31280:7;:27;31331:10;;:20;;31346:4;31331:14;:20::i;:::-;31318:10;:33;-1:-1:-1;;31212:147:0:o;34135:144::-;34245:14;;34206:7;;34233:38;;34265:5;;34233:27;;:7;;34245:14;;34233:11;:27::i;:::-;:31;;:38::i;34287:174::-;34428:13;;34384:7;;34416:37;;34447:5;;34416:26;;:7;;34428:13;;;;;34416:11;:26::i;34469:174::-;34610:13;;34566:7;;34598:37;;34629:5;;34598:26;;:7;;34610:13;;;;;4577:252;4635:7;4661:1;4666;4661:6;4657:47;;-1:-1:-1;4691:1:0;4684:8;;4657:47;4716:9;4728:5;4732:1;4728;:5;:::i;:::-;4716:17;-1:-1:-1;4761:1:0;4752:5;4756:1;4716:17;4752:5;:::i;:::-;:10;4744:56;;;;-1:-1:-1;;;4744:56:0;;13153:2:1;4744:56:0;;;13135:21:1;13192:2;13172:18;;;13165:30;13231:34;13211:18;;;13204:62;-1:-1:-1;;;13282:18:1;;;13275:31;13323:19;;4744:56:0;12951:397:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2345:273::-;2401:6;2454:2;2442:9;2433:7;2429:23;2425:32;2422:52;;;2470:1;2467;2460:12;2422:52;2509:9;2496:23;2562:5;2555:13;2548:21;2541:5;2538:32;2528:60;;2584:1;2581;2574:12;2968:180;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;-1:-1:-1;3119:23:1;;2968:180;-1:-1:-1;2968:180:1:o;3550:156::-;3616:20;;3676:4;3665:16;;3655:27;;3645:55;;3696:1;3693;3686:12;3645:55;3550:156;;;:::o;3711:535::-;3803:6;3811;3819;3827;3835;3843;3896:3;3884:9;3875:7;3871:23;3867:33;3864:53;;;3913:1;3910;3903:12;3864:53;3936:27;3953:9;3936:27;:::i;:::-;3926:37;;3982:36;4014:2;4003:9;3999:18;3982:36;:::i;:::-;3972:46;;4037:36;4069:2;4058:9;4054:18;4037:36;:::i;:::-;4027:46;;4092:36;4124:2;4113:9;4109:18;4092:36;:::i;:::-;4082:46;;4147:37;4179:3;4168:9;4164:19;4147:37;:::i;:::-;4137:47;;4203:37;4235:3;4224:9;4220:19;4203:37;:::i;:::-;4193:47;;3711:535;;;;;;;;:::o;4251:388::-;4319:6;4327;4380:2;4368:9;4359:7;4355:23;4351:32;4348:52;;;4396:1;4393;4386:12;4348:52;4435:9;4422:23;4454:31;4479:5;4454:31;:::i;:::-;4504:5;-1:-1:-1;4561:2:1;4546:18;;4533:32;4574:33;4533:32;4574:33;:::i;:::-;4626:7;4616:17;;;4251:388;;;;;:::o;4644:380::-;4723:1;4719:12;;;;4766;;;4787:61;;4841:4;4833:6;4829:17;4819:27;;4787:61;4894:2;4886:6;4883:14;4863:18;4860:38;4857:161;;4940:10;4935:3;4931:20;4928:1;4921:31;4975:4;4972:1;4965:15;5003:4;5000:1;4993:15;4857:161;;4644:380;;;:::o;5029:356::-;5231:2;5213:21;;;5250:18;;;5243:30;5309:34;5304:2;5289:18;;5282:62;5376:2;5361:18;;5029:356::o;8591:127::-;8652:10;8647:3;8643:20;8640:1;8633:31;8683:4;8680:1;8673:15;8707:4;8704:1;8697:15;8723:125;8788:9;;;8809:10;;;8806:36;;;8822:18;;:::i;9256:128::-;9323:9;;;9344:11;;;9341:37;;;9358:18;;:::i;9389:148::-;9477:4;9456:12;;;9470;;;9452:31;;9495:13;;9492:39;;;9511:18;;:::i;9542:225::-;9646:4;9625:12;;;9639;;;9621:31;9672:22;;;;9713:24;;;9703:58;;9741:18;;:::i;:::-;9703:58;9542:225;;;;:::o;9772:168::-;9845:9;;;9876;;9893:15;;;9887:22;;9873:37;9863:71;;9914:18;;:::i;9945:217::-;9985:1;10011;10001:132;;10055:10;10050:3;10046:20;10043:1;10036:31;10090:4;10087:1;10080:15;10118:4;10115:1;10108:15;10001:132;-1:-1:-1;10147:9:1;;9945:217::o;10167:127::-;10228:10;10223:3;10219:20;10216:1;10209:31;10259:4;10256:1;10249:15;10283:4;10280:1;10273:15;10431:251;10501:6;10554:2;10542:9;10533:7;10529:23;10525:32;10522:52;;;10570:1;10567;10560:12;10522:52;10602:9;10596:16;10621:31;10646:5;10621:31;:::i;10687:980::-;10949:4;10997:3;10986:9;10982:19;11028:6;11017:9;11010:25;11054:2;11092:6;11087:2;11076:9;11072:18;11065:34;11135:3;11130:2;11119:9;11115:18;11108:31;11159:6;11194;11188:13;11225:6;11217;11210:22;11263:3;11252:9;11248:19;11241:26;;11302:2;11294:6;11290:15;11276:29;;11323:1;11333:195;11347:6;11344:1;11341:13;11333:195;;;11412:13;;-1:-1:-1;;;;;11408:39:1;11396:52;;11503:15;;;;11468:12;;;;11444:1;11362:9;11333:195;;;-1:-1:-1;;;;;;;11584:32:1;;;;11579:2;11564:18;;11557:60;-1:-1:-1;;;11648:3:1;11633:19;11626:35;11545:3;10687:980;-1:-1:-1;;;10687:980:1:o;12284:306::-;12372:6;12380;12388;12441:2;12429:9;12420:7;12416:23;12412:32;12409:52;;;12457:1;12454;12447:12;12409:52;12486:9;12480:16;12470:26;;12536:2;12525:9;12521:18;12515:25;12505:35;;12580:2;12569:9;12565:18;12559:25;12549:35;;12284:306;;;;;:::o

Swarm Source

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