ETH Price: $3,439.96 (-1.17%)
Gas: 10 Gwei

Token

Munity (MUN)
 

Overview

Max Total Supply

1,000,000 MUN

Holders

62

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
320.667353106747546748 MUN

Value
$0.00
0xf3d70ab5f0d76e05e9841331b3dbbe486079470a
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:
Munity

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-03
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;


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.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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



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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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


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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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


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

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    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;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000 * (10**18);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Munity";
    string private _symbol = "MUN";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 0;
    uint256 private _previousBurnFee = _burnFee;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 public _marketingFee = 1;
    uint256 private _previousMarketingFee = _marketingFee;
    address payable public marketingWallet = payable(0x9483706195bdd8Ee425ca6Eb04109d4c78346241);

    uint256 public _charityFee = 1;
    uint256 private _previousCharityFee = _charityFee;
    address public charityWallet = 0x3616b5A9a0E3f1b38c7eDBD7A9ACd18352a33958;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    uint256 public numTokensSellToAddToLiquidity = 10000 * 10**18;
    uint256 public _maxTxAmount = 1000000 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[owner()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet router address
        //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // testnet router address
        
        // 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[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[charityWallet] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

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

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

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        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 calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee==0 && _burnFee==0 && _charityFee==0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousMarketingFee = _marketingFee;
        _previousCharityFee = _charityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
        _charityFee = 0;
    }
    
    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _burnFee = _previousBurnFee;
       _marketingFee = _previousMarketingFee;
       _charityFee = _previousCharityFee;
    }

    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(amount > 0, "Transfer amount must be greater than zero");

        // 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));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapAndLiquifyEnabled && 
            _marketingFee > 0 &&
            _liquidityFee > 0
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity and send bnb to marketing wallet
            swapAndLiquify(contractTokenBalance);
        }
        
        //transfer amount, it will take tax
        _tokenTransfer(from,to,amount);
    }

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

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

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

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        swapTokensForEth(contractTokenBalance.sub(liquidityTokens));
        marketingWallet.transfer(address(this).balance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private 
    {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {   
           removeAllFee(); 
        }
        else  
        {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            restoreAllFee();
        }
    }

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


    function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256) {
        if(_burnFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tBurn = tAmount.div(100).mul(_burnFee);
        uint256 rBurn = tBurn.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rBurn);
        tTransferAmount = tTransferAmount.sub(tBurn);
        _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn);
        emit Transfer(sender, deadAddress, tBurn);
        return(tTransferAmount, rTransferAmount);
    }

    function takeCharity(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256) {
        if(_charityFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tCharity = tAmount.div(100).mul(_charityFee);
        uint256 rCharity = tCharity.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rCharity);
        tTransferAmount = tTransferAmount.sub(tCharity);
        _rOwned[charityWallet] = _rOwned[charityWallet].add(rCharity);
        emit Transfer(sender, charityWallet, tCharity);
        return(tTransferAmount, rTransferAmount);
    }

    function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private
    returns (uint256, uint256) {
        if(_marketingFee==0) {  return(tTransferAmount, rTransferAmount); }
        uint256 tMarketing = tAmount.div(100).mul(_marketingFee);
        uint256 rMarketing = tMarketing.mul(_getRate());
        rTransferAmount = rTransferAmount.sub(rMarketing);
        tTransferAmount = tTransferAmount.sub(tMarketing);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        emit Transfer(sender, address(this), tMarketing);
        return(tTransferAmount, rTransferAmount); 
    }

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

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

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function setMarketingWallet(address payable newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }

    function setCharityWallet(address _wallet) external onlyOwner {
        charityWallet = _wallet;
    }
   
    function setFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, uint256 burnFee, uint256 charityFee) external onlyOwner() {
        require(taxFee.add(liquidityFee).add(marketingFee).add(burnFee).add(charityFee) <= 25, "tax too high");
        _taxFee = taxFee;
        _liquidityFee = liquidityFee;
        _marketingFee = marketingFee;
        _burnFee = burnFee;
        _charityFee = charityFee;

    }
    
    function setNumTokensSellToAddToLiquidity(uint256 newAmount) external onlyOwner() {
        numTokensSellToAddToLiquidity = newAmount;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount > totalSupply().div(400), "value too low");
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000805460ff60a81b1916600160a81b17905569d3c21bcecceda10000006007819055620000359060001962000479565b62000043906000196200049c565b6008556040805180820190915260068152654d756e69747960d01b6020820152600a9062000072908262000569565b5060408051808201909152600381526226aaa760e91b6020820152600b906200009c908262000569565b50600c805460ff191660129081179091556000600d819055600e8190556001600f819055601081905560118290559155601380546001600160a01b031990811661dead1790915560148290556015829055601680548216739483706195bdd8ee425ca6eb04109d4c78346241179055601782905560189190915560198054909116733616b5a9a0e3f1b38c7edbd7a9acd18352a3395817905569021e19e0c9bab2400000601c5569d3c21bcecceda1000000601d553480156200015e57600080fd5b506200016a3362000429565b60085460016000620001846000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000226919062000635565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000635565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030e919062000635565b601b80546001600160a01b03199081166001600160a01b0393841617909155601a8054909116918316919091179055600160046000620003566000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556016548216815260049093528183208054851660019081179091553084528284208054861682179055601954909116835291208054909216179055620003d26000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200041a91815260200190565b60405180910390a35062000667565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000826200049757634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620004be57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004ef57607f821691505b6020821081036200051057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056457600081815260208120601f850160051c810160208610156200053f5750805b601f850160051c820191505b8181101562000560578281556001016200054b565b5050505b505050565b81516001600160401b03811115620005855762000585620004c4565b6200059d81620005968454620004da565b8462000516565b602080601f831160018114620005d55760008415620005bc5750858301515b600019600386901b1c1916600185901b17855562000560565b600085815260208120601f198616915b828110156200060657888601518255948401946001909101908401620005e5565b5085821015620006255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200064857600080fd5b81516001600160a01b03811681146200066057600080fd5b9392505050565b6128d680620006776000396000f3fe6080604052600436106102605760003560e01c806352390c021161014457806395d89b41116100b6578063d12a76881161007a578063d12a768814610716578063dd62ed3e1461072c578063ea2f0b3714610772578063ec28438a14610792578063f0f165af146107b2578063f2fde38b146107d257600080fd5b806395d89b411461068b578063a457c2d7146106a0578063a9059cbb146106c0578063c0b0fda2146106e0578063c49b9a80146106f657600080fd5b8063715018a611610108578063715018a6146105c957806375f0a874146105de5780637b208769146105fe5780637d1db4a51461061e57806388f82020146106345780638da5cb5b1461066d57600080fd5b806352390c021461051a5780635342acb41461053a5780635d098b38146105735780636bc87c3a1461059357806370a08231146105a957600080fd5b8063313ce567116101dd57806340f8007a116101a157806340f8007a14610463578063437823ec146104795780634549b0391461049957806349bd5a5e146104b957806349c421e3146104d95780634a74bb02146104f957600080fd5b8063313ce567146103cb5780633685d419146103ed578063395093511461040d5780633b124fe71461042d5780633bd5d1731461044357600080fd5b806322976e0d1161022457806322976e0d1461033357806323b872dd1461034957806327c8f835146103695780632d8381191461038957806330563bd7146103a957600080fd5b806306fdde031461026c578063095ea7b31461029757806313114a9d146102c75780631694505e146102e657806318160ddd1461031e57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107f2565b60405161028e91906124ad565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612510565b610884565b604051901515815260200161028e565b3480156102d357600080fd5b506009545b60405190815260200161028e565b3480156102f257600080fd5b50601a54610306906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032a57600080fd5b506007546102d8565b34801561033f57600080fd5b506102d860145481565b34801561035557600080fd5b506102b761036436600461253c565b61089b565b34801561037557600080fd5b50601354610306906001600160a01b031681565b34801561039557600080fd5b506102d86103a436600461257d565b610904565b3480156103b557600080fd5b506103c96103c4366004612596565b61098d565b005b3480156103d757600080fd5b50600c5460405160ff909116815260200161028e565b3480156103f957600080fd5b506103c9610408366004612596565b6109b7565b34801561041957600080fd5b506102b7610428366004612510565b610b4b565b34801561043957600080fd5b506102d8600d5481565b34801561044f57600080fd5b506103c961045e36600461257d565b610b81565b34801561046f57600080fd5b506102d860175481565b34801561048557600080fd5b506103c9610494366004612596565b610c6b565b3480156104a557600080fd5b506102d86104b43660046125c8565b610c97565b3480156104c557600080fd5b50601b54610306906001600160a01b031681565b3480156104e557600080fd5b506103c96104f43660046125f4565b610d24565b34801561050557600080fd5b506000546102b790600160a81b900460ff1681565b34801561052657600080fd5b506103c9610535366004612596565b610d9a565b34801561054657600080fd5b506102b7610555366004612596565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561057f57600080fd5b506103c961058e366004612596565b610ecb565b34801561059f57600080fd5b506102d8600f5481565b3480156105b557600080fd5b506102d86105c4366004612596565b610ef5565b3480156105d557600080fd5b506103c9610f54565b3480156105ea57600080fd5b50601654610306906001600160a01b031681565b34801561060a57600080fd5b50601954610306906001600160a01b031681565b34801561062a57600080fd5b506102d8601d5481565b34801561064057600080fd5b506102b761064f366004612596565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067957600080fd5b506000546001600160a01b0316610306565b34801561069757600080fd5b50610281610f68565b3480156106ac57600080fd5b506102b76106bb366004612510565b610f77565b3480156106cc57600080fd5b506102b76106db366004612510565b610fc6565b3480156106ec57600080fd5b506102d860115481565b34801561070257600080fd5b506103c961071136600461262f565b610fd3565b34801561072257600080fd5b506102d8601c5481565b34801561073857600080fd5b506102d861074736600461264a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561077e57600080fd5b506103c961078d366004612596565b611033565b34801561079e57600080fd5b506103c96107ad36600461257d565b61105c565b3480156107be57600080fd5b506103c96107cd36600461257d565b6110c1565b3480156107de57600080fd5b506103c96107ed366004612596565b6110ce565b6060600a805461080190612683565b80601f016020809104026020016040519081016040528092919081815260200182805461082d90612683565b801561087a5780601f1061084f5761010080835404028352916020019161087a565b820191906000526020600020905b81548152906001019060200180831161085d57829003601f168201915b5050505050905090565b6000610891338484611144565b5060015b92915050565b60006108a8848484611268565b6108fa84336108f585604051806060016040528060288152602001612834602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906113c9565b611144565b5060019392505050565b60006008548211156109705760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b600061097a611403565b90506109868382611426565b9392505050565b610995611468565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6109bf611468565b6001600160a01b03811660009081526005602052604090205460ff16610a275760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610967565b60005b600654811015610b4757816001600160a01b031660068281548110610a5157610a516126bd565b6000918252602090912001546001600160a01b031603610b355760068054610a7b906001906126e9565b81548110610a8b57610a8b6126bd565b600091825260209091200154600680546001600160a01b039092169183908110610ab757610ab76126bd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610b0f57610b0f6126fc565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b3f81612712565b915050610a2a565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108919185906108f590866114c2565b3360008181526005602052604090205460ff1615610bf65760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610967565b6000610c0183611521565b505050506001600160a01b038416600090815260016020526040902054919250610c2d91905082611570565b6001600160a01b038316600090815260016020526040902055600854610c539082611570565b600855600954610c6390846114c2565b600955505050565b610c73611468565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610ceb5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610967565b81610d0a576000610cfb84611521565b50939550610895945050505050565b6000610d1584611521565b50929550610895945050505050565b610d2c611468565b6019610d4682610d40858188818c8c6114c2565b906114c2565b1115610d835760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b6044820152606401610967565b600d94909455600f92909255601455601155601755565b610da2611468565b6001600160a01b03811660009081526005602052604090205460ff1615610e0b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610967565b6001600160a01b03811660009081526001602052604090205415610e65576001600160a01b038116600090815260016020526040902054610e4b90610904565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b610ed3611468565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610f3257506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461089590610904565b610f5c611468565b610f6660006115b2565b565b6060600b805461080190612683565b600061089133846108f58560405180606001604052806025815260200161287c602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906113c9565b6000610891338484611268565b610fdb611468565b60008054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061102890831515815260200190565b60405180910390a150565b61103b611468565b6001600160a01b03166000908152600460205260409020805460ff19169055565b611064611468565b601d81905561107e61019061107860075490565b90611426565b601d54116110be5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610967565b50565b6110c9611468565b601c55565b6110d6611468565b6001600160a01b03811661113b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b6110be816115b2565b6001600160a01b0383166111a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610967565b6001600160a01b0382166112075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610967565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610967565b6000811161132e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610967565b600061133930610ef5565b601c549091508110801590819061135a5750600054600160a01b900460ff16155b80156113735750601b546001600160a01b038581169116145b80156113885750600054600160a81b900460ff165b801561139657506000601454115b80156113a457506000600f54115b156113b757601c5491506113b782611602565b6113c285858561171a565b5050505050565b600081848411156113ed5760405162461bcd60e51b815260040161096791906124ad565b5060006113fa84866126e9565b95945050505050565b600080600061141061198e565b909250905061141f8282611426565b9250505090565b600061098683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b10565b6000546001600160a01b03163314610f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b6000806114cf838561272b565b9050838110156109865760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610967565b60008060008060008060008060006115388a611b3e565b92509250925060008060006115568d8686611551611403565b611b80565b919f909e50909c50959a5093985091965092945050505050565b600061098683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805460ff60a01b1916600160a01b178155601454600f546116379161162991906114c2565b600f54611078908590611bd0565b90506000611646826002611426565b905060006116548383611570565b90504761166083611c52565b600061166c4783611570565b90506116788382611dac565b61168a6116858787611570565b611c52565b6016546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156116c3573d6000803e3d6000fd5b5060408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506000805460ff60a01b1916905550505050565b6001600160a01b03831660009081526004602052604090205460ff168061175957506001600160a01b03821660009081526004602052604090205460ff165b1561176b57611766611e59565b6117ce565b601d548111156117ce5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610967565b6001600160a01b03831660009081526005602052604090205460ff16801561180f57506001600160a01b03821660009081526005602052604090205460ff16155b156118245761181f838383611eca565b611922565b6001600160a01b03831660009081526005602052604090205460ff1615801561186557506001600160a01b03821660009081526005602052604090205460ff165b156118755761181f838383611fde565b6001600160a01b03831660009081526005602052604090205460ff161580156118b757506001600160a01b03821660009081526005602052604090205460ff16155b156118c75761181f838383612087565b6001600160a01b03831660009081526005602052604090205460ff16801561190757506001600160a01b03821660009081526005602052604090205460ff165b156119175761181f8383836120fa565b611922838383612087565b6001600160a01b03831660009081526004602052604090205460ff168061196157506001600160a01b03821660009081526004602052604090205460ff165b1561198957611989600e54600d55601054600f55601254601155601554601455601854601755565b505050565b6008546007546000918291825b600654811015611ae0578260016000600684815481106119bd576119bd6126bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a285750816002600060068481548110611a0157611a016126bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a3e57600854600754945094505050509091565b611a846001600060068481548110611a5857611a586126bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611570565b9250611acc6002600060068481548110611aa057611aa06126bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611570565b915080611ad881612712565b91505061199b565b50600754600854611af091611426565b821015611b07576008546007549350935050509091565b90939092509050565b60008183611b315760405162461bcd60e51b815260040161096791906124ad565b5060006113fa848661273e565b600080600080611b4d8561216d565b90506000611b5a86612189565b90506000611b7282611b6c8986611570565b90611570565b979296509094509092505050565b6000808080611b8f8886611bd0565b90506000611b9d8887611bd0565b90506000611bab8888611bd0565b90506000611bbd82611b6c8686611570565b939b939a50919850919650505050505050565b600082600003611be257506000610895565b6000611bee8385612760565b905082611bfb858361273e565b146109865760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610967565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c8757611c876126bd565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d049190612777565b81600181518110611d1757611d176126bd565b6001600160a01b039283166020918202929092010152601a54611d3d9130911684611144565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d76908590600090869030904290600401612794565b600060405180830381600087803b158015611d9057600080fd5b505af1158015611da4573d6000803e3d6000fd5b505050505050565b601a54611dc49030906001600160a01b031684611144565b601a5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e34573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113c29190612805565b600d54158015611e695750600f54155b8015611e755750601454155b8015611e815750601154155b8015611e8d5750601754155b15611e9457565b600d8054600e55600f80546010556011805460125560148054601555601780546018556000948590559284905583905582905555565b600080600080600080611edc87611521565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150611f0e9088611570565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611f3d9087611570565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611f6c90866114c2565b6001600160a01b038916600090815260016020526040902055611f8e816121a5565b611f98848361222d565b876001600160a01b0316896001600160a01b031660008051602061285c83398151915285604051611fcb91815260200190565b60405180910390a3505050505050505050565b600080600080600080611ff087611521565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506120229087611570565b6001600160a01b03808b16600090815260016020908152604080832094909455918b1681526002909152205461205890846114c2565b6001600160a01b038916600090815260026020908152604080832093909355600190522054611f6c90866114c2565b60008060008060008061209987611521565b9550955095509550955095506120b18984878a612251565b955092506120c18984878a612339565b955092506120d18984878a6123fe565b6001600160a01b038b16600090815260016020526040902054909650909350611f3d9087611570565b60008060008060008061210c87611521565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061213e9088611570565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546120229087611570565b60006108956064611078600d5485611bd090919063ffffffff16565b60006108956064611078600f5485611bd090919063ffffffff16565b60006121af611403565b905060006121bd8383611bd0565b306000908152600160205260409020549091506121da90826114c2565b3060009081526001602090815260408083209390935560059052205460ff1615611989573060009081526002602052604090205461221890846114c2565b30600090815260026020526040902055505050565b60085461223a9083611570565b60085560095461224a90826114c2565b6009555050565b600080601154600003612268575083905082612330565b6011546000906122839061227d866064611426565b90611bd0565b90506000612299612292611403565b8390611bd0565b90506122a58682611570565b95506122b18783611570565b6013546001600160a01b03166000908152600160205260409020549097506122d990826114c2565b601380546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b169160008051602061285c83398151915291015b60405180910390a386869350935050505b94509492505050565b600080601754600003612350575083905082612330565b6017546000906123659061227d866064611426565b90506000612374612292611403565b90506123808682611570565b955061238c8783611570565b6019546001600160a01b03166000908152600160205260409020549097506123b490826114c2565b601980546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b169160008051602061285c833981519152910161231f565b600080601454600003612415575083905082612330565b60145460009061242a9061227d866064611426565b90506000612439612292611403565b90506124458682611570565b95506124518783611570565b3060009081526001602052604090205490975061246e90826114c2565b30600081815260016020526040908190209290925590516001600160a01b038a169060008051602061285c8339815191529061231f9086815260200190565b600060208083528351808285015260005b818110156124da578581018301518582016040015282016124be565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110be57600080fd5b6000806040838503121561252357600080fd5b823561252e816124fb565b946020939093013593505050565b60008060006060848603121561255157600080fd5b833561255c816124fb565b9250602084013561256c816124fb565b929592945050506040919091013590565b60006020828403121561258f57600080fd5b5035919050565b6000602082840312156125a857600080fd5b8135610986816124fb565b803580151581146125c357600080fd5b919050565b600080604083850312156125db57600080fd5b823591506125eb602084016125b3565b90509250929050565b600080600080600060a0868803121561260c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561264157600080fd5b610986826125b3565b6000806040838503121561265d57600080fd5b8235612668816124fb565b91506020830135612678816124fb565b809150509250929050565b600181811c9082168061269757607f821691505b6020821081036126b757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610895576108956126d3565b634e487b7160e01b600052603160045260246000fd5b600060018201612724576127246126d3565b5060010190565b80820180821115610895576108956126d3565b60008261275b57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610895576108956126d3565b60006020828403121561278957600080fd5b8151610986816124fb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127e45784516001600160a01b0316835293830193918301916001016127bf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561281a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3e8287c96ea60707657ddab9f94c0979773be129790e0e4abeac70d2128e6f364736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806352390c021161014457806395d89b41116100b6578063d12a76881161007a578063d12a768814610716578063dd62ed3e1461072c578063ea2f0b3714610772578063ec28438a14610792578063f0f165af146107b2578063f2fde38b146107d257600080fd5b806395d89b411461068b578063a457c2d7146106a0578063a9059cbb146106c0578063c0b0fda2146106e0578063c49b9a80146106f657600080fd5b8063715018a611610108578063715018a6146105c957806375f0a874146105de5780637b208769146105fe5780637d1db4a51461061e57806388f82020146106345780638da5cb5b1461066d57600080fd5b806352390c021461051a5780635342acb41461053a5780635d098b38146105735780636bc87c3a1461059357806370a08231146105a957600080fd5b8063313ce567116101dd57806340f8007a116101a157806340f8007a14610463578063437823ec146104795780634549b0391461049957806349bd5a5e146104b957806349c421e3146104d95780634a74bb02146104f957600080fd5b8063313ce567146103cb5780633685d419146103ed578063395093511461040d5780633b124fe71461042d5780633bd5d1731461044357600080fd5b806322976e0d1161022457806322976e0d1461033357806323b872dd1461034957806327c8f835146103695780632d8381191461038957806330563bd7146103a957600080fd5b806306fdde031461026c578063095ea7b31461029757806313114a9d146102c75780631694505e146102e657806318160ddd1461031e57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107f2565b60405161028e91906124ad565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612510565b610884565b604051901515815260200161028e565b3480156102d357600080fd5b506009545b60405190815260200161028e565b3480156102f257600080fd5b50601a54610306906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032a57600080fd5b506007546102d8565b34801561033f57600080fd5b506102d860145481565b34801561035557600080fd5b506102b761036436600461253c565b61089b565b34801561037557600080fd5b50601354610306906001600160a01b031681565b34801561039557600080fd5b506102d86103a436600461257d565b610904565b3480156103b557600080fd5b506103c96103c4366004612596565b61098d565b005b3480156103d757600080fd5b50600c5460405160ff909116815260200161028e565b3480156103f957600080fd5b506103c9610408366004612596565b6109b7565b34801561041957600080fd5b506102b7610428366004612510565b610b4b565b34801561043957600080fd5b506102d8600d5481565b34801561044f57600080fd5b506103c961045e36600461257d565b610b81565b34801561046f57600080fd5b506102d860175481565b34801561048557600080fd5b506103c9610494366004612596565b610c6b565b3480156104a557600080fd5b506102d86104b43660046125c8565b610c97565b3480156104c557600080fd5b50601b54610306906001600160a01b031681565b3480156104e557600080fd5b506103c96104f43660046125f4565b610d24565b34801561050557600080fd5b506000546102b790600160a81b900460ff1681565b34801561052657600080fd5b506103c9610535366004612596565b610d9a565b34801561054657600080fd5b506102b7610555366004612596565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561057f57600080fd5b506103c961058e366004612596565b610ecb565b34801561059f57600080fd5b506102d8600f5481565b3480156105b557600080fd5b506102d86105c4366004612596565b610ef5565b3480156105d557600080fd5b506103c9610f54565b3480156105ea57600080fd5b50601654610306906001600160a01b031681565b34801561060a57600080fd5b50601954610306906001600160a01b031681565b34801561062a57600080fd5b506102d8601d5481565b34801561064057600080fd5b506102b761064f366004612596565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067957600080fd5b506000546001600160a01b0316610306565b34801561069757600080fd5b50610281610f68565b3480156106ac57600080fd5b506102b76106bb366004612510565b610f77565b3480156106cc57600080fd5b506102b76106db366004612510565b610fc6565b3480156106ec57600080fd5b506102d860115481565b34801561070257600080fd5b506103c961071136600461262f565b610fd3565b34801561072257600080fd5b506102d8601c5481565b34801561073857600080fd5b506102d861074736600461264a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561077e57600080fd5b506103c961078d366004612596565b611033565b34801561079e57600080fd5b506103c96107ad36600461257d565b61105c565b3480156107be57600080fd5b506103c96107cd36600461257d565b6110c1565b3480156107de57600080fd5b506103c96107ed366004612596565b6110ce565b6060600a805461080190612683565b80601f016020809104026020016040519081016040528092919081815260200182805461082d90612683565b801561087a5780601f1061084f5761010080835404028352916020019161087a565b820191906000526020600020905b81548152906001019060200180831161085d57829003601f168201915b5050505050905090565b6000610891338484611144565b5060015b92915050565b60006108a8848484611268565b6108fa84336108f585604051806060016040528060288152602001612834602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906113c9565b611144565b5060019392505050565b60006008548211156109705760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b600061097a611403565b90506109868382611426565b9392505050565b610995611468565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6109bf611468565b6001600160a01b03811660009081526005602052604090205460ff16610a275760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610967565b60005b600654811015610b4757816001600160a01b031660068281548110610a5157610a516126bd565b6000918252602090912001546001600160a01b031603610b355760068054610a7b906001906126e9565b81548110610a8b57610a8b6126bd565b600091825260209091200154600680546001600160a01b039092169183908110610ab757610ab76126bd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610b0f57610b0f6126fc565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b3f81612712565b915050610a2a565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108919185906108f590866114c2565b3360008181526005602052604090205460ff1615610bf65760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610967565b6000610c0183611521565b505050506001600160a01b038416600090815260016020526040902054919250610c2d91905082611570565b6001600160a01b038316600090815260016020526040902055600854610c539082611570565b600855600954610c6390846114c2565b600955505050565b610c73611468565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610ceb5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610967565b81610d0a576000610cfb84611521565b50939550610895945050505050565b6000610d1584611521565b50929550610895945050505050565b610d2c611468565b6019610d4682610d40858188818c8c6114c2565b906114c2565b1115610d835760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b6044820152606401610967565b600d94909455600f92909255601455601155601755565b610da2611468565b6001600160a01b03811660009081526005602052604090205460ff1615610e0b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610967565b6001600160a01b03811660009081526001602052604090205415610e65576001600160a01b038116600090815260016020526040902054610e4b90610904565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b610ed3611468565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610f3257506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461089590610904565b610f5c611468565b610f6660006115b2565b565b6060600b805461080190612683565b600061089133846108f58560405180606001604052806025815260200161287c602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906113c9565b6000610891338484611268565b610fdb611468565b60008054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061102890831515815260200190565b60405180910390a150565b61103b611468565b6001600160a01b03166000908152600460205260409020805460ff19169055565b611064611468565b601d81905561107e61019061107860075490565b90611426565b601d54116110be5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610967565b50565b6110c9611468565b601c55565b6110d6611468565b6001600160a01b03811661113b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b6110be816115b2565b6001600160a01b0383166111a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610967565b6001600160a01b0382166112075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610967565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610967565b6000811161132e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610967565b600061133930610ef5565b601c549091508110801590819061135a5750600054600160a01b900460ff16155b80156113735750601b546001600160a01b038581169116145b80156113885750600054600160a81b900460ff165b801561139657506000601454115b80156113a457506000600f54115b156113b757601c5491506113b782611602565b6113c285858561171a565b5050505050565b600081848411156113ed5760405162461bcd60e51b815260040161096791906124ad565b5060006113fa84866126e9565b95945050505050565b600080600061141061198e565b909250905061141f8282611426565b9250505090565b600061098683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b10565b6000546001600160a01b03163314610f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b6000806114cf838561272b565b9050838110156109865760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610967565b60008060008060008060008060006115388a611b3e565b92509250925060008060006115568d8686611551611403565b611b80565b919f909e50909c50959a5093985091965092945050505050565b600061098683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805460ff60a01b1916600160a01b178155601454600f546116379161162991906114c2565b600f54611078908590611bd0565b90506000611646826002611426565b905060006116548383611570565b90504761166083611c52565b600061166c4783611570565b90506116788382611dac565b61168a6116858787611570565b611c52565b6016546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156116c3573d6000803e3d6000fd5b5060408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506000805460ff60a01b1916905550505050565b6001600160a01b03831660009081526004602052604090205460ff168061175957506001600160a01b03821660009081526004602052604090205460ff165b1561176b57611766611e59565b6117ce565b601d548111156117ce5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610967565b6001600160a01b03831660009081526005602052604090205460ff16801561180f57506001600160a01b03821660009081526005602052604090205460ff16155b156118245761181f838383611eca565b611922565b6001600160a01b03831660009081526005602052604090205460ff1615801561186557506001600160a01b03821660009081526005602052604090205460ff165b156118755761181f838383611fde565b6001600160a01b03831660009081526005602052604090205460ff161580156118b757506001600160a01b03821660009081526005602052604090205460ff16155b156118c75761181f838383612087565b6001600160a01b03831660009081526005602052604090205460ff16801561190757506001600160a01b03821660009081526005602052604090205460ff165b156119175761181f8383836120fa565b611922838383612087565b6001600160a01b03831660009081526004602052604090205460ff168061196157506001600160a01b03821660009081526004602052604090205460ff165b1561198957611989600e54600d55601054600f55601254601155601554601455601854601755565b505050565b6008546007546000918291825b600654811015611ae0578260016000600684815481106119bd576119bd6126bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a285750816002600060068481548110611a0157611a016126bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a3e57600854600754945094505050509091565b611a846001600060068481548110611a5857611a586126bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611570565b9250611acc6002600060068481548110611aa057611aa06126bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611570565b915080611ad881612712565b91505061199b565b50600754600854611af091611426565b821015611b07576008546007549350935050509091565b90939092509050565b60008183611b315760405162461bcd60e51b815260040161096791906124ad565b5060006113fa848661273e565b600080600080611b4d8561216d565b90506000611b5a86612189565b90506000611b7282611b6c8986611570565b90611570565b979296509094509092505050565b6000808080611b8f8886611bd0565b90506000611b9d8887611bd0565b90506000611bab8888611bd0565b90506000611bbd82611b6c8686611570565b939b939a50919850919650505050505050565b600082600003611be257506000610895565b6000611bee8385612760565b905082611bfb858361273e565b146109865760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610967565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c8757611c876126bd565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d049190612777565b81600181518110611d1757611d176126bd565b6001600160a01b039283166020918202929092010152601a54611d3d9130911684611144565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d76908590600090869030904290600401612794565b600060405180830381600087803b158015611d9057600080fd5b505af1158015611da4573d6000803e3d6000fd5b505050505050565b601a54611dc49030906001600160a01b031684611144565b601a5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e34573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113c29190612805565b600d54158015611e695750600f54155b8015611e755750601454155b8015611e815750601154155b8015611e8d5750601754155b15611e9457565b600d8054600e55600f80546010556011805460125560148054601555601780546018556000948590559284905583905582905555565b600080600080600080611edc87611521565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150611f0e9088611570565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611f3d9087611570565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611f6c90866114c2565b6001600160a01b038916600090815260016020526040902055611f8e816121a5565b611f98848361222d565b876001600160a01b0316896001600160a01b031660008051602061285c83398151915285604051611fcb91815260200190565b60405180910390a3505050505050505050565b600080600080600080611ff087611521565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506120229087611570565b6001600160a01b03808b16600090815260016020908152604080832094909455918b1681526002909152205461205890846114c2565b6001600160a01b038916600090815260026020908152604080832093909355600190522054611f6c90866114c2565b60008060008060008061209987611521565b9550955095509550955095506120b18984878a612251565b955092506120c18984878a612339565b955092506120d18984878a6123fe565b6001600160a01b038b16600090815260016020526040902054909650909350611f3d9087611570565b60008060008060008061210c87611521565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061213e9088611570565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546120229087611570565b60006108956064611078600d5485611bd090919063ffffffff16565b60006108956064611078600f5485611bd090919063ffffffff16565b60006121af611403565b905060006121bd8383611bd0565b306000908152600160205260409020549091506121da90826114c2565b3060009081526001602090815260408083209390935560059052205460ff1615611989573060009081526002602052604090205461221890846114c2565b30600090815260026020526040902055505050565b60085461223a9083611570565b60085560095461224a90826114c2565b6009555050565b600080601154600003612268575083905082612330565b6011546000906122839061227d866064611426565b90611bd0565b90506000612299612292611403565b8390611bd0565b90506122a58682611570565b95506122b18783611570565b6013546001600160a01b03166000908152600160205260409020549097506122d990826114c2565b601380546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b169160008051602061285c83398151915291015b60405180910390a386869350935050505b94509492505050565b600080601754600003612350575083905082612330565b6017546000906123659061227d866064611426565b90506000612374612292611403565b90506123808682611570565b955061238c8783611570565b6019546001600160a01b03166000908152600160205260409020549097506123b490826114c2565b601980546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b169160008051602061285c833981519152910161231f565b600080601454600003612415575083905082612330565b60145460009061242a9061227d866064611426565b90506000612439612292611403565b90506124458682611570565b95506124518783611570565b3060009081526001602052604090205490975061246e90826114c2565b30600081815260016020526040908190209290925590516001600160a01b038a169060008051602061285c8339815191529061231f9086815260200190565b600060208083528351808285015260005b818110156124da578581018301518582016040015282016124be565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110be57600080fd5b6000806040838503121561252357600080fd5b823561252e816124fb565b946020939093013593505050565b60008060006060848603121561255157600080fd5b833561255c816124fb565b9250602084013561256c816124fb565b929592945050506040919091013590565b60006020828403121561258f57600080fd5b5035919050565b6000602082840312156125a857600080fd5b8135610986816124fb565b803580151581146125c357600080fd5b919050565b600080604083850312156125db57600080fd5b823591506125eb602084016125b3565b90509250929050565b600080600080600060a0868803121561260c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561264157600080fd5b610986826125b3565b6000806040838503121561265d57600080fd5b8235612668816124fb565b91506020830135612678816124fb565b809150509250929050565b600181811c9082168061269757607f821691505b6020821081036126b757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610895576108956126d3565b634e487b7160e01b600052603160045260246000fd5b600060018201612724576127246126d3565b5060010190565b80820180821115610895576108956126d3565b60008261275b57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610895576108956126d3565b60006020828403121561278957600080fd5b8151610986816124fb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127e45784516001600160a01b0316835293830193918301916001016127bf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561281a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3e8287c96ea60707657ddab9f94c0979773be129790e0e4abeac70d2128e6f364736f6c63430008120033

Deployed Bytecode Sourcemap

24511:22148:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27633:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28545:161;;;;;;;;;;-1:-1:-1;28545:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;28545:161:0;1023:187:1;29666:87:0;;;;;;;;;;-1:-1:-1;29735:10:0;;29666:87;;;1361:25:1;;;1349:2;1334:18;29666:87:0;1215:177:1;26068:42:0;;;;;;;;;;-1:-1:-1;26068:42:0;;;;-1:-1:-1;;;;;26068:42:0;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;26068:42:0;1397:230:1;27910:95:0;;;;;;;;;;-1:-1:-1;27990:7:0;;27910:95;;25693:32;;;;;;;;;;;;;;;;28714:313;;;;;;;;;;-1:-1:-1;28714:313:0;;;;;:::i;:::-;;:::i;25613:71::-;;;;;;;;;;-1:-1:-1;25613:71:0;;;;-1:-1:-1;;;;;25613:71:0;;;30590:253;;;;;;;;;;-1:-1:-1;30590:253:0;;;;;:::i;:::-;;:::i;45474:104::-;;;;;;;;;;-1:-1:-1;45474:104:0;;;;;:::i;:::-;;:::i;:::-;;27819:83;;;;;;;;;;-1:-1:-1;27885:9:0;;27819:83;;27885:9;;;;2880:36:1;;2868:2;2853:18;27819:83:0;2738:184:1;31192:479:0;;;;;;;;;;-1:-1:-1;31192:479:0;;;;;:::i;:::-;;:::i;29035:218::-;;;;;;;;;;-1:-1:-1;29035:218:0;;;;;:::i;:::-;;:::i;25341:26::-;;;;;;;;;;;;;;;;29761:377;;;;;;;;;;-1:-1:-1;29761:377:0;;;;;:::i;:::-;;:::i;25893:30::-;;;;;;;;;;;;;;;;45221:111;;;;;;;;;;-1:-1:-1;45221:111:0;;;;;:::i;:::-;;:::i;30146:436::-;;;;;;;;;;-1:-1:-1;30146:436:0;;;;;:::i;:::-;;:::i;26117:29::-;;;;;;;;;;-1:-1:-1;26117:29:0;;;;-1:-1:-1;;;;;26117:29:0;;;45589:433;;;;;;;;;;-1:-1:-1;45589:433:0;;;;;:::i;:::-;;:::i;24657:40::-;;;;;;;;;;-1:-1:-1;24657:40:0;;;;-1:-1:-1;;;24657:40:0;;;;;;30851:333;;;;;;;;;;-1:-1:-1;30851:333:0;;;;;:::i;:::-;;:::i;44968:123::-;;;;;;;;;;-1:-1:-1;44968:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;45056:27:0;45032:4;45056:27;;;:18;:27;;;;;;;;;44968:123;45344:122;;;;;;;;;;-1:-1:-1;45344:122:0;;;;;:::i;:::-;;:::i;25428:32::-;;;;;;;;;;;;;;;;28013:198;;;;;;;;;;-1:-1:-1;28013:198:0;;;;;:::i;:::-;;:::i;4749:103::-;;;;;;;;;;;;;:::i;25792:92::-;;;;;;;;;;-1:-1:-1;25792:92:0;;;;-1:-1:-1;;;;;25792:92:0;;;25986:73;;;;;;;;;;-1:-1:-1;25986:73:0;;;;-1:-1:-1;;;;;25986:73:0;;;26223:46;;;;;;;;;;;;;;;;29538:120;;;;;;;;;;-1:-1:-1;29538:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;29630:20:0;29606:4;29630:20;;;:11;:20;;;;;;;;;29538:120;4108:87;;;;;;;;;;-1:-1:-1;4154:7:0;4181:6;-1:-1:-1;;;;;4181:6:0;4108:87;;27724;;;;;;;;;;;;;:::i;29261:269::-;;;;;;;;;;-1:-1:-1;29261:269:0;;;;;:::i;:::-;;:::i;28219:167::-;;;;;;;;;;-1:-1:-1;28219:167:0;;;;;:::i;:::-;;:::i;25529:27::-;;;;;;;;;;;;;;;;46385:171;;;;;;;;;;-1:-1:-1;46385:171:0;;;;;:::i;:::-;;:::i;26155:61::-;;;;;;;;;;;;;;;;28394:143;;;;;;;;;;-1:-1:-1;28394:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;28502:18:0;;;28475:7;28502:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28394:143;45103:110;;;;;;;;;;-1:-1:-1;45103:110:0;;;;;:::i;:::-;;:::i;46188:185::-;;;;;;;;;;-1:-1:-1;46188:185:0;;;;;:::i;:::-;;:::i;46034:142::-;;;;;;;;;;-1:-1:-1;46034:142:0;;;;;:::i;:::-;;:::i;5007:201::-;;;;;;;;;;-1:-1:-1;5007:201:0;;;;;:::i;:::-;;:::i;27633:83::-;27670:13;27703:5;27696:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27633:83;:::o;28545:161::-;28620:4;28637:39;2764:10;28660:7;28669:6;28637:8;:39::i;:::-;-1:-1:-1;28694:4:0;28545:161;;;;;:::o;28714:313::-;28812:4;28829:36;28839:6;28847:9;28858:6;28829:9;:36::i;:::-;28876:121;28885:6;2764:10;28907:89;28945:6;28907:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28907:19:0;;;;;;:11;:19;;;;;;;;2764:10;28907:33;;;;;;;;;;:37;:89::i;:::-;28876:8;:121::i;:::-;-1:-1:-1;29015:4:0;28714:313;;;;;:::o;30590:253::-;30656:7;30695;;30684;:18;;30676:73;;;;-1:-1:-1;;;30676:73:0;;5453:2:1;30676:73:0;;;5435:21:1;5492:2;5472:18;;;5465:30;5531:34;5511:18;;;5504:62;-1:-1:-1;;;5582:18:1;;;5575:40;5632:19;;30676:73:0;;;;;;;;;30760:19;30783:10;:8;:10::i;:::-;30760:33;-1:-1:-1;30811:24:0;:7;30760:33;30811:11;:24::i;:::-;30804:31;30590:253;-1:-1:-1;;;30590:253:0:o;45474:104::-;3994:13;:11;:13::i;:::-;45547::::1;:23:::0;;-1:-1:-1;;;;;;45547:23:0::1;-1:-1:-1::0;;;;;45547:23:0;;;::::1;::::0;;;::::1;::::0;;45474:104::o;31192:479::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;31274:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31266:60;;;::::0;-1:-1:-1;;;31266:60:0;;5864:2:1;31266:60:0::1;::::0;::::1;5846:21:1::0;5903:2;5883:18;;;5876:30;5942:29;5922:18;;;5915:57;5989:18;;31266:60:0::1;5662:351:1::0;31266:60:0::1;31342:9;31337:327;31361:9;:16:::0;31357:20;::::1;31337:327;;;31419:7;-1:-1:-1::0;;;;;31403:23:0::1;:9;31413:1;31403:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31403:12:0::1;:23:::0;31399:254:::1;;31462:9;31472:16:::0;;:20:::1;::::0;31491:1:::1;::::0;31472:20:::1;:::i;:::-;31462:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31447:9:::1;:12:::0;;-1:-1:-1;;;;;31462:31:0;;::::1;::::0;31457:1;;31447:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31447:46:0::1;-1:-1:-1::0;;;;;31447:46:0;;::::1;;::::0;;31512:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31551:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31551:28:0::1;::::0;;31598:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31598:15:0;;;;;-1:-1:-1;;;;;;31598:15:0::1;::::0;;;;;31337:327:::1;31192:479:::0;:::o;31399:254::-:1;31379:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31337:327;;;;31192:479:::0;:::o;29035:218::-;2764:10;29123:4;29172:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29172:34:0;;;;;;;;;;29123:4;;29140:83;;29163:7;;29172:50;;29211:10;29172:38;:50::i;29761:377::-;2764:10;29813:14;29862:19;;;:11;:19;;;;;;;;29861:20;29853:77;;;;-1:-1:-1;;;29853:77:0;;6889:2:1;29853:77:0;;;6871:21:1;6928:2;6908:18;;;6901:30;6967:34;6947:18;;;6940:62;-1:-1:-1;;;7018:18:1;;;7011:42;7070:19;;29853:77:0;6687:408:1;29853:77:0;29942:15;29966:19;29977:7;29966:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30014:15:0;;;;;;:7;:15;;;;;;29941:44;;-1:-1:-1;30014:28:0;;:15;-1:-1:-1;29941:44:0;30014:19;:28::i;:::-;-1:-1:-1;;;;;29996:15:0;;;;;;:7;:15;;;;;:46;30063:7;;:20;;30075:7;30063:11;:20::i;:::-;30053:7;:30;30107:10;;:23;;30122:7;30107:14;:23::i;:::-;30094:10;:36;-1:-1:-1;;;29761:377:0:o;45221:111::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;45290:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;45290:34:0::1;45320:4;45290:34;::::0;;45221:111::o;30146:436::-;30236:7;30275;;30264;:18;;30256:62;;;;-1:-1:-1;;;30256:62:0;;7302:2:1;30256:62:0;;;7284:21:1;7341:2;7321:18;;;7314:30;7380:33;7360:18;;;7353:61;7431:18;;30256:62:0;7100:355:1;30256:62:0;30334:17;30329:246;;30369:15;30393:19;30404:7;30393:10;:19::i;:::-;-1:-1:-1;30368:44:0;;-1:-1:-1;30427:14:0;;-1:-1:-1;;;;;30427:14:0;30329:246;30476:23;30507:19;30518:7;30507:10;:19::i;:::-;-1:-1:-1;30474:52:0;;-1:-1:-1;30541:22:0;;-1:-1:-1;;;;;30541:22:0;45589:433;3994:13;:11;:13::i;:::-;45824:2:::1;45749:71;45809:10:::0;45749:55:::1;45796:7:::0;45749:55;45778:12;45749:55;:6;45760:12;45749:10:::1;:24::i;:::-;:28:::0;::::1;:42::i;:71::-;:77;;45741:102;;;::::0;-1:-1:-1;;;45741:102:0;;7662:2:1;45741:102:0::1;::::0;::::1;7644:21:1::0;7701:2;7681:18;;;7674:30;-1:-1:-1;;;7720:18:1;;;7713:42;7772:18;;45741:102:0::1;7460:336:1::0;45741:102:0::1;45854:7;:16:::0;;;;45881:13:::1;:28:::0;;;;45920:13:::1;:28:::0;45959:8:::1;:18:::0;45988:11:::1;:24:::0;45589:433::o;30851:333::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;30934:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30933:21;30925:61;;;::::0;-1:-1:-1;;;30925:61:0;;5864:2:1;30925:61:0::1;::::0;::::1;5846:21:1::0;5903:2;5883:18;;;5876:30;5942:29;5922:18;;;5915:57;5989:18;;30925:61:0::1;5662:351:1::0;30925:61:0::1;-1:-1:-1::0;;;;;31000:16:0;::::1;31019:1;31000:16:::0;;;:7:::1;:16;::::0;;;;;:20;30997:108:::1;;-1:-1:-1::0;;;;;31076:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31056:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31037:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30997:108:::1;-1:-1:-1::0;;;;;31115:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31115:27:0::1;31138:4;31115:27:::0;;::::1;::::0;;;31153:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31153:23:0::1;::::0;;::::1;::::0;;30851:333::o;45344:122::-;3994:13;:11;:13::i;:::-;45431:15:::1;:27:::0;;-1:-1:-1;;;;;;45431:27:0::1;-1:-1:-1::0;;;;;45431:27:0;;;::::1;::::0;;;::::1;::::0;;45344:122::o;28013:198::-;-1:-1:-1;;;;;28103:20:0;;28079:7;28103:20;;;:11;:20;;;;;;;;28099:49;;;-1:-1:-1;;;;;;28132:16:0;;;;;:7;:16;;;;;;;28013:198::o;28099:49::-;-1:-1:-1;;;;;28186:16:0;;;;;;:7;:16;;;;;;28166:37;;:19;:37::i;4749:103::-;3994:13;:11;:13::i;:::-;4814:30:::1;4841:1;4814:18;:30::i;:::-;4749:103::o:0;27724:87::-;27763:13;27796:7;27789:14;;;;;:::i;29261:269::-;29354:4;29371:129;2764:10;29394:7;29403:96;29442:15;29403:96;;;;;;;;;;;;;;;;;2764:10;29403:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29403:34:0;;;;;;;;;;;;:38;:96::i;28219:167::-;28297:4;28314:42;2764:10;28338:9;28349:6;28314:9;:42::i;46385:171::-;3994:13;:11;:13::i;:::-;46462:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;46462:32:0::1;-1:-1:-1::0;;;;46462:32:0;;::::1;;::::0;;46510:38:::1;::::0;::::1;::::0;::::1;::::0;46486:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;46510:38:0::1;;;;;;;;46385:171:::0;:::o;45103:110::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;45170:27:0::1;45200:5;45170:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;45170:35:0::1;::::0;;45103:110::o;46188:185::-;3994:13;:11;:13::i;:::-;46265:12:::1;:26:::0;;;46325:22:::1;46343:3;46325:13;27990:7:::0;;;27910:95;46325:13:::1;:17:::0;::::1;:22::i;:::-;46310:12;;:37;46302:63;;;::::0;-1:-1:-1;;;46302:63:0;;8003:2:1;46302:63:0::1;::::0;::::1;7985:21:1::0;8042:2;8022:18;;;8015:30;-1:-1:-1;;;8061:18:1;;;8054:43;8114:18;;46302:63:0::1;7801:337:1::0;46302:63:0::1;46188:185:::0;:::o;46034:142::-;3994:13;:11;:13::i;:::-;46127:29:::1;:41:::0;46034:142::o;5007:201::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;5096:22:0;::::1;5088:73;;;::::0;-1:-1:-1;;;5088:73:0;;8345:2:1;5088:73:0::1;::::0;::::1;8327:21:1::0;8384:2;8364:18;;;8357:30;8423:34;8403:18;;;8396:62;-1:-1:-1;;;8474:18:1;;;8467:36;8520:19;;5088:73:0::1;8143:402:1::0;5088:73:0::1;5172:28;5191:8;5172:18;:28::i;35913:337::-:0;-1:-1:-1;;;;;36006:19:0;;35998:68;;;;-1:-1:-1;;;35998:68:0;;8752:2:1;35998:68:0;;;8734:21:1;8791:2;8771:18;;;8764:30;8830:34;8810:18;;;8803:62;-1:-1:-1;;;8881:18:1;;;8874:34;8925:19;;35998:68:0;8550:400:1;35998:68:0;-1:-1:-1;;;;;36085:21:0;;36077:68;;;;-1:-1:-1;;;36077:68:0;;9157:2:1;36077:68:0;;;9139:21:1;9196:2;9176:18;;;9169:30;9235:34;9215:18;;;9208:62;-1:-1:-1;;;9286:18:1;;;9279:32;9328:19;;36077:68:0;8955:398:1;36077:68:0;-1:-1:-1;;;;;36158:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36210:32;;1361:25:1;;;36210:32:0;;1334:18:1;36210:32:0;;;;;;;35913:337;;;:::o;36258:1238::-;-1:-1:-1;;;;;36380:18:0;;36372:68;;;;-1:-1:-1;;;36372:68:0;;9560:2:1;36372:68:0;;;9542:21:1;9599:2;9579:18;;;9572:30;9638:34;9618:18;;;9611:62;-1:-1:-1;;;9689:18:1;;;9682:35;9734:19;;36372:68:0;9358:401:1;36372:68:0;36468:1;36459:6;:10;36451:64;;;;-1:-1:-1;;;36451:64:0;;9966:2:1;36451:64:0;;;9948:21:1;10005:2;9985:18;;;9978:30;10044:34;10024:18;;;10017:62;-1:-1:-1;;;10095:18:1;;;10088:39;10144:19;;36451:64:0;9764:405:1;36451:64:0;36810:28;36841:24;36859:4;36841:9;:24::i;:::-;36935:29;;36810:55;;-1:-1:-1;36911:53:0;;;;;;;36993;;-1:-1:-1;37030:16:0;;-1:-1:-1;;;37030:16:0;;;;37029:17;36993:53;:89;;;;-1:-1:-1;37069:13:0;;-1:-1:-1;;;;;37063:19:0;;;37069:13;;37063:19;36993:89;:127;;;;-1:-1:-1;37099:21:0;;-1:-1:-1;;;37099:21:0;;;;36993:127;:162;;;;;37154:1;37138:13;;:17;36993:162;:196;;;;;37188:1;37172:13;;:17;36993:196;36975:418;;;37239:29;;37216:52;;37345:36;37360:20;37345:14;:36::i;:::-;37458:30;37473:4;37478:2;37481:6;37458:14;:30::i;:::-;36361:1135;;36258:1238;;;:::o;6835:192::-;6921:7;6957:12;6949:6;;;;6941:29;;;;-1:-1:-1;;;6941:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6981:9:0;6993:5;6997:1;6993;:5;:::i;:::-;6981:17;6835:192;-1:-1:-1;;;;;6835:192:0:o;33686:163::-;33727:7;33748:15;33765;33784:19;:17;:19::i;:::-;33747:56;;-1:-1:-1;33747:56:0;-1:-1:-1;33821:20:0;33747:56;;33821:11;:20::i;:::-;33814:27;;;;33686:163;:::o;8233:132::-;8291:7;8318:39;8322:1;8325;8318:39;;;;;;;;;;;;;;;;;:3;:39::i;4273:132::-;4154:7;4181:6;-1:-1:-1;;;;;4181:6:0;2764:10;4337:23;4329:68;;;;-1:-1:-1;;;4329:68:0;;10376:2:1;4329:68:0;;;10358:21:1;;;10395:18;;;10388:30;10454:34;10434:18;;;10427:62;10506:18;;4329:68:0;10174:356:1;5932:181:0;5990:7;;6022:5;6026:1;6022;:5;:::i;:::-;6010:17;;6051:1;6046;:6;;6038:46;;;;-1:-1:-1;;;6038:46:0;;10867:2:1;6038:46:0;;;10849:21:1;10906:2;10886:18;;;10879:30;10945:29;10925:18;;;10918:57;10992:18;;6038:46:0;10665:351:1;32484:419:0;32543:7;32552;32561;32570;32579;32588;32609:23;32634:12;32648:18;32670:20;32682:7;32670:11;:20::i;:::-;32608:82;;;;;;32702:15;32719:23;32744:12;32760:50;32772:7;32781:4;32787:10;32799;:8;:10::i;:::-;32760:11;:50::i;:::-;32701:109;;;;-1:-1:-1;32701:109:0;;-1:-1:-1;32861:15:0;;-1:-1:-1;32878:4:0;;-1:-1:-1;32884:10:0;;-1:-1:-1;32484:419:0;;-1:-1:-1;;;;;32484:419:0:o;6396:136::-;6454:7;6481:43;6485:1;6488;6481:43;;;;;;;;;;;;;;;;;:3;:43::i;5368:191::-;5442:16;5461:6;;-1:-1:-1;;;;;5478:17:0;;;-1:-1:-1;;;;;;5478:17:0;;;;;;5511:40;;5461:6;;;;;;;5511:40;;5442:16;5511:40;5431:128;5368:191;:::o;37504:1219::-;26576:16;:23;;-1:-1:-1;;;;26576:23:0;-1:-1:-1;;;26576:23:0;;;:16;37677:13;37659::::1;::::0;37615:77:::1;::::0;37659:32:::1;::::0;:13;:17:::1;:32::i;:::-;37640:13;::::0;37615:39:::1;::::0;:20;;:24:::1;:39::i;:77::-;37589:103:::0;-1:-1:-1;37754:12:0::1;37769:22;37589:103:::0;37789:1:::1;37769:19;:22::i;:::-;37754:37:::0;-1:-1:-1;37802:17:0::1;37822:25;:15:::0;37754:37;37822:19:::1;:25::i;:::-;37802:45:::0;-1:-1:-1;38150:21:0::1;38216:22;38233:4:::0;38216:16:::1;:22::i;:::-;38369:18;38390:41;:21;38416:14:::0;38390:25:::1;:41::i;:::-;38369:62;;38481:35;38494:9;38505:10;38481:12;:35::i;:::-;38529:59;38546:41;:20:::0;38571:15;38546:24:::1;:41::i;:::-;38529:16;:59::i;:::-;38599:15;::::0;:47:::1;::::0;-1:-1:-1;;;;;38599:15:0;;::::1;::::0;38624:21:::1;38599:47:::0;::::1;;;::::0;:15:::1;:47:::0;:15;:47;38624:21;38599:15;:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;38672:43:0::1;::::0;;11223:25:1;;;11279:2;11264:18;;11257:34;;;11307:18;;;11300:34;;;38672:43:0::1;::::0;11211:2:1;11196:18;38672:43:0::1;;;;;;;-1:-1:-1::0;;26641:5:0;26622:24;;-1:-1:-1;;;;26622:24:0;;;-1:-1:-1;;;;37504:1219:0:o;39926:1096::-;-1:-1:-1;;;;;40029:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40059:29:0;;;;;;:18;:29;;;;;;;;40029:59;40026:245;;;40116:14;:12;:14::i;:::-;40026:245;;;40202:12;;40192:6;:22;;40184:75;;;;-1:-1:-1;;;40184:75:0;;11547:2:1;40184:75:0;;;11529:21:1;11586:2;11566:18;;;11559:30;11625:34;11605:18;;;11598:62;-1:-1:-1;;;11676:18:1;;;11669:38;11724:19;;40184:75:0;11345:404:1;40184:75:0;-1:-1:-1;;;;;40287:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40311:22:0;;;;;;:11;:22;;;;;;;;40310:23;40287:46;40283:597;;;40350:48;40372:6;40380:9;40391:6;40350:21;:48::i;:::-;40283:597;;;-1:-1:-1;;;;;40421:19:0;;;;;;:11;:19;;;;;;;;40420:20;:46;;;;-1:-1:-1;;;;;;40444:22:0;;;;;;:11;:22;;;;;;;;40420:46;40416:464;;;40483:46;40503:6;40511:9;40522:6;40483:19;:46::i;40416:464::-;-1:-1:-1;;;;;40552:19:0;;;;;;:11;:19;;;;;;;;40551:20;:47;;;;-1:-1:-1;;;;;;40576:22:0;;;;;;:11;:22;;;;;;;;40575:23;40551:47;40547:333;;;40615:44;40633:6;40641:9;40652:6;40615:17;:44::i;40547:333::-;-1:-1:-1;;;;;40681:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40704:22:0;;;;;;:11;:22;;;;;;;;40681:45;40677:203;;;40743:48;40765:6;40773:9;40784:6;40743:21;:48::i;40677:203::-;40824:44;40842:6;40850:9;40861:6;40824:17;:44::i;:::-;-1:-1:-1;;;;;40903:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40933:29:0;;;;;;:18;:29;;;;;;;;40903:59;40900:115;;;40988:15;35708;;35698:7;:25;35749:21;;35733:13;:37;35791:16;;35780:8;:27;35833:21;;35817:13;:37;35878:19;;35864:11;:33;35655:250;40988:15;39926:1096;;;:::o;33857:561::-;33954:7;;33990;;33907;;;;;34014:289;34038:9;:16;34034:20;;34014:289;;;34104:7;34080;:21;34088:9;34098:1;34088:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34088:12:0;34080:21;;;;;;;;;;;;;:31;;:66;;;34139:7;34115;:21;34123:9;34133:1;34123:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34123:12:0;34115:21;;;;;;;;;;;;;:31;34080:66;34076:97;;;34156:7;;34165;;34148:25;;;;;;;33857:561;;:::o;34076:97::-;34198:34;34210:7;:21;34218:9;34228:1;34218:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34218:12:0;34210:21;;;;;;;;;;;;;34198:7;;:11;:34::i;:::-;34188:44;;34257:34;34269:7;:21;34277:9;34287:1;34277:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34277:12:0;34269:21;;;;;;;;;;;;;34257:7;;:11;:34::i;:::-;34247:44;-1:-1:-1;34056:3:0;;;;:::i;:::-;;;;34014:289;;;-1:-1:-1;34339:7:0;;34327;;:20;;:11;:20::i;:::-;34317:7;:30;34313:61;;;34357:7;;34366;;34349:25;;;;;;33857:561;;:::o;34313:61::-;34393:7;;34402;;-1:-1:-1;33857:561:0;-1:-1:-1;33857:561:0:o;8861:278::-;8947:7;8982:12;8975:5;8967:28;;;;-1:-1:-1;;;8967:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9006:9:0;9018:5;9022:1;9018;:5;:::i;32911:330::-;32971:7;32980;32989;33009:12;33024:24;33040:7;33024:15;:24::i;:::-;33009:39;;33059:18;33080:30;33102:7;33080:21;:30::i;:::-;33059:51;-1:-1:-1;33121:23:0;33147:33;33059:51;33147:17;:7;33159:4;33147:11;:17::i;:::-;:21;;:33::i;:::-;33121:59;33216:4;;-1:-1:-1;33222:10:0;;-1:-1:-1;32911:330:0;;-1:-1:-1;;;32911:330:0:o;33249:429::-;33364:7;;;;33420:24;:7;33432:11;33420;:24::i;:::-;33402:42;-1:-1:-1;33455:12:0;33470:21;:4;33479:11;33470:8;:21::i;:::-;33455:36;-1:-1:-1;33502:18:0;33523:27;:10;33538:11;33523:14;:27::i;:::-;33502:48;-1:-1:-1;33561:23:0;33587:33;33502:48;33587:17;:7;33599:4;33587:11;:17::i;:33::-;33639:7;;;;-1:-1:-1;33665:4:0;;-1:-1:-1;33249:429:0;;-1:-1:-1;;;;;;;33249:429:0:o;7286:471::-;7344:7;7589:1;7594;7589:6;7585:47;;-1:-1:-1;7619:1:0;7612:8;;7585:47;7644:9;7656:5;7660:1;7656;:5;:::i;:::-;7644:17;-1:-1:-1;7689:1:0;7680:5;7684:1;7644:17;7680:5;:::i;:::-;:10;7672:56;;;;-1:-1:-1;;;7672:56:0;;12351:2:1;7672:56:0;;;12333:21:1;12390:2;12370:18;;;12363:30;12429:34;12409:18;;;12402:62;-1:-1:-1;;;12480:18:1;;;12473:31;12521:19;;7672:56:0;12149:397:1;38731:589:0;38881:16;;;38895:1;38881:16;;;;;;;;38857:21;;38881:16;;;;;;;;;;-1:-1:-1;38881:16:0;38857:40;;38926:4;38908;38913:1;38908:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38908:23:0;;;:7;;;;;;;;;;:23;;;;38952:15;;:22;;;-1:-1:-1;;;38952:22:0;;;;:15;;;;;:20;;:22;;;;;38908:7;;38952:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38942:4;38947:1;38942:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38942:32:0;;;:7;;;;;;;;;:32;39019:15;;38987:62;;39004:4;;39019:15;39037:11;38987:8;:62::i;:::-;39088:15;;:224;;-1:-1:-1;;;39088:224:0;;-1:-1:-1;;;;;39088:15:0;;;;:66;;:224;;39169:11;;39088:15;;39239:4;;39266;;39286:15;;39088:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38786:534;38731:589;:::o;39328:517::-;39508:15;;39476:62;;39493:4;;-1:-1:-1;;;;;39508:15:0;39526:11;39476:8;:62::i;:::-;39581:15;;39785:11;;39581:256;;-1:-1:-1;;;39581:256:0;;39653:4;39581:256;;;14265:34:1;14315:18;;;14308:34;;;39581:15:0;14358:18:1;;;14351:34;;;14401:18;;;14394:34;-1:-1:-1;;;;;39785:11:0;;;14444:19:1;;;14437:44;39811:15:0;14497:19:1;;;14490:35;39581:15:0;;;:31;;39620:9;;14199:19:1;;39581:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35133:510::-;35179:7;;:12;:34;;;;-1:-1:-1;35195:13:0;;:18;35179:34;:54;;;;-1:-1:-1;35217:13:0;;:16;35179:54;:69;;;;-1:-1:-1;35237:8:0;;:11;35179:69;:87;;;;-1:-1:-1;35252:11:0;;:14;35179:87;35176:99;;;35133:510::o;35176:99::-;35313:7;;;35295:15;:25;35355:13;;;35331:21;:37;35398:8;;;35379:16;:27;35441:13;;;35417:21;:37;35487:11;;;35465:19;:33;-1:-1:-1;35519:11:0;;;;35541:17;;;;35569;;;35597:12;;;35620:15;35133:510::o;44394:566::-;44497:15;44514:23;44539:12;44553:23;44578:12;44592:18;44614:19;44625:7;44614:10;:19::i;:::-;-1:-1:-1;;;;;44662:15:0;;;;;;:7;:15;;;;;;44496:137;;-1:-1:-1;44496:137:0;;-1:-1:-1;44496:137:0;;-1:-1:-1;44496:137:0;-1:-1:-1;44496:137:0;-1:-1:-1;44496:137:0;-1:-1:-1;44662:28:0;;44682:7;44662:19;:28::i;:::-;-1:-1:-1;;;;;44644:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44719:7;:15;;;;:28;;44739:7;44719:19;:28::i;:::-;-1:-1:-1;;;;;44701:15:0;;;;;;;:7;:15;;;;;;:46;;;;44779:18;;;;;;;:39;;44802:15;44779:22;:39::i;:::-;-1:-1:-1;;;;;44758:18:0;;;;;;:7;:18;;;;;:60;44832:26;44847:10;44832:14;:26::i;:::-;44869:23;44881:4;44887;44869:11;:23::i;:::-;44925:9;-1:-1:-1;;;;;44908:44:0;44917:6;-1:-1:-1;;;;;44908:44:0;-1:-1:-1;;;;;;;;;;;44936:15:0;44908:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;44908:44:0;;;;;;;;44485:475;;;;;;44394:566;;;:::o;43800:586::-;43901:15;43918:23;43943:12;43957:23;43982:12;43996:18;44018:19;44029:7;44018:10;:19::i;:::-;-1:-1:-1;;;;;44066:15:0;;;;;;:7;:15;;;;;;43900:137;;-1:-1:-1;43900:137:0;;-1:-1:-1;43900:137:0;;-1:-1:-1;43900:137:0;-1:-1:-1;43900:137:0;-1:-1:-1;43900:137:0;-1:-1:-1;44066:28:0;;43900:137;44066:19;:28::i;:::-;-1:-1:-1;;;;;44048:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;44126:18;;;;;:7;:18;;;;;:39;;44149:15;44126:22;:39::i;:::-;-1:-1:-1;;;;;44105:18:0;;;;;;:7;:18;;;;;;;;:60;;;;44197:7;:18;;;;:39;;44220:15;44197:22;:39::i;41030:831::-;41129:15;41146:23;41171:12;41185:23;41210:12;41224:18;41246:19;41257:7;41246:10;:19::i;:::-;41128:137;;;;;;;;;;;;41313:59;41322:6;41330:15;41347;41364:7;41313:8;:59::i;:::-;41276:96;-1:-1:-1;41276:96:0;-1:-1:-1;41420:62:0;41432:6;41276:96;;41474:7;41420:11;:62::i;:::-;41383:99;-1:-1:-1;41383:99:0;-1:-1:-1;41530:64:0;41544:6;41383:99;;41586:7;41530:13;:64::i;:::-;-1:-1:-1;;;;;41623:15:0;;;;;;:7;:15;;;;;;41493:101;;-1:-1:-1;41493:101:0;;-1:-1:-1;41623:28:0;;41643:7;41623:19;:28::i;31679:642::-;31782:15;31799:23;31824:12;31838:23;31863:12;31877:18;31899:19;31910:7;31899:10;:19::i;:::-;-1:-1:-1;;;;;31947:15:0;;;;;;:7;:15;;;;;;31781:137;;-1:-1:-1;31781:137:0;;-1:-1:-1;31781:137:0;;-1:-1:-1;31781:137:0;-1:-1:-1;31781:137:0;-1:-1:-1;31781:137:0;-1:-1:-1;31947:28:0;;31967:7;31947:19;:28::i;:::-;-1:-1:-1;;;;;31929:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32004:7;:15;;;;:28;;32024:7;32004:19;:28::i;34971:154::-;35035:7;35062:55;35101:5;35062:20;35074:7;;35062;:11;;:20;;;;:::i;34793:166::-;34863:7;34890:61;34935:5;34890:26;34902:13;;34890:7;:11;;:26;;;;:::i;34430:355::-;34493:19;34516:10;:8;:10::i;:::-;34493:33;-1:-1:-1;34537:18:0;34558:27;:10;34493:33;34558:14;:27::i;:::-;34637:4;34621:22;;;;:7;:22;;;;;;34537:48;;-1:-1:-1;34621:38:0;;34537:48;34621:26;:38::i;:::-;34612:4;34596:22;;;;:7;:22;;;;;;;;:63;;;;34673:11;:26;;;;;;34670:107;;;34755:4;34739:22;;;;:7;:22;;;;;;:38;;34766:10;34739:26;:38::i;:::-;34730:4;34714:22;;;;:7;:22;;;;;:63;34482:303;;34430:355;:::o;32329:147::-;32407:7;;:17;;32419:4;32407:11;:17::i;:::-;32397:7;:27;32448:10;;:20;;32463:4;32448:14;:20::i;:::-;32435:10;:33;-1:-1:-1;;32329:147:0:o;41871:604::-;41994:7;42003;42026:8;;42036:1;42026:11;42023:62;;-1:-1:-1;42049:15:0;;-1:-1:-1;42066:15:0;42042:40;;42023:62;42132:8;;42095:13;;42111:30;;:16;:7;42123:3;42111:11;:16::i;:::-;:20;;:30::i;:::-;42095:46;;42152:13;42168:21;42178:10;:8;:10::i;:::-;42168:5;;:9;:21::i;:::-;42152:37;-1:-1:-1;42218:26:0;:15;42152:37;42218:19;:26::i;:::-;42200:44;-1:-1:-1;42273:26:0;:15;42293:5;42273:19;:26::i;:::-;42341:11;;-1:-1:-1;;;;;42341:11:0;42333:20;;;;:7;:20;;;;;;42255:44;;-1:-1:-1;42333:31:0;;42358:5;42333:24;:31::i;:::-;42318:11;;;-1:-1:-1;;;;;42318:11:0;;;42310:20;;;;:7;:20;;;;;;;;;:54;;;;42397:11;;42380:36;;1361:25:1;;;42397:11:0;;;;42380:36;;;;-1:-1:-1;;;;;;;;;;;42380:36:0;1334:18:1;42380:36:0;;;;;;;;42434:15;42451;42427:40;;;;;;41871:604;;;;;;;;:::o;42483:640::-;42609:7;42618;42641:11;;42654:1;42641:14;42638:65;;-1:-1:-1;42667:15:0;;-1:-1:-1;42684:15:0;42660:40;;42638:65;42753:11;;42713:16;;42732:33;;:16;:7;42744:3;42732:11;:16::i;:33::-;42713:52;;42776:16;42795:24;42808:10;:8;:10::i;42795:24::-;42776:43;-1:-1:-1;42848:29:0;:15;42776:43;42848:19;:29::i;:::-;42830:47;-1:-1:-1;42906:29:0;:15;42926:8;42906:19;:29::i;:::-;42979:13;;-1:-1:-1;;;;;42979:13:0;42971:22;;;;:7;:22;;;;;;42888:47;;-1:-1:-1;42971:36:0;;42998:8;42971:26;:36::i;:::-;42954:13;;;-1:-1:-1;;;;;42954:13:0;;;42946:22;;;;:7;:22;;;;;;;;;:61;;;;43040:13;;43023:41;;1361:25:1;;;43040:13:0;;;;43023:41;;;;-1:-1:-1;;;;;;;;;;;43023:41:0;1334:18:1;43023:41:0;1215:177:1;43131:661:0;43259:7;43268;43291:13;;43306:1;43291:16;43288:67;;-1:-1:-1;43319:15:0;;-1:-1:-1;43336:15:0;43312:40;;43288:67;43407:13;;43365:18;;43386:35;;:16;:7;43398:3;43386:11;:16::i;:35::-;43365:56;;43432:18;43453:26;43468:10;:8;:10::i;43453:26::-;43432:47;-1:-1:-1;43508:31:0;:15;43432:47;43508:19;:31::i;:::-;43490:49;-1:-1:-1;43568:31:0;:15;43588:10;43568:19;:31::i;:::-;43651:4;43635:22;;;;:7;:22;;;;;;43550:49;;-1:-1:-1;43635:38:0;;43662:10;43635:26;:38::i;:::-;43626:4;43610:22;;;;:7;:22;;;;;;;:63;;;;43689:43;;-1:-1:-1;;;;;43689:43:0;;;-1:-1:-1;;;;;;;;;;;43689:43:0;;;43721:10;1361:25:1;;1349:2;1334:18;;1215:177;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;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2301:180::-;2360:6;2413:2;2401:9;2392:7;2388:23;2384:32;2381:52;;;2429:1;2426;2419:12;2381:52;-1:-1:-1;2452:23:1;;2301:180;-1:-1:-1;2301:180:1:o;2486:247::-;2545:6;2598:2;2586:9;2577:7;2573:23;2569:32;2566:52;;;2614:1;2611;2604:12;2566:52;2653:9;2640:23;2672:31;2697:5;2672:31;:::i;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3021:60;2927:160;;;:::o;3092:248::-;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3270:9;3257:23;3247:33;;3299:35;3330:2;3319:9;3315:18;3299:35;:::i;:::-;3289:45;;3092:248;;;;;:::o;3345:454::-;3440:6;3448;3456;3464;3472;3525:3;3513:9;3504:7;3500:23;3496:33;3493:53;;;3542:1;3539;3532:12;3493:53;-1:-1:-1;;3565:23:1;;;3635:2;3620:18;;3607:32;;-1:-1:-1;3686:2:1;3671:18;;3658:32;;3737:2;3722:18;;3709:32;;-1:-1:-1;3788:3:1;3773:19;3760:33;;-1:-1:-1;3345:454:1;-1:-1:-1;3345:454:1:o;4288:180::-;4344:6;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;4436:26;4452:9;4436:26;:::i;4473:388::-;4541:6;4549;4602:2;4590:9;4581:7;4577:23;4573:32;4570:52;;;4618:1;4615;4608:12;4570:52;4657:9;4644:23;4676:31;4701:5;4676:31;:::i;:::-;4726:5;-1:-1:-1;4783:2:1;4768:18;;4755:32;4796:33;4755:32;4796:33;:::i;:::-;4848:7;4838:17;;;4473:388;;;;;:::o;4866:380::-;4945:1;4941:12;;;;4988;;;5009:61;;5063:4;5055:6;5051:17;5041:27;;5009:61;5116:2;5108:6;5105:14;5085:18;5082:38;5079:161;;5162:10;5157:3;5153:20;5150:1;5143:31;5197:4;5194:1;5187:15;5225:4;5222:1;5215:15;5079:161;;4866:380;;;:::o;6018:127::-;6079:10;6074:3;6070:20;6067:1;6060:31;6110:4;6107:1;6100:15;6134:4;6131:1;6124:15;6150:127;6211:10;6206:3;6202:20;6199:1;6192:31;6242:4;6239:1;6232:15;6266:4;6263:1;6256:15;6282:128;6349:9;;;6370:11;;;6367:37;;;6384:18;;:::i;6415:127::-;6476:10;6471:3;6467:20;6464:1;6457:31;6507:4;6504:1;6497:15;6531:4;6528:1;6521:15;6547:135;6586:3;6607:17;;;6604:43;;6627:18;;:::i;:::-;-1:-1:-1;6674:1:1;6663:13;;6547:135::o;10535:125::-;10600:9;;;10621:10;;;10618:36;;;10634:18;;:::i;11754:217::-;11794:1;11820;11810:132;;11864:10;11859:3;11855:20;11852:1;11845:31;11899:4;11896:1;11889:15;11927:4;11924:1;11917:15;11810:132;-1:-1:-1;11956:9:1;;11754:217::o;11976:168::-;12049:9;;;12080;;12097:15;;;12091:22;;12077:37;12067:71;;12118:18;;:::i;12683:251::-;12753:6;12806:2;12794:9;12785:7;12781:23;12777:32;12774:52;;;12822:1;12819;12812:12;12774:52;12854:9;12848:16;12873:31;12898:5;12873:31;:::i;12939:980::-;13201:4;13249:3;13238:9;13234:19;13280:6;13269:9;13262:25;13306:2;13344:6;13339:2;13328:9;13324:18;13317:34;13387:3;13382:2;13371:9;13367:18;13360:31;13411:6;13446;13440:13;13477:6;13469;13462:22;13515:3;13504:9;13500:19;13493:26;;13554:2;13546:6;13542:15;13528:29;;13575:1;13585:195;13599:6;13596:1;13593:13;13585:195;;;13664:13;;-1:-1:-1;;;;;13660:39:1;13648:52;;13755:15;;;;13720:12;;;;13696:1;13614:9;13585:195;;;-1:-1:-1;;;;;;;13836:32:1;;;;13831:2;13816:18;;13809:60;-1:-1:-1;;;13900:3:1;13885:19;13878:35;13797:3;12939:980;-1:-1:-1;;;12939:980:1:o;14536:306::-;14624:6;14632;14640;14693:2;14681:9;14672:7;14668:23;14664:32;14661:52;;;14709:1;14706;14699:12;14661:52;14738:9;14732:16;14722:26;;14788:2;14777:9;14773:18;14767:25;14757:35;;14832:2;14821:9;14817:18;14811:25;14801:35;;14536:306;;;;;:::o

Swarm Source

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