ETH Price: $3,945.13 (+1.95%)

Token

ERC-20: My Shiba Academia (MSA)
 

Overview

Max Total Supply

5,000,000,000 MSA

Holders

842

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
491,074.886710554 MSA

Value
$0.00
0x475bbb9758439d8d5aba5c1e87fa69208eb9d1d6
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:
MyShibaAcademia

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-16
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.4;

/*
Tax:
7% Distribution to Liquidity
3% Distribution to holders in MSA
3% Distribution to Marketing Wallet
2% Distribution to Buyback
*/


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



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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// 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 MyShibaAcademia is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 5000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "My Shiba Academia";
    string private _symbol = "MSA";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 9;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public LiquidityPercent = 7;
    uint256 public BuyBackPercent = 2;
    

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    uint256 private buyBackUpperLimit = 1 * 10**17;
    uint256 private _buyBackDivisor = 100;
    bool public buyBackEnabled = true;
    
    event BuyBackEnabledUpdated(bool enabled);

    uint256 public _marketingFee = 3;
    address payable public marketingWallet = payable(0x2f52b09bD82c0DDB28D7A1c3AEA12B7FAfefA761);
    uint256 private _previousmarketingFee = _marketingFee;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    uint256 public minimumTokensBeforeSwap = 1000000 * 10**9;
    uint256 public _maxTxAmount = 5000000000 * 10**9;
    
    mapping(address => bool) private _isExcludedFromMaxTx;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingWallet] = true;
        
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[marketingWallet] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

    function 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);
    }
    

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 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 calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee==0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousmarketingFee = _marketingFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _marketingFee = _previousmarketingFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { 
        _isExcludedFromMaxTx[_address] = value;
    }

    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 >= minimumTokensBeforeSwap;
        if (!inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            if(overMinTokenBalance) {
                // swap  and liquify
                swapAndLiquify(contractTokenBalance);
            }
            
            uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(buyBackUpperLimit)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(_buyBackDivisor));
            }
            
        }

        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 totalTax = _liquidityFee.add(_marketingFee);
        uint256 LiquidityShare = contractTokenBalance.mul(_liquidityFee.sub(BuyBackPercent)).div(totalTax);
        uint256 MarketingShare = contractTokenBalance.mul(_marketingFee).div(totalTax);
        uint256 buybackShare = contractTokenBalance.mul(BuyBackPercent).div(totalTax);
        
        uint256 balanceBeforeMarketingSwap = address(this).balance;
        //Swapping Tokens for Marketing Funds
        swapTokensForEth(MarketingShare);
        uint256 MarketingEthShare = address(this).balance.sub(balanceBeforeMarketingSwap);
        //Send to Marketing address
        transferToAddressEth(marketingWallet, MarketingEthShare);
        //swap tokens for buyback
        swapTokensForEth(buybackShare);
        
        // split the Liquidity balance into halves
        uint256 half = LiquidityShare.div(2);
        uint256 otherHalf = LiquidityShare.sub(half);

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

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

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

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }

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

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

    //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) = 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 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 prepareForPresale() external onlyOwner() {
       _taxFee = 0;
       _previousTaxFee = 0;
       _liquidityFee = 0;
       _previousLiquidityFee = 0;
       _marketingFee = 0;
       _previousmarketingFee = 0;
       _maxTxAmount = 5000000000 * 10**9;
       setSwapAndLiquifyEnabled(false);
    }
    
    function afterPresale() external onlyOwner() {
       _taxFee = 3;
       _previousTaxFee = _taxFee;
       _liquidityFee = 9;
       _previousLiquidityFee = _liquidityFee;
       _marketingFee = 3;
       _previousmarketingFee = _marketingFee;
       setSwapAndLiquifyEnabled(true);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setMarketingWallet(address payable newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setLiquidityAndBuyBackPercent(uint256 liquidityPercent, uint256 buybackPercent) public onlyOwner {
        require(buybackPercent <= 5, "Buyback max 5%" );
        LiquidityPercent = liquidityPercent;
        BuyBackPercent = buybackPercent;
        _liquidityFee = liquidityPercent.add(buybackPercent);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function SetBuyBackUpperLimit(uint256 _newLimit) public onlyOwner() {
        buyBackUpperLimit = _newLimit;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function buyBackDivisor() public view returns (uint256) {
        return _buyBackDivisor;
    }
    
    function SetBuyBackDivisor(uint256 Divisor) public onlyOwner() {
        _buyBackDivisor =  Divisor;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        _marketingFee = marketingFee;
    }
    
    function setMinimumTokensBeforeSwap(uint256 newAmt) external onlyOwner() {
        minimumTokensBeforeSwap = newAmt*10**9;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > 0, "Cannot set transaction amount as zero");
        _maxTxAmount = maxTxAmount * 10**9;
    }
    
    function transferToAddressEth(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
}

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":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":"BuyBackPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"Divisor","type":"uint256"}],"name":"SetBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"SetBuyBackUpperLimit","outputs":[],"stateMutability":"nonpayable","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":[],"name":"afterPresale","outputs":[],"stateMutability":"nonpayable","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":"buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPresale","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityPercent","type":"uint256"},{"internalType":"uint256","name":"buybackPercent","type":"uint256"}],"name":"setLiquidityAndBuyBackPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","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":"newAmt","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052674563918244f4000060098190556200002090600019620005e6565b6200002e9060001962000585565b600a55604080518082019091526011808252704d792053686962612041636164656d696160781b60209092019182526200006b91600c91620004af565b50604080518082019091526003808252624d534160e81b60209092019182526200009891600d91620004af565b50600e805460ff1990811660099081179092556003600f81905560108190556011839055601292909255600760135560026014556ddead00000000000000000000000060805267016345785d8a000060155560646016556017805490911660011790556018819055601980546001600160a01b031916732f52b09bd82c0ddb28d7a1c3aea12b7fafefa761179055601a55601c805460ff60a81b1916905566038d7ea4c68000601d55674563918244f40000601e553480156200015a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001fe57600080fd5b505afa15801562000213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000239919062000555565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028257600080fd5b505afa15801562000297573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bd919062000555565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200030657600080fd5b505af11580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000555565b601c80546001600160a01b03199081166001600160a01b0393841617909155601b8054909116918316919091179055600160066000620003896000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155601954909116835290822080549093168117909255601f90620003f96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601f909352818320805485166001908117909155601954909116835291208054909216179055620004583390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620004a091815260200190565b60405180910390a35062000607565b828054620004bd90620005a9565b90600052602060002090601f016020900481019282620004e157600085556200052c565b82601f10620004fc57805160ff19168380011785556200052c565b828001600101855582156200052c579182015b828111156200052c5782518255916020019190600101906200050f565b506200053a9291506200053e565b5090565b5b808211156200053a57600081556001016200053f565b60006020828403121562000567578081fd5b81516001600160a01b03811681146200057e578182fd5b9392505050565b600082821015620005a457634e487b7160e01b81526011600452602481fd5b500390565b600181811c90821680620005be57607f821691505b60208210811415620005e057634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200060257634e487b7160e01b81526012600452602481fd5b500690565b60805160601c61324a6200062d600039600081816104ab0152612832015261324a6000f3fe6080604052600436106103545760003560e01c80636053a0e3116101c6578063a9059cbb116100f7578063dd46706411610095578063e79b03221161006f578063e79b0322146109b6578063ea2f0b37146109d6578063ec28438a146109f6578063f2fde38b14610a1657600080fd5b8063dd4670641461093b578063dd62ed3e1461095b578063de87e0a5146109a157600080fd5b8063bdc653ef116100d1578063bdc653ef146108d0578063c2b3e1c2146108e5578063c49b9a8014610905578063d2d7ad831461092557600080fd5b8063a9059cbb1461087b578063aee50b1e1461089b578063b6c52324146108bb57600080fd5b806388f82020116101645780638ee108231161013e5780638ee108231461081c57806395d89b4114610831578063a457c2d714610846578063a69df4b51461086657600080fd5b806388f82020146107b0578063899e8689146107e95780638da5cb5b146107fe57600080fd5b8063715018a6116101a0578063715018a61461074f57806375f0a874146107645780637b140d16146107845780637d1db4a51461079a57600080fd5b80636053a0e3146106ff5780636bc87c3a1461071957806370a082311461072f57600080fd5b80633685d419116102a057806349bd5a5e1161023e5780635342acb4116102185780635342acb4146106665780635911ed831461069f5780635b89029c146106bf5780635d098b38146106df57600080fd5b806349bd5a5e146106055780634a74bb021461062557806352390c021461064657600080fd5b80633bd5d1731161027a5780633bd5d17314610585578063437823ec146105a55780634549b039146105c5578063457c194c146105e557600080fd5b80633685d4191461052f578063395093511461054f5780633b124fe71461056f57600080fd5b806318160ddd1161030d57806327c8f835116102e757806327c8f8351461049957806329370cc6146104cd5780632d838119146104ed578063313ce5671461050d57600080fd5b806318160ddd1461044e57806322976e0d1461046357806323b872dd1461047957600080fd5b8063061c82d01461036057806306fdde0314610382578063095ea7b3146103ad57806310df93dd146103dd57806313114a9d146104015780631694505e1461041657600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004612ed0565b610a36565b005b34801561038e57600080fd5b50610397610a6e565b6040516103a49190612fd0565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612e8b565b610b00565b60405190151581526020016103a4565b3480156103e957600080fd5b506103f360145481565b6040519081526020016103a4565b34801561040d57600080fd5b50600b546103f3565b34801561042257600080fd5b50601b54610436906001600160a01b031681565b6040516001600160a01b0390911681526020016103a4565b34801561045a57600080fd5b506009546103f3565b34801561046f57600080fd5b506103f360185481565b34801561048557600080fd5b506103cd610494366004612e17565b610b17565b3480156104a557600080fd5b506104367f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d957600080fd5b506103806104e8366004612eb6565b610b80565b3480156104f957600080fd5b506103f3610508366004612ed0565b610bf2565b34801561051957600080fd5b50600e5460405160ff90911681526020016103a4565b34801561053b57600080fd5b5061038061054a366004612da7565b610c76565b34801561055b57600080fd5b506103cd61056a366004612e8b565b610e65565b34801561057b57600080fd5b506103f3600f5481565b34801561059157600080fd5b506103806105a0366004612ed0565b610e9b565b3480156105b157600080fd5b506103806105c0366004612da7565b610f85565b3480156105d157600080fd5b506103f36105e0366004612ee8565b610fd3565b3480156105f157600080fd5b50610380610600366004612ed0565b611060565b34801561061157600080fd5b50601c54610436906001600160a01b031681565b34801561063157600080fd5b50601c546103cd90600160a81b900460ff1681565b34801561065257600080fd5b50610380610661366004612da7565b61108f565b34801561067257600080fd5b506103cd610681366004612da7565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106ab57600080fd5b506103806106ba366004612f0a565b6111e2565b3480156106cb57600080fd5b506103806106da366004612e57565b611269565b3480156106eb57600080fd5b506103806106fa366004612da7565b6112be565b34801561070b57600080fd5b506017546103cd9060ff1681565b34801561072557600080fd5b506103f360115481565b34801561073b57600080fd5b506103f361074a366004612da7565b61130a565b34801561075b57600080fd5b50610380611369565b34801561077057600080fd5b50601954610436906001600160a01b031681565b34801561079057600080fd5b506103f360135481565b3480156107a657600080fd5b506103f3601e5481565b3480156107bc57600080fd5b506103cd6107cb366004612da7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107f557600080fd5b506103806113cb565b34801561080a57600080fd5b506000546001600160a01b0316610436565b34801561082857600080fd5b506016546103f3565b34801561083d57600080fd5b5061039761141f565b34801561085257600080fd5b506103cd610861366004612e8b565b61142e565b34801561087257600080fd5b5061038061147d565b34801561088757600080fd5b506103cd610896366004612e8b565b611583565b3480156108a757600080fd5b506103806108b6366004612ed0565b611590565b3480156108c757600080fd5b506002546103f3565b3480156108dc57600080fd5b506015546103f3565b3480156108f157600080fd5b50610380610900366004612ed0565b6115ce565b34801561091157600080fd5b50610380610920366004612eb6565b6115fd565b34801561093157600080fd5b506103f3601d5481565b34801561094757600080fd5b50610380610956366004612ed0565b611674565b34801561096757600080fd5b506103f3610976366004612ddf565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109ad57600080fd5b506103806116f9565b3480156109c257600080fd5b506103806109d1366004612ed0565b611758565b3480156109e257600080fd5b506103806109f1366004612da7565b611787565b348015610a0257600080fd5b50610380610a11366004612ed0565b6117d2565b348015610a2257600080fd5b50610380610a31366004612da7565b61186e565b6000546001600160a01b03163314610a695760405162461bcd60e51b8152600401610a6090613023565b60405180910390fd5b600f55565b6060600c8054610a7d90613123565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa990613123565b8015610af65780601f10610acb57610100808354040283529160200191610af6565b820191906000526020600020905b815481529060010190602001808311610ad957829003601f168201915b5050505050905090565b6000610b0d338484611946565b5060015b92915050565b6000610b24848484611a6a565b610b768433610b71856040518060600160405280602881526020016131a8602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611bf0565b611946565b5060019392505050565b6000546001600160a01b03163314610baa5760405162461bcd60e51b8152600401610a6090613023565b6017805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000600a54821115610c595760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a60565b6000610c63611c2a565b9050610c6f8382611c4d565b9392505050565b6000546001600160a01b03163314610ca05760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03811660009081526007602052604090205460ff16610d085760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a60565b60005b600854811015610e6157816001600160a01b031660088281548110610d4057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e4f5760088054610d6b9060019061310c565b81548110610d8957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610dc357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e598161315e565b915050610d0b565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b0d918590610b719086611c8f565b3360008181526007602052604090205460ff1615610f105760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a60565b6000610f1b83611cee565b505050506001600160a01b038416600090815260036020526040902054919250610f4791905082611d3d565b6001600160a01b038316600090815260036020526040902055600a54610f6d9082611d3d565b600a55600b54610f7d9084611c8f565b600b55505050565b6000546001600160a01b03163314610faf5760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006009548311156110275760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a60565b8161104657600061103784611cee565b50939550610b11945050505050565b600061105184611cee565b50929550610b11945050505050565b6000546001600160a01b0316331461108a5760405162461bcd60e51b8152600401610a6090613023565b601855565b6000546001600160a01b031633146110b95760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03811660009081526007602052604090205460ff16156111225760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a60565b6001600160a01b0381166000908152600360205260409020541561117c576001600160a01b03811660009081526003602052604090205461116290610bf2565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610a6090613023565b600581111561124e5760405162461bcd60e51b815260206004820152600e60248201526d4275796261636b206d617820352560901b6044820152606401610a60565b601382905560148190556112628282611c8f565b6011555050565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112e85760405162461bcd60e51b8152600401610a6090613023565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561134757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b1190610bf2565b6000546001600160a01b031633146113935760405162461bcd60e51b8152600401610a6090613023565b600080546040516001600160a01b03909116906000805160206131d0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113f55760405162461bcd60e51b8152600401610a6090613023565b6003600f8190556010819055600960118190556012556018819055601a5561141d60016115fd565b565b6060600d8054610a7d90613123565b6000610b0d3384610b71856040518060600160405280602581526020016131f0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611bf0565b6001546001600160a01b031633146114e35760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a60565b60025442116115345760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a60565b600154600080546040516001600160a01b0393841693909116916000805160206131d083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b0d338484611a6a565b6000546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610a6090613023565b6115c881633b9aca006130ed565b601d5550565b6000546001600160a01b031633146115f85760405162461bcd60e51b8152600401610a6090613023565b601555565b6000546001600160a01b031633146116275760405162461bcd60e51b8152600401610a6090613023565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610be790831515815260200190565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610a6090613023565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556116cd81426130b5565b600255600080546040516001600160a01b03909116906000805160206131d0833981519152908390a350565b6000546001600160a01b031633146117235760405162461bcd60e51b8152600401610a6090613023565b6000600f8190556010819055601181905560128190556018819055601a819055674563918244f40000601e5561141d906115fd565b6000546001600160a01b031633146117825760405162461bcd60e51b8152600401610a6090613023565b601655565b6000546001600160a01b031633146117b15760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610a6090613023565b6000811161185a5760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206173604482015264207a65726f60d81b6064820152608401610a60565b61186881633b9aca006130ed565b601e5550565b6000546001600160a01b031633146118985760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a60565b600080546040516001600160a01b03808516939216916000805160206131d083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a60565b6001600160a01b038216611a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a60565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ace5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a60565b60008111611b305760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a60565b6000611b3b3061130a565b601d54601c5491925082101590600160a01b900460ff16158015611b6d5750601c546001600160a01b03868116911614155b8015611b825750601c54600160a81b900460ff165b15611bde578015611b9657611b9682611d7f565b601754479060ff168015611bab575060155481115b15611bdc57601554811115611bbf57506015545b611bdc611bd760165483611c4d90919063ffffffff16565b611ee2565b505b611be9858585611f14565b5050505050565b60008184841115611c145760405162461bcd60e51b8152600401610a609190612fd0565b506000611c21848661310c565b95945050505050565b6000806000611c3761217c565b9092509050611c468282611c4d565b9250505090565b6000610c6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612336565b600080611c9c83856130b5565b905083811015610c6f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a60565b6000806000806000806000806000611d058a612364565b9250925092506000806000611d238d8686611d1e611c2a565b6123a6565b919f909e50909c50959a5093985091965092945050505050565b6000610c6f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bf0565b601c805460ff60a01b1916600160a01b179055601854601154600091611da59190611c8f565b90506000611dd482611dce611dc7601454601154611d3d90919063ffffffff16565b86906123f6565b90611c4d565b90506000611df183611dce601854876123f690919063ffffffff16565b90506000611e0e84611dce601454886123f690919063ffffffff16565b905047611e1a83612475565b6000611e264783611d3d565b601954909150611e3f906001600160a01b0316826125fa565b611e4883612475565b6000611e55866002611c4d565b90506000611e638783611d3d565b905047611e6f83612475565b6000611e7b4783611d3d565b9050611e878382612630565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b19169055505050505050505050565b601c805460ff60a01b1916600160a01b1790558015611f0457611f048161270d565b50601c805460ff60a01b19169055565b6001600160a01b03831660009081526006602052604090205460ff1680611f5357506001600160a01b03821660009081526006602052604090205460ff165b15611f6557611f606128eb565b611fc8565b601e54811115611fc85760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a60565b6001600160a01b03831660009081526007602052604090205460ff16801561200957506001600160a01b03821660009081526007602052604090205460ff16155b1561201e57612019838383612930565b61211c565b6001600160a01b03831660009081526007602052604090205460ff1615801561205f57506001600160a01b03821660009081526007602052604090205460ff165b1561206f57612019838383612a56565b6001600160a01b03831660009081526007602052604090205460ff161580156120b157506001600160a01b03821660009081526007602052604090205460ff16155b156120c157612019838383612aff565b6001600160a01b03831660009081526007602052604090205460ff16801561210157506001600160a01b03821660009081526007602052604090205460ff165b1561211157612019838383612b52565b61211c838383612aff565b6001600160a01b03831660009081526006602052604090205460ff168061215b57506001600160a01b03821660009081526006602052604090205460ff165b1561217757612177601054600f55601254601155601a54601855565b505050565b600a546009546000918291825b600854811015612306578260036000600884815481106121b957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612232575081600460006008848154811061220b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561224857600a54600954945094505050509091565b61229c600360006008848154811061227057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d3d565b92506122f260046000600884815481106122c657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d3d565b9150806122fe8161315e565b915050612189565b50600954600a5461231691611c4d565b82101561232d57600a546009549350935050509091565b90939092509050565b600081836123575760405162461bcd60e51b8152600401610a609190612fd0565b506000611c2184866130cd565b60008060008061237385612bc5565b9050600061238086612be1565b90506000612398826123928986611d3d565b90611d3d565b979296509094509092505050565b60008080806123b588866123f6565b905060006123c388876123f6565b905060006123d188886123f6565b905060006123e3826123928686611d3d565b939b939a50919850919650505050505050565b60008261240557506000610b11565b600061241183856130ed565b90508261241e85836130cd565b14610c6f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a60565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124b857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561250c57600080fd5b505afa158015612520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125449190612dc3565b8160018151811061256557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b5461258b9130911684611946565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125c4908590600090869030904290600401613079565b600060405180830381600087803b1580156125de57600080fd5b505af11580156125f2573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612177573d6000803e3d6000fd5b601b546126489030906001600160a01b031684611946565b601b546001600160a01b031663f305d7198230856000806126716000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611be99190612f2b565b6040805160028082526060820183526000926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561277257600080fd5b505afa158015612786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127aa9190612dc3565b816000815181106127cb57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061280d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061285d4261012c611c8f565b6040518663ffffffff1660e01b815260040161287c9493929190612f9b565b6000604051808303818588803b15801561289557600080fd5b505af11580156128a9573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516128df929190613058565b60405180910390a15050565b600f541580156128fb5750601154155b80156129075750601854155b1561290e57565b600f80546010556011805460125560188054601a556000928390559082905555565b60008060008060008061294287611cee565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129749088611d3d565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129a39087611d3d565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129d29086611c8f565b6001600160a01b0389166000908152600360205260409020556129f481612bfd565b6129fe8483612c85565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a4391815260200190565b60405180910390a3505050505050505050565b600080600080600080612a6887611cee565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a9a9087611d3d565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ad09084611c8f565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129d29086611c8f565b600080600080600080612b1187611cee565b955095509550955095509550612b298984878a612ca9565b6001600160a01b038b166000908152600360205260409020549096509093506129a39087611d3d565b600080600080600080612b6487611cee565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b969088611d3d565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a9a9087611d3d565b6000610b116064611dce600f54856123f690919063ffffffff16565b6000610b116064611dce601154856123f690919063ffffffff16565b6000612c07611c2a565b90506000612c1583836123f6565b30600090815260036020526040902054909150612c329082611c8f565b3060009081526003602090815260408083209390935560079052205460ff16156121775730600090815260046020526040902054612c709084611c8f565b30600090815260046020526040902055505050565b600a54612c929083611d3d565b600a55600b54612ca29082611c8f565b600b555050565b60008060185460001415612cc1575083905082612d89565b601854600090612cdc90612cd6866064611c4d565b906123f6565b90506000612cf2612ceb611c2a565b83906123f6565b9050612cfe8682611d3d565b9550612d0a8783611d3d565b30600090815260036020526040902054909750612d279082611c8f565b30600081815260036020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612d789086815260200190565b60405180910390a386869350935050505b94509492505050565b80358015158114612da257600080fd5b919050565b600060208284031215612db8578081fd5b8135610c6f8161318f565b600060208284031215612dd4578081fd5b8151610c6f8161318f565b60008060408385031215612df1578081fd5b8235612dfc8161318f565b91506020830135612e0c8161318f565b809150509250929050565b600080600060608486031215612e2b578081fd5b8335612e368161318f565b92506020840135612e468161318f565b929592945050506040919091013590565b60008060408385031215612e69578182fd5b8235612e748161318f565b9150612e8260208401612d92565b90509250929050565b60008060408385031215612e9d578182fd5b8235612ea88161318f565b946020939093013593505050565b600060208284031215612ec7578081fd5b610c6f82612d92565b600060208284031215612ee1578081fd5b5035919050565b60008060408385031215612efa578182fd5b82359150612e8260208401612d92565b60008060408385031215612f1c578182fd5b50508035926020909101359150565b600080600060608486031215612f3f578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612f905781516001600160a01b031687529582019590820190600101612f6b565b509495945050505050565b848152608060208201526000612fb46080830186612f58565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612ffc57858101830151858201604001528201612fe0565b8181111561300d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006130716040830184612f58565b949350505050565b85815284602082015260a06040820152600061309860a0830186612f58565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156130c8576130c8613179565b500190565b6000826130e857634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561310757613107613179565b500290565b60008282101561311e5761311e613179565b500390565b600181811c9082168061313757607f821691505b6020821081141561315857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561317257613172613179565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146131a457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220410848e2c6be4167d2dd56b0a13eaf029a7854abab5974c504ad0a974a7349a564736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80636053a0e3116101c6578063a9059cbb116100f7578063dd46706411610095578063e79b03221161006f578063e79b0322146109b6578063ea2f0b37146109d6578063ec28438a146109f6578063f2fde38b14610a1657600080fd5b8063dd4670641461093b578063dd62ed3e1461095b578063de87e0a5146109a157600080fd5b8063bdc653ef116100d1578063bdc653ef146108d0578063c2b3e1c2146108e5578063c49b9a8014610905578063d2d7ad831461092557600080fd5b8063a9059cbb1461087b578063aee50b1e1461089b578063b6c52324146108bb57600080fd5b806388f82020116101645780638ee108231161013e5780638ee108231461081c57806395d89b4114610831578063a457c2d714610846578063a69df4b51461086657600080fd5b806388f82020146107b0578063899e8689146107e95780638da5cb5b146107fe57600080fd5b8063715018a6116101a0578063715018a61461074f57806375f0a874146107645780637b140d16146107845780637d1db4a51461079a57600080fd5b80636053a0e3146106ff5780636bc87c3a1461071957806370a082311461072f57600080fd5b80633685d419116102a057806349bd5a5e1161023e5780635342acb4116102185780635342acb4146106665780635911ed831461069f5780635b89029c146106bf5780635d098b38146106df57600080fd5b806349bd5a5e146106055780634a74bb021461062557806352390c021461064657600080fd5b80633bd5d1731161027a5780633bd5d17314610585578063437823ec146105a55780634549b039146105c5578063457c194c146105e557600080fd5b80633685d4191461052f578063395093511461054f5780633b124fe71461056f57600080fd5b806318160ddd1161030d57806327c8f835116102e757806327c8f8351461049957806329370cc6146104cd5780632d838119146104ed578063313ce5671461050d57600080fd5b806318160ddd1461044e57806322976e0d1461046357806323b872dd1461047957600080fd5b8063061c82d01461036057806306fdde0314610382578063095ea7b3146103ad57806310df93dd146103dd57806313114a9d146104015780631694505e1461041657600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004612ed0565b610a36565b005b34801561038e57600080fd5b50610397610a6e565b6040516103a49190612fd0565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612e8b565b610b00565b60405190151581526020016103a4565b3480156103e957600080fd5b506103f360145481565b6040519081526020016103a4565b34801561040d57600080fd5b50600b546103f3565b34801561042257600080fd5b50601b54610436906001600160a01b031681565b6040516001600160a01b0390911681526020016103a4565b34801561045a57600080fd5b506009546103f3565b34801561046f57600080fd5b506103f360185481565b34801561048557600080fd5b506103cd610494366004612e17565b610b17565b3480156104a557600080fd5b506104367f000000000000000000000000000000000000000000000000000000000000dead81565b3480156104d957600080fd5b506103806104e8366004612eb6565b610b80565b3480156104f957600080fd5b506103f3610508366004612ed0565b610bf2565b34801561051957600080fd5b50600e5460405160ff90911681526020016103a4565b34801561053b57600080fd5b5061038061054a366004612da7565b610c76565b34801561055b57600080fd5b506103cd61056a366004612e8b565b610e65565b34801561057b57600080fd5b506103f3600f5481565b34801561059157600080fd5b506103806105a0366004612ed0565b610e9b565b3480156105b157600080fd5b506103806105c0366004612da7565b610f85565b3480156105d157600080fd5b506103f36105e0366004612ee8565b610fd3565b3480156105f157600080fd5b50610380610600366004612ed0565b611060565b34801561061157600080fd5b50601c54610436906001600160a01b031681565b34801561063157600080fd5b50601c546103cd90600160a81b900460ff1681565b34801561065257600080fd5b50610380610661366004612da7565b61108f565b34801561067257600080fd5b506103cd610681366004612da7565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106ab57600080fd5b506103806106ba366004612f0a565b6111e2565b3480156106cb57600080fd5b506103806106da366004612e57565b611269565b3480156106eb57600080fd5b506103806106fa366004612da7565b6112be565b34801561070b57600080fd5b506017546103cd9060ff1681565b34801561072557600080fd5b506103f360115481565b34801561073b57600080fd5b506103f361074a366004612da7565b61130a565b34801561075b57600080fd5b50610380611369565b34801561077057600080fd5b50601954610436906001600160a01b031681565b34801561079057600080fd5b506103f360135481565b3480156107a657600080fd5b506103f3601e5481565b3480156107bc57600080fd5b506103cd6107cb366004612da7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107f557600080fd5b506103806113cb565b34801561080a57600080fd5b506000546001600160a01b0316610436565b34801561082857600080fd5b506016546103f3565b34801561083d57600080fd5b5061039761141f565b34801561085257600080fd5b506103cd610861366004612e8b565b61142e565b34801561087257600080fd5b5061038061147d565b34801561088757600080fd5b506103cd610896366004612e8b565b611583565b3480156108a757600080fd5b506103806108b6366004612ed0565b611590565b3480156108c757600080fd5b506002546103f3565b3480156108dc57600080fd5b506015546103f3565b3480156108f157600080fd5b50610380610900366004612ed0565b6115ce565b34801561091157600080fd5b50610380610920366004612eb6565b6115fd565b34801561093157600080fd5b506103f3601d5481565b34801561094757600080fd5b50610380610956366004612ed0565b611674565b34801561096757600080fd5b506103f3610976366004612ddf565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109ad57600080fd5b506103806116f9565b3480156109c257600080fd5b506103806109d1366004612ed0565b611758565b3480156109e257600080fd5b506103806109f1366004612da7565b611787565b348015610a0257600080fd5b50610380610a11366004612ed0565b6117d2565b348015610a2257600080fd5b50610380610a31366004612da7565b61186e565b6000546001600160a01b03163314610a695760405162461bcd60e51b8152600401610a6090613023565b60405180910390fd5b600f55565b6060600c8054610a7d90613123565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa990613123565b8015610af65780601f10610acb57610100808354040283529160200191610af6565b820191906000526020600020905b815481529060010190602001808311610ad957829003601f168201915b5050505050905090565b6000610b0d338484611946565b5060015b92915050565b6000610b24848484611a6a565b610b768433610b71856040518060600160405280602881526020016131a8602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611bf0565b611946565b5060019392505050565b6000546001600160a01b03163314610baa5760405162461bcd60e51b8152600401610a6090613023565b6017805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000600a54821115610c595760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a60565b6000610c63611c2a565b9050610c6f8382611c4d565b9392505050565b6000546001600160a01b03163314610ca05760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03811660009081526007602052604090205460ff16610d085760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a60565b60005b600854811015610e6157816001600160a01b031660088281548110610d4057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e4f5760088054610d6b9060019061310c565b81548110610d8957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610dc357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e598161315e565b915050610d0b565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b0d918590610b719086611c8f565b3360008181526007602052604090205460ff1615610f105760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a60565b6000610f1b83611cee565b505050506001600160a01b038416600090815260036020526040902054919250610f4791905082611d3d565b6001600160a01b038316600090815260036020526040902055600a54610f6d9082611d3d565b600a55600b54610f7d9084611c8f565b600b55505050565b6000546001600160a01b03163314610faf5760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006009548311156110275760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a60565b8161104657600061103784611cee565b50939550610b11945050505050565b600061105184611cee565b50929550610b11945050505050565b6000546001600160a01b0316331461108a5760405162461bcd60e51b8152600401610a6090613023565b601855565b6000546001600160a01b031633146110b95760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03811660009081526007602052604090205460ff16156111225760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a60565b6001600160a01b0381166000908152600360205260409020541561117c576001600160a01b03811660009081526003602052604090205461116290610bf2565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610a6090613023565b600581111561124e5760405162461bcd60e51b815260206004820152600e60248201526d4275796261636b206d617820352560901b6044820152606401610a60565b601382905560148190556112628282611c8f565b6011555050565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112e85760405162461bcd60e51b8152600401610a6090613023565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561134757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b1190610bf2565b6000546001600160a01b031633146113935760405162461bcd60e51b8152600401610a6090613023565b600080546040516001600160a01b03909116906000805160206131d0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113f55760405162461bcd60e51b8152600401610a6090613023565b6003600f8190556010819055600960118190556012556018819055601a5561141d60016115fd565b565b6060600d8054610a7d90613123565b6000610b0d3384610b71856040518060600160405280602581526020016131f0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611bf0565b6001546001600160a01b031633146114e35760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a60565b60025442116115345760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a60565b600154600080546040516001600160a01b0393841693909116916000805160206131d083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b0d338484611a6a565b6000546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610a6090613023565b6115c881633b9aca006130ed565b601d5550565b6000546001600160a01b031633146115f85760405162461bcd60e51b8152600401610a6090613023565b601555565b6000546001600160a01b031633146116275760405162461bcd60e51b8152600401610a6090613023565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610be790831515815260200190565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610a6090613023565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556116cd81426130b5565b600255600080546040516001600160a01b03909116906000805160206131d0833981519152908390a350565b6000546001600160a01b031633146117235760405162461bcd60e51b8152600401610a6090613023565b6000600f8190556010819055601181905560128190556018819055601a819055674563918244f40000601e5561141d906115fd565b6000546001600160a01b031633146117825760405162461bcd60e51b8152600401610a6090613023565b601655565b6000546001600160a01b031633146117b15760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610a6090613023565b6000811161185a5760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206173604482015264207a65726f60d81b6064820152608401610a60565b61186881633b9aca006130ed565b601e5550565b6000546001600160a01b031633146118985760405162461bcd60e51b8152600401610a6090613023565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a60565b600080546040516001600160a01b03808516939216916000805160206131d083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a60565b6001600160a01b038216611a095760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a60565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ace5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a60565b60008111611b305760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a60565b6000611b3b3061130a565b601d54601c5491925082101590600160a01b900460ff16158015611b6d5750601c546001600160a01b03868116911614155b8015611b825750601c54600160a81b900460ff165b15611bde578015611b9657611b9682611d7f565b601754479060ff168015611bab575060155481115b15611bdc57601554811115611bbf57506015545b611bdc611bd760165483611c4d90919063ffffffff16565b611ee2565b505b611be9858585611f14565b5050505050565b60008184841115611c145760405162461bcd60e51b8152600401610a609190612fd0565b506000611c21848661310c565b95945050505050565b6000806000611c3761217c565b9092509050611c468282611c4d565b9250505090565b6000610c6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612336565b600080611c9c83856130b5565b905083811015610c6f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a60565b6000806000806000806000806000611d058a612364565b9250925092506000806000611d238d8686611d1e611c2a565b6123a6565b919f909e50909c50959a5093985091965092945050505050565b6000610c6f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bf0565b601c805460ff60a01b1916600160a01b179055601854601154600091611da59190611c8f565b90506000611dd482611dce611dc7601454601154611d3d90919063ffffffff16565b86906123f6565b90611c4d565b90506000611df183611dce601854876123f690919063ffffffff16565b90506000611e0e84611dce601454886123f690919063ffffffff16565b905047611e1a83612475565b6000611e264783611d3d565b601954909150611e3f906001600160a01b0316826125fa565b611e4883612475565b6000611e55866002611c4d565b90506000611e638783611d3d565b905047611e6f83612475565b6000611e7b4783611d3d565b9050611e878382612630565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b19169055505050505050505050565b601c805460ff60a01b1916600160a01b1790558015611f0457611f048161270d565b50601c805460ff60a01b19169055565b6001600160a01b03831660009081526006602052604090205460ff1680611f5357506001600160a01b03821660009081526006602052604090205460ff165b15611f6557611f606128eb565b611fc8565b601e54811115611fc85760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a60565b6001600160a01b03831660009081526007602052604090205460ff16801561200957506001600160a01b03821660009081526007602052604090205460ff16155b1561201e57612019838383612930565b61211c565b6001600160a01b03831660009081526007602052604090205460ff1615801561205f57506001600160a01b03821660009081526007602052604090205460ff165b1561206f57612019838383612a56565b6001600160a01b03831660009081526007602052604090205460ff161580156120b157506001600160a01b03821660009081526007602052604090205460ff16155b156120c157612019838383612aff565b6001600160a01b03831660009081526007602052604090205460ff16801561210157506001600160a01b03821660009081526007602052604090205460ff165b1561211157612019838383612b52565b61211c838383612aff565b6001600160a01b03831660009081526006602052604090205460ff168061215b57506001600160a01b03821660009081526006602052604090205460ff165b1561217757612177601054600f55601254601155601a54601855565b505050565b600a546009546000918291825b600854811015612306578260036000600884815481106121b957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612232575081600460006008848154811061220b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561224857600a54600954945094505050509091565b61229c600360006008848154811061227057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d3d565b92506122f260046000600884815481106122c657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d3d565b9150806122fe8161315e565b915050612189565b50600954600a5461231691611c4d565b82101561232d57600a546009549350935050509091565b90939092509050565b600081836123575760405162461bcd60e51b8152600401610a609190612fd0565b506000611c2184866130cd565b60008060008061237385612bc5565b9050600061238086612be1565b90506000612398826123928986611d3d565b90611d3d565b979296509094509092505050565b60008080806123b588866123f6565b905060006123c388876123f6565b905060006123d188886123f6565b905060006123e3826123928686611d3d565b939b939a50919850919650505050505050565b60008261240557506000610b11565b600061241183856130ed565b90508261241e85836130cd565b14610c6f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a60565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124b857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561250c57600080fd5b505afa158015612520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125449190612dc3565b8160018151811061256557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b5461258b9130911684611946565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125c4908590600090869030904290600401613079565b600060405180830381600087803b1580156125de57600080fd5b505af11580156125f2573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612177573d6000803e3d6000fd5b601b546126489030906001600160a01b031684611946565b601b546001600160a01b031663f305d7198230856000806126716000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156126d457600080fd5b505af11580156126e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611be99190612f2b565b6040805160028082526060820183526000926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561277257600080fd5b505afa158015612786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127aa9190612dc3565b816000815181106127cb57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061280d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61285d4261012c611c8f565b6040518663ffffffff1660e01b815260040161287c9493929190612f9b565b6000604051808303818588803b15801561289557600080fd5b505af11580156128a9573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516128df929190613058565b60405180910390a15050565b600f541580156128fb5750601154155b80156129075750601854155b1561290e57565b600f80546010556011805460125560188054601a556000928390559082905555565b60008060008060008061294287611cee565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129749088611d3d565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129a39087611d3d565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129d29086611c8f565b6001600160a01b0389166000908152600360205260409020556129f481612bfd565b6129fe8483612c85565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a4391815260200190565b60405180910390a3505050505050505050565b600080600080600080612a6887611cee565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a9a9087611d3d565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ad09084611c8f565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129d29086611c8f565b600080600080600080612b1187611cee565b955095509550955095509550612b298984878a612ca9565b6001600160a01b038b166000908152600360205260409020549096509093506129a39087611d3d565b600080600080600080612b6487611cee565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b969088611d3d565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a9a9087611d3d565b6000610b116064611dce600f54856123f690919063ffffffff16565b6000610b116064611dce601154856123f690919063ffffffff16565b6000612c07611c2a565b90506000612c1583836123f6565b30600090815260036020526040902054909150612c329082611c8f565b3060009081526003602090815260408083209390935560079052205460ff16156121775730600090815260046020526040902054612c709084611c8f565b30600090815260046020526040902055505050565b600a54612c929083611d3d565b600a55600b54612ca29082611c8f565b600b555050565b60008060185460001415612cc1575083905082612d89565b601854600090612cdc90612cd6866064611c4d565b906123f6565b90506000612cf2612ceb611c2a565b83906123f6565b9050612cfe8682611d3d565b9550612d0a8783611d3d565b30600090815260036020526040902054909750612d279082611c8f565b30600081815260036020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612d789086815260200190565b60405180910390a386869350935050505b94509492505050565b80358015158114612da257600080fd5b919050565b600060208284031215612db8578081fd5b8135610c6f8161318f565b600060208284031215612dd4578081fd5b8151610c6f8161318f565b60008060408385031215612df1578081fd5b8235612dfc8161318f565b91506020830135612e0c8161318f565b809150509250929050565b600080600060608486031215612e2b578081fd5b8335612e368161318f565b92506020840135612e468161318f565b929592945050506040919091013590565b60008060408385031215612e69578182fd5b8235612e748161318f565b9150612e8260208401612d92565b90509250929050565b60008060408385031215612e9d578182fd5b8235612ea88161318f565b946020939093013593505050565b600060208284031215612ec7578081fd5b610c6f82612d92565b600060208284031215612ee1578081fd5b5035919050565b60008060408385031215612efa578182fd5b82359150612e8260208401612d92565b60008060408385031215612f1c578182fd5b50508035926020909101359150565b600080600060608486031215612f3f578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612f905781516001600160a01b031687529582019590820190600101612f6b565b509495945050505050565b848152608060208201526000612fb46080830186612f58565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612ffc57858101830151858201604001528201612fe0565b8181111561300d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006130716040830184612f58565b949350505050565b85815284602082015260a06040820152600061309860a0830186612f58565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156130c8576130c8613179565b500190565b6000826130e857634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561310757613107613179565b500290565b60008282101561311e5761311e613179565b500390565b600181811c9082168061313757607f821691505b6020821081141561315857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561317257613172613179565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146131a457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220410848e2c6be4167d2dd56b0a13eaf029a7854abab5974c504ad0a974a7349a564736f6c63430008040033

Deployed Bytecode Sourcemap

25651:23644:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48384:98;;;;;;;;;;-1:-1:-1;48384:98:0;;;;;:::i;:::-;;:::i;:::-;;28960:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29872:161;;;;;;;;;;-1:-1:-1;29872:161:0;;;;;:::i;:::-;;:::i;:::-;;;5425:14:1;;5418:22;5400:41;;5388:2;5373:18;29872:161:0;5355:92:1;26661:33:0;;;;;;;;;;;;;;;;;;;13568:25:1;;;13556:2;13541:18;26661:33:0;13523:76:1;30993:87:0;;;;;;;;;;-1:-1:-1;31062:10:0;;30993:87;;27196:42;;;;;;;;;;-1:-1:-1;27196:42:0;;;;-1:-1:-1;;;;;27196:42:0;;;;;;-1:-1:-1;;;;;4380:32:1;;;4362:51;;4350:2;4335:18;27196:42:0;4317:102:1;29237:95:0;;;;;;;;;;-1:-1:-1;29317:7:0;;29237:95;;26996:32;;;;;;;;;;;;;;;;30041:313;;;;;;;;;;-1:-1:-1;30041:313:0;;;;;:::i;:::-;;:::i;26709:81::-;;;;;;;;;;;;;;;47745:150;;;;;;;;;;-1:-1:-1;47745:150:0;;;;;:::i;:::-;;:::i;31917:253::-;;;;;;;;;;-1:-1:-1;31917:253:0;;;;;:::i;:::-;;:::i;29146:83::-;;;;;;;;;;-1:-1:-1;29212:9:0;;29146:83;;29212:9;;;;14994:36:1;;14982:2;14967:18;29146:83:0;14949:87:1;32519:479:0;;;;;;;;;;-1:-1:-1;32519:479:0;;;;;:::i;:::-;;:::i;30362:218::-;;;;;;;;;;-1:-1:-1;30362:218:0;;;;;:::i;:::-;;:::i;26427:26::-;;;;;;;;;;;;;;;;31088:377;;;;;;;;;;-1:-1:-1;31088:377:0;;;;;:::i;:::-;;:::i;47031:111::-;;;;;;;;;;-1:-1:-1;47031:111:0;;;;;:::i;:::-;;:::i;31473:436::-;;;;;;;;;;-1:-1:-1;31473:436:0;;;;;:::i;:::-;;:::i;48494:122::-;;;;;;;;;;-1:-1:-1;48494:122:0;;;;;:::i;:::-;;:::i;27245:29::-;;;;;;;;;;-1:-1:-1;27245:29:0;;;;-1:-1:-1;;;;;27245:29:0;;;27315:41;;;;;;;;;;-1:-1:-1;27315:41:0;;;;-1:-1:-1;;;27315:41:0;;;;;;32178:333;;;;;;;;;;-1:-1:-1;32178:333:0;;;;;:::i;:::-;;:::i;37110:123::-;;;;;;;;;;-1:-1:-1;37110:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;37198:27:0;37174:4;37198:27;;;:18;:27;;;;;;;;;37110:123;47410:323;;;;;;;;;;-1:-1:-1;47410:323:0;;;;;:::i;:::-;;:::i;37245:134::-;;;;;;;;;;-1:-1:-1;37245:134:0;;;;;:::i;:::-;;:::i;47276:122::-;;;;;;;;;;-1:-1:-1;47276:122:0;;;;;:::i;:::-;;:::i;26900:33::-;;;;;;;;;;-1:-1:-1;26900:33:0;;;;;;;;26514:32;;;;;;;;;;;;;;;;29340:198;;;;;;;;;;-1:-1:-1;29340:198:0;;;;;:::i;:::-;;:::i;16357:148::-;;;;;;;;;;;;;:::i;27035:92::-;;;;;;;;;;-1:-1:-1;27035:92:0;;;;-1:-1:-1;;;;;27035:92:0;;;26619:35;;;;;;;;;;;;;;;;27428:48;;;;;;;;;;;;;;;;30865:120;;;;;;;;;;-1:-1:-1;30865:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30957:20:0;30933:4;30957:20;;;:11;:20;;;;;;;;;30865:120;46726:297;;;;;;;;;;;;;:::i;15714:79::-;;;;;;;;;;-1:-1:-1;15752:7:0;15779:6;-1:-1:-1;;;;;15779:6:0;15714:79;;48155:97;;;;;;;;;;-1:-1:-1;48229:15:0;;48155:97;;29051:87;;;;;;;;;;;;;:::i;30588:269::-;;;;;;;;;;-1:-1:-1;30588:269:0;;;;;:::i;:::-;;:::i;17379:305::-;;;;;;;;;;;;;:::i;29546:167::-;;;;;;;;;;-1:-1:-1;29546:167:0;;;;;:::i;:::-;;:::i;48628:130::-;;;;;;;;;;-1:-1:-1;48628:130:0;;;;;:::i;:::-;;:::i;16912:89::-;;;;;;;;;;-1:-1:-1;16984:9:0;;16912:89;;48035:108;;;;;;;;;;-1:-1:-1;48118:17:0;;48035:108;;47907:116;;;;;;;;;;-1:-1:-1;47907:116:0;;;;;:::i;:::-;;:::i;49115:171::-;;;;;;;;;;-1:-1:-1;49115:171:0;;;;;:::i;:::-;;:::i;27365:56::-;;;;;;;;;;;;;;;;17077:226;;;;;;;;;;-1:-1:-1;17077:226:0;;;;;:::i;:::-;;:::i;29721:143::-;;;;;;;;;;-1:-1:-1;29721:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29829:18:0;;;29802:7;29829:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29721:143;46398:316;;;;;;;;;;;;;:::i;48264:108::-;;;;;;;;;;-1:-1:-1;48264:108:0;;;;;:::i;:::-;;:::i;47154:110::-;;;;;;;;;;-1:-1:-1;47154:110:0;;;;;:::i;:::-;;:::i;48770:195::-;;;;;;;;;;-1:-1:-1;48770:195:0;;;;;:::i;:::-;;:::i;16660:244::-;;;;;;;;;;-1:-1:-1;16660:244:0;;;;;:::i;:::-;;:::i;48384:98::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;;;;;;;;;48458:7:::1;:16:::0;48384:98::o;28960:83::-;28997:13;29030:5;29023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28960:83;:::o;29872:161::-;29947:4;29964:39;8219:10;29987:7;29996:6;29964:8;:39::i;:::-;-1:-1:-1;30021:4:0;29872:161;;;;;:::o;30041:313::-;30139:4;30156:36;30166:6;30174:9;30185:6;30156:9;:36::i;:::-;30203:121;30212:6;8219:10;30234:89;30272:6;30234:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30234:19:0;;;;;;:11;:19;;;;;;;;8219:10;30234:33;;;;;;;;;;:37;:89::i;:::-;30203:8;:121::i;:::-;-1:-1:-1;30342:4:0;30041:313;;;;;:::o;47745:150::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;47815:14:::1;:25:::0;;-1:-1:-1;;47815:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;47856:31:::1;::::0;5400:41:1;;;47856:31:0::1;::::0;5388:2:1;5373:18;47856:31:0::1;;;;;;;;47745:150:::0;:::o;31917:253::-;31983:7;32022;;32011;:18;;32003:73;;;;-1:-1:-1;;;32003:73:0;;7761:2:1;32003:73:0;;;7743:21:1;7800:2;7780:18;;;7773:30;7839:34;7819:18;;;7812:62;-1:-1:-1;;;7890:18:1;;;7883:40;7940:19;;32003:73:0;7733:232:1;32003:73:0;32087:19;32110:10;:8;:10::i;:::-;32087:33;-1:-1:-1;32138:24:0;:7;32087:33;32138:11;:24::i;:::-;32131:31;31917:253;-1:-1:-1;;;31917:253:0:o;32519:479::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32601:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32593:60;;;::::0;-1:-1:-1;;;32593:60:0;;9338:2:1;32593:60:0::1;::::0;::::1;9320:21:1::0;9377:2;9357:18;;;9350:30;9416:29;9396:18;;;9389:57;9463:18;;32593:60:0::1;9310:177:1::0;32593:60:0::1;32669:9;32664:327;32688:9;:16:::0;32684:20;::::1;32664:327;;;32746:7;-1:-1:-1::0;;;;;32730:23:0::1;:9;32740:1;32730:12;;;;;;-1:-1:-1::0;;;32730:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32730:12:0::1;:23;32726:254;;;32789:9;32799:16:::0;;:20:::1;::::0;32818:1:::1;::::0;32799:20:::1;:::i;:::-;32789:31;;;;;;-1:-1:-1::0;;;32789:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;32774:9:::1;:12:::0;;-1:-1:-1;;;;;32789:31:0;;::::1;::::0;32784:1;;32774:12;::::1;;;-1:-1:-1::0;;;32774:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32774:46:0::1;-1:-1:-1::0;;;;;32774:46:0;;::::1;;::::0;;32839:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32878:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32878:28:0::1;::::0;;32925:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;32925:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32925:15:0;;;;;-1:-1:-1;;;;;;32925:15:0::1;::::0;;;;;32664:327:::1;32519:479:::0;:::o;32726:254::-:1;32706:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32664:327;;;;32519:479:::0;:::o;30362:218::-;8219:10;30450:4;30499:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30499:34:0;;;;;;;;;;30450:4;;30467:83;;30490:7;;30499:50;;30538:10;30499:38;:50::i;31088:377::-;8219:10;31140:14;31189:19;;;:11;:19;;;;;;;;31188:20;31180:77;;;;-1:-1:-1;;;31180:77:0;;12807:2:1;31180:77:0;;;12789:21:1;12846:2;12826:18;;;12819:30;12885:34;12865:18;;;12858:62;-1:-1:-1;;;12936:18:1;;;12929:42;12988:19;;31180:77:0;12779:234:1;31180:77:0;31269:15;31293:19;31304:7;31293:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31341:15:0;;;;;;:7;:15;;;;;;31268:44;;-1:-1:-1;31341:28:0;;:15;-1:-1:-1;31268:44:0;31341:19;:28::i;:::-;-1:-1:-1;;;;;31323:15:0;;;;;;:7;:15;;;;;:46;31390:7;;:20;;31402:7;31390:11;:20::i;:::-;31380:7;:30;31434:10;;:23;;31449:7;31434:14;:23::i;:::-;31421:10;:36;-1:-1:-1;;;31088:377:0:o;47031:111::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47100:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;47100:34:0::1;47130:4;47100:34;::::0;;47031:111::o;31473:436::-;31563:7;31602;;31591;:18;;31583:62;;;;-1:-1:-1;;;31583:62:0;;9694:2:1;31583:62:0;;;9676:21:1;9733:2;9713:18;;;9706:30;9772:33;9752:18;;;9745:61;9823:18;;31583:62:0;9666:181:1;31583:62:0;31661:17;31656:246;;31696:15;31720:19;31731:7;31720:10;:19::i;:::-;-1:-1:-1;31695:44:0;;-1:-1:-1;31754:14:0;;-1:-1:-1;;;;;31754:14:0;31656:246;31803:23;31834:19;31845:7;31834:10;:19::i;:::-;-1:-1:-1;31801:52:0;;-1:-1:-1;31868:22:0;;-1:-1:-1;;;;;31868:22:0;48494:122;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;48580:13:::1;:28:::0;48494:122::o;32178:333::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32261:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32260:21;32252:61;;;::::0;-1:-1:-1;;;32252:61:0;;9338:2:1;32252:61:0::1;::::0;::::1;9320:21:1::0;9377:2;9357:18;;;9350:30;9416:29;9396:18;;;9389:57;9463:18;;32252:61:0::1;9310:177:1::0;32252:61:0::1;-1:-1:-1::0;;;;;32327:16:0;::::1;32346:1;32327:16:::0;;;:7:::1;:16;::::0;;;;;:20;32324:108:::1;;-1:-1:-1::0;;;;;32403:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32383:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32364:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32324:108:::1;-1:-1:-1::0;;;;;32442:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32442:27:0::1;32465:4;32442:27:::0;;::::1;::::0;;;32480:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32480:23:0::1;::::0;;::::1;::::0;;32178:333::o;47410:323::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;47553:1:::1;47535:14;:19;;47527:47;;;::::0;-1:-1:-1;;;47527:47:0;;7012:2:1;47527:47:0::1;::::0;::::1;6994:21:1::0;7051:2;7031:18;;;7024:30;-1:-1:-1;;;7070:18:1;;;7063:44;7124:18;;47527:47:0::1;6984:164:1::0;47527:47:0::1;47585:16;:35:::0;;;47631:14:::1;:31:::0;;;47689:36:::1;47604:16:::0;47648:14;47689:20:::1;:36::i;:::-;47673:13;:52:::0;-1:-1:-1;;47410:323:0:o;37245:134::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37333:30:0;;;::::1;;::::0;;;:20:::1;:30;::::0;;;;:38;;-1:-1:-1;;37333:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37245:134::o;47276:122::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;47363:15:::1;:27:::0;;-1:-1:-1;;;;;;47363:27:0::1;-1:-1:-1::0;;;;;47363:27:0;;;::::1;::::0;;;::::1;::::0;;47276:122::o;29340:198::-;-1:-1:-1;;;;;29430:20:0;;29406:7;29430:20;;;:11;:20;;;;;;;;29426:49;;;-1:-1:-1;;;;;;29459:16:0;;;;;:7;:16;;;;;;;29340:198::o;29426:49::-;-1:-1:-1;;;;;29513:16:0;;;;;;:7;:16;;;;;;29493:37;;:19;:37::i;16357:148::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;16464:1:::1;16448:6:::0;;16427:40:::1;::::0;-1:-1:-1;;;;;16448:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16427:40:0;16464:1;;16427:40:::1;16495:1;16478:19:::0;;-1:-1:-1;;;;;;16478:19:0::1;::::0;;16357:148::o;46726:297::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;46791:1:::1;46781:7;:11:::0;;;46802:15:::1;:25:::0;;;46853:1:::1;46837:13;:17:::0;;;46864:21:::1;:37:::0;46911:13:::1;:17:::0;;;46938:21:::1;:37:::0;46985:30:::1;47010:4;46985:24;:30::i;:::-;46726:297::o:0;29051:87::-;29090:13;29123:7;29116:14;;;;;:::i;30588:269::-;30681:4;30698:129;8219:10;30721:7;30730:96;30769:15;30730:96;;;;;;;;;;;;;;;;;8219:10;30730:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30730:34:0;;;;;;;;;;;;:38;:96::i;17379:305::-;17431:14;;-1:-1:-1;;;;;17431:14:0;17449:10;17431:28;17423:76;;;;-1:-1:-1;;;17423:76:0;;13220:2:1;17423:76:0;;;13202:21:1;13259:2;13239:18;;;13232:30;13298:34;13278:18;;;13271:62;-1:-1:-1;;;13349:18:1;;;13342:33;13392:19;;17423:76:0;13192:225:1;17423:76:0;17536:9;;17518:15;:27;17510:72;;;;-1:-1:-1;;;17510:72:0;;12447:2:1;17510:72:0;;;12429:21:1;12486:2;12466:18;;;12459:30;12525:33;12505:18;;;12498:61;12576:18;;17510:72:0;12419:181:1;17510:72:0;17627:14;;;17619:6;;17598:44;;-1:-1:-1;;;;;17627:14:0;;;;17619:6;;;;-1:-1:-1;;;;;;;;;;;17598:44:0;;17662:14;;;17653:23;;-1:-1:-1;;;;;;17653:23:0;-1:-1:-1;;;;;17662:14:0;;;17653:23;;;;;;17379:305::o;29546:167::-;29624:4;29641:42;8219:10;29665:9;29676:6;29641:9;:42::i;48628:130::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;48738:12:::1;:6:::0;48745:5:::1;48738:12;:::i;:::-;48712:23;:38:::0;-1:-1:-1;48628:130:0:o;47907:116::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;47986:17:::1;:29:::0;47907:116::o;49115:171::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;49192:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;49192:32:0::1;-1:-1:-1::0;;;;49192:32:0;;::::1;;::::0;;49240:38:::1;::::0;::::1;::::0;::::1;::::0;49216:8;5425:14:1;5418:22;5400:41;;5388:2;5373:18;;5355:92;17077:226:0;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;17158:6:::1;::::0;;;17141:23;;-1:-1:-1;;;;;;17141:23:0;;::::1;-1:-1:-1::0;;;;;17158:6:0;::::1;17141:23;::::0;;;17175:19:::1;::::0;;17217:22:::1;17235:4:::0;17217:15:::1;:22;:::i;:::-;17205:9;:34:::0;17292:1:::1;17276:6:::0;;17255:40:::1;::::0;-1:-1:-1;;;;;17276:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17255:40:0;17292:1;;17255:40:::1;17077:226:::0;:::o;46398:316::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;46468:1:::1;46458:7;:11:::0;;;46479:15:::1;:19:::0;;;46508:13:::1;:17:::0;;;46535:21:::1;:25:::0;;;46570:13:::1;:17:::0;;;46597:21:::1;:25:::0;;;46647:18:::1;46632:12;:33:::0;46675:31:::1;::::0;:24:::1;:31::i;48264:108::-:0;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;48338:15:::1;:26:::0;48264:108::o;47154:110::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47221:27:0::1;47251:5;47221:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;47221:35:0::1;::::0;;47154:110::o;48770:195::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;48869:1:::1;48855:11;:15;48847:65;;;::::0;-1:-1:-1;;;48847:65:0;;7355:2:1;48847:65:0::1;::::0;::::1;7337:21:1::0;7394:2;7374:18;;;7367:30;7433:34;7413:18;;;7406:62;-1:-1:-1;;;7484:18:1;;;7477:35;7529:19;;48847:65:0::1;7327:227:1::0;48847:65:0::1;48938:19;:11:::0;48952:5:::1;48938:19;:::i;:::-;48923:12;:34:::0;-1:-1:-1;48770:195:0:o;16660:244::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8219:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16749:22:0;::::1;16741:73;;;::::0;-1:-1:-1;;;16741:73:0;;8172:2:1;16741:73:0::1;::::0;::::1;8154:21:1::0;8211:2;8191:18;;;8184:30;8250:34;8230:18;;;8223:62;-1:-1:-1;;;8301:18:1;;;8294:36;8347:19;;16741:73:0::1;8144:228:1::0;16741:73:0::1;16851:6;::::0;;16830:38:::1;::::0;-1:-1:-1;;;;;16830:38:0;;::::1;::::0;16851:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16830:38:0;::::1;16879:6;:17:::0;;-1:-1:-1;;;;;;16879:17:0::1;-1:-1:-1::0;;;;;16879:17:0;;;::::1;::::0;;;::::1;::::0;;16660:244::o;37387:337::-;-1:-1:-1;;;;;37480:19:0;;37472:68;;;;-1:-1:-1;;;37472:68:0;;12042:2:1;37472:68:0;;;12024:21:1;12081:2;12061:18;;;12054:30;12120:34;12100:18;;;12093:62;-1:-1:-1;;;12171:18:1;;;12164:34;12215:19;;37472:68:0;12014:226:1;37472:68:0;-1:-1:-1;;;;;37559:21:0;;37551:68;;;;-1:-1:-1;;;37551:68:0;;8579:2:1;37551:68:0;;;8561:21:1;8618:2;8598:18;;;8591:30;8657:34;8637:18;;;8630:62;-1:-1:-1;;;8708:18:1;;;8701:32;8750:19;;37551:68:0;8551:224:1;37551:68:0;-1:-1:-1;;;;;37632:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37684:32;;13568:25:1;;;37684:32:0;;13541:18:1;37684:32:0;;;;;;;37387:337;;;:::o;37732:1363::-;-1:-1:-1;;;;;37854:18:0;;37846:68;;;;-1:-1:-1;;;37846:68:0;;11636:2:1;37846:68:0;;;11618:21:1;11675:2;11655:18;;;11648:30;11714:34;11694:18;;;11687:62;-1:-1:-1;;;11765:18:1;;;11758:35;11810:19;;37846:68:0;11608:227:1;37846:68:0;37942:1;37933:6;:10;37925:64;;;;-1:-1:-1;;;37925:64:0;;11226:2:1;37925:64:0;;;11208:21:1;11265:2;11245:18;;;11238:30;11304:34;11284:18;;;11277:62;-1:-1:-1;;;11355:18:1;;;11348:39;11404:19;;37925:64:0;11198:231:1;37925:64:0;38284:28;38315:24;38333:4;38315:9;:24::i;:::-;38409:23;;38448:16;;38284:55;;-1:-1:-1;38385:47:0;;;;-1:-1:-1;;;38448:16:0;;;;38447:17;:42;;;;-1:-1:-1;38476:13:0;;-1:-1:-1;;;;;38468:21:0;;;38476:13;;38468:21;;38447:42;:67;;;;-1:-1:-1;38493:21:0;;-1:-1:-1;;;38493:21:0;;;;38447:67;38443:602;;;38534:19;38531:133;;;38612:36;38627:20;38612:14;:36::i;:::-;38750:14;;38710:21;;38750:14;;:54;;;;;38786:17;;38768:7;:36;38750:54;38746:274;;;38857:17;;38847:7;:27;38843:81;;;-1:-1:-1;38907:17:0;;38843:81;38961:43;38975:28;38987:15;;38975:7;:11;;:28;;;;:::i;:::-;38961:13;:43::i;:::-;38443:602;;39057:30;39072:4;39077:2;39080:6;39057:14;:30::i;:::-;37732:1363;;;;;:::o;4533:192::-;4619:7;4655:12;4647:6;;;;4639:29;;;;-1:-1:-1;;;4639:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4679:9:0;4691:5;4695:1;4691;:5;:::i;:::-;4679:17;4533:192;-1:-1:-1;;;;;4533:192:0:o;35119:163::-;35160:7;35181:15;35198;35217:19;:17;:19::i;:::-;35180:56;;-1:-1:-1;35180:56:0;-1:-1:-1;35254:20:0;35180:56;;35254:11;:20::i;:::-;35247:27;;;;35119:163;:::o;5931:132::-;5989:7;6016:39;6020:1;6023;6016:39;;;;;;;;;;;;;;;;;:3;:39::i;3630:181::-;3688:7;;3720:5;3724:1;3720;:5;:::i;:::-;3708:17;;3749:1;3744;:6;;3736:46;;;;-1:-1:-1;;;3736:46:0;;8982:2:1;3736:46:0;;;8964:21:1;9021:2;9001:18;;;8994:30;9060:29;9040:18;;;9033:57;9107:18;;3736:46:0;8954:177:1;33917:419:0;33976:7;33985;33994;34003;34012;34021;34042:23;34067:12;34081:18;34103:20;34115:7;34103:11;:20::i;:::-;34041:82;;;;;;34135:15;34152:23;34177:12;34193:50;34205:7;34214:4;34220:10;34232;:8;:10::i;:::-;34193:11;:50::i;:::-;34134:109;;;;-1:-1:-1;34134:109:0;;-1:-1:-1;34294:15:0;;-1:-1:-1;34311:4:0;;-1:-1:-1;34317:10:0;;-1:-1:-1;33917:419:0;;-1:-1:-1;;;;;33917:419:0:o;4094:136::-;4152:7;4179:43;4183:1;4186;4179:43;;;;;;;;;;;;;;;;;:3;:43::i;39103:1773::-;27943:16;:23;;-1:-1:-1;;;;27943:23:0;-1:-1:-1;;;27943:23:0;;;39225:13:::1;::::0;39207::::1;::::0;27943:23;;39207:32:::1;::::0;:13;:17:::1;:32::i;:::-;39188:51;;39250:22;39275:73;39339:8;39275:59;39300:33;39318:14;;39300:13;;:17;;:33;;;;:::i;:::-;39275:20:::0;;:24:::1;:59::i;:::-;:63:::0;::::1;:73::i;:::-;39250:98;;39359:22;39384:53;39428:8;39384:39;39409:13;;39384:20;:24;;:39;;;;:::i;:53::-;39359:78;;39448:20;39471:54;39516:8;39471:40;39496:14;;39471:20;:24;;:40;;;;:::i;:54::-;39448:77:::0;-1:-1:-1;39583:21:0::1;39662:32;39679:14:::0;39662:16:::1;:32::i;:::-;39705:25;39733:53;:21;39759:26:::0;39733:25:::1;:53::i;:::-;39855:15;::::0;39705:81;;-1:-1:-1;39834:56:0::1;::::0;-1:-1:-1;;;;;39855:15:0::1;39705:81:::0;39834:20:::1;:56::i;:::-;39936:30;39953:12;39936:16;:30::i;:::-;40039:12;40054:21;:14:::0;40073:1:::1;40054:18;:21::i;:::-;40039:36:::0;-1:-1:-1;40086:17:0::1;40106:24;:14:::0;40039:36;40106:18:::1;:24::i;:::-;40086:44:::0;-1:-1:-1;40433:21:0::1;40499:22;40516:4:::0;40499:16:::1;:22::i;:::-;40652:18;40673:41;:21;40699:14:::0;40673:25:::1;:41::i;:::-;40652:62;;40764:35;40777:9;40788:10;40764:12;:35::i;:::-;40825:43;::::0;;14730:25:1;;;14786:2;14771:18;;14764:34;;;14814:18;;;14807:34;;;40825:43:0::1;::::0;14718:2:1;14703:18;40825:43:0::1;;;;;;;-1:-1:-1::0;;27989:16:0;:24;;-1:-1:-1;;;;27989:24:0;;;-1:-1:-1;;;;;;;;;39103:1773:0:o;42075:135::-;27943:16;:23;;-1:-1:-1;;;;27943:23:0;-1:-1:-1;;;27943:23:0;;;42146:10;;42142:61:::1;;42170:24;42187:6;42170:16;:24::i;:::-;-1:-1:-1::0;27989:16:0;:24;;-1:-1:-1;;;;27989:24:0;;;42075:135::o;42812:1096::-;-1:-1:-1;;;;;42915:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;42945:29:0;;;;;;:18;:29;;;;;;;;42915:59;42912:245;;;43002:14;:12;:14::i;:::-;42912:245;;;43088:12;;43078:6;:22;;43070:75;;;;-1:-1:-1;;;43070:75:0;;10054:2:1;43070:75:0;;;10036:21:1;10093:2;10073:18;;;10066:30;10132:34;10112:18;;;10105:62;-1:-1:-1;;;10183:18:1;;;10176:38;10231:19;;43070:75:0;10026:230:1;43070:75:0;-1:-1:-1;;;;;43173:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;43197:22:0;;;;;;:11;:22;;;;;;;;43196:23;43173:46;43169:597;;;43236:48;43258:6;43266:9;43277:6;43236:21;:48::i;:::-;43169:597;;;-1:-1:-1;;;;;43307:19:0;;;;;;:11;:19;;;;;;;;43306:20;:46;;;;-1:-1:-1;;;;;;43330:22:0;;;;;;:11;:22;;;;;;;;43306:46;43302:464;;;43369:46;43389:6;43397:9;43408:6;43369:19;:46::i;43302:464::-;-1:-1:-1;;;;;43438:19:0;;;;;;:11;:19;;;;;;;;43437:20;:47;;;;-1:-1:-1;;;;;;43462:22:0;;;;;;:11;:22;;;;;;;;43461:23;43437:47;43433:333;;;43501:44;43519:6;43527:9;43538:6;43501:17;:44::i;43433:333::-;-1:-1:-1;;;;;43567:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;43590:22:0;;;;;;:11;:22;;;;;;;;43567:45;43563:203;;;43629:48;43651:6;43659:9;43670:6;43629:21;:48::i;43563:203::-;43710:44;43728:6;43736:9;43747:6;43710:17;:44::i;:::-;-1:-1:-1;;;;;43789:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;43819:29:0;;;;;;:18;:29;;;;;;;;43789:59;43786:115;;;43874:15;36981;;36971:7;:25;37022:21;;37006:13;:37;37069:21;;37053:13;:37;36928:170;43874:15;42812:1096;;;:::o;35290:561::-;35387:7;;35423;;35340;;;;;35447:289;35471:9;:16;35467:20;;35447:289;;;35537:7;35513;:21;35521:9;35531:1;35521:12;;;;;;-1:-1:-1;;;35521:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35521:12:0;35513:21;;;;;;;;;;;;;:31;;:66;;;35572:7;35548;:21;35556:9;35566:1;35556:12;;;;;;-1:-1:-1;;;35556:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35556:12:0;35548:21;;;;;;;;;;;;;:31;35513:66;35509:97;;;35589:7;;35598;;35581:25;;;;;;;35290:561;;:::o;35509:97::-;35631:34;35643:7;:21;35651:9;35661:1;35651:12;;;;;;-1:-1:-1;;;35651:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35651:12:0;35643:21;;;;;;;;;;;;;35631:7;;:11;:34::i;:::-;35621:44;;35690:34;35702:7;:21;35710:9;35720:1;35710:12;;;;;;-1:-1:-1;;;35710:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35710:12:0;35702:21;;;;;;;;;;;;;35690:7;;:11;:34::i;:::-;35680:44;-1:-1:-1;35489:3:0;;;;:::i;:::-;;;;35447:289;;;-1:-1:-1;35772:7:0;;35760;;:20;;:11;:20::i;:::-;35750:7;:30;35746:61;;;35790:7;;35799;;35782:25;;;;;;35290:561;;:::o;35746:61::-;35826:7;;35835;;-1:-1:-1;35290:561:0;-1:-1:-1;35290:561:0:o;6559:278::-;6645:7;6680:12;6673:5;6665:28;;;;-1:-1:-1;;;6665:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6704:9:0;6716:5;6720:1;6716;:5;:::i;34344:330::-;34404:7;34413;34422;34442:12;34457:24;34473:7;34457:15;:24::i;:::-;34442:39;;34492:18;34513:30;34535:7;34513:21;:30::i;:::-;34492:51;-1:-1:-1;34554:23:0;34580:33;34492:51;34580:17;:7;34592:4;34580:11;:17::i;:::-;:21;;:33::i;:::-;34554:59;34649:4;;-1:-1:-1;34655:10:0;;-1:-1:-1;34344:330:0;;-1:-1:-1;;;34344:330:0:o;34682:429::-;34797:7;;;;34853:24;:7;34865:11;34853;:24::i;:::-;34835:42;-1:-1:-1;34888:12:0;34903:21;:4;34912:11;34903:8;:21::i;:::-;34888:36;-1:-1:-1;34935:18:0;34956:27;:10;34971:11;34956:14;:27::i;:::-;34935:48;-1:-1:-1;34994:23:0;35020:33;34935:48;35020:17;:7;35032:4;35020:11;:17::i;:33::-;35072:7;;;;-1:-1:-1;35098:4:0;;-1:-1:-1;34682:429:0;;-1:-1:-1;;;;;;;34682:429:0:o;4984:471::-;5042:7;5287:6;5283:47;;-1:-1:-1;5317:1:0;5310:8;;5283:47;5342:9;5354:5;5358:1;5354;:5;:::i;:::-;5342:17;-1:-1:-1;5387:1:0;5378:5;5382:1;5342:17;5378:5;:::i;:::-;:10;5370:56;;;;-1:-1:-1;;;5370:56:0;;10463:2:1;5370:56:0;;;10445:21:1;10502:2;10482:18;;;10475:30;10541:34;10521:18;;;10514:62;-1:-1:-1;;;10592:18:1;;;10585:31;10633:19;;5370:56:0;10435:223:1;40884:589:0;41034:16;;;41048:1;41034:16;;;;;;;;41010:21;;41034:16;;;;;;;;;;-1:-1:-1;41034:16:0;41010:40;;41079:4;41061;41066:1;41061:7;;;;;;-1:-1:-1;;;41061:7:0;;;;;;;;;-1:-1:-1;;;;;41061:23:0;;;:7;;;;;;;;;;:23;;;;41105:15;;:22;;;-1:-1:-1;;;41105:22:0;;;;:15;;;;;:20;;:22;;;;;41061:7;;41105:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41095:4;41100:1;41095:7;;;;;;-1:-1:-1;;;41095:7:0;;;;;;;;;-1:-1:-1;;;;;41095:32:0;;;:7;;;;;;;;;:32;41172:15;;41140:62;;41157:4;;41172:15;41190:11;41140:8;:62::i;:::-;41241:15;;:224;;-1:-1:-1;;;41241:224:0;;-1:-1:-1;;;;;41241:15:0;;;;:66;;:224;;41322:11;;41241:15;;41392:4;;41419;;41439:15;;41241:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40884:589;;:::o;48977:126::-;49069:26;;-1:-1:-1;;;;;49069:18:0;;;:26;;;;;49088:6;;49069:26;;;;49088:6;49069:18;:26;;;;;;;;;;;;;;;;;;;42218:513;42398:15;;42366:62;;42383:4;;-1:-1:-1;;;;;42398:15:0;42416:11;42366:8;:62::i;:::-;42471:15;;-1:-1:-1;;;;;42471:15:0;:31;42510:9;42543:4;42563:11;42471:15;;42675:7;15752;15779:6;-1:-1:-1;;;;;15779:6:0;;15714:79;42675:7;42471:252;;;;;;-1:-1:-1;;;;;;42471:252:0;;;-1:-1:-1;;;;;5007:15:1;;;42471:252:0;;;4989:34:1;5039:18;;;5032:34;;;;5082:18;;;5075:34;;;;5125:18;;;5118:34;5189:15;;;5168:19;;;5161:44;42697:15:0;5221:19:1;;;5214:35;4923:19;;42471:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41485:578::-;41630:16;;;41644:1;41630:16;;;;;;;;41606:21;;41630:16;;;;;;;;-1:-1:-1;;41667:15:0;;:22;;;-1:-1:-1;;;41667:22:0;;;;41606:40;;-1:-1:-1;;;;;;41667:15:0;;;;:20;;-1:-1:-1;41667:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41657:4;41662:1;41657:7;;;;;;-1:-1:-1;;;41657:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;41657:32:0;;;-1:-1:-1;;;;;41657:32:0;;;;;41718:4;41700;41705:1;41700:7;;;;;;-1:-1:-1;;;41700:7:0;;;;;;;;;-1:-1:-1;;;;;41700:23:0;;;:7;;;;;;;;;:23;41760:15;;;:66;41834:6;41760:15;41903:4;41922:11;41964:24;:15;41984:3;41964:19;:24::i;:::-;41760:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42025:30;42042:6;42050:4;42025:30;;;;;;;:::i;:::-;;;;;;;;41485:578;;:::o;36570:346::-;36616:7;;:12;:34;;;;-1:-1:-1;36632:13:0;;:18;36616:34;:54;;;;-1:-1:-1;36654:13:0;;:16;36616:54;36613:66;;;36570:346::o;36613:66::-;36717:7;;;36699:15;:25;36759:13;;;36735:21;:37;36807:13;;;36783:21;:37;-1:-1:-1;36841:11:0;;;;36863:17;;;;36891;36570:346::o;45820:566::-;45923:15;45940:23;45965:12;45979:23;46004:12;46018:18;46040:19;46051:7;46040:10;:19::i;:::-;-1:-1:-1;;;;;46088:15:0;;;;;;:7;:15;;;;;;45922:137;;-1:-1:-1;45922:137:0;;-1:-1:-1;45922:137:0;;-1:-1:-1;45922:137:0;-1:-1:-1;45922:137:0;-1:-1:-1;45922:137:0;-1:-1:-1;46088:28:0;;46108:7;46088:19;:28::i;:::-;-1:-1:-1;;;;;46070:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46145:7;:15;;;;:28;;46165:7;46145:19;:28::i;:::-;-1:-1:-1;;;;;46127:15:0;;;;;;;:7;:15;;;;;;:46;;;;46205:18;;;;;;;:39;;46228:15;46205:22;:39::i;:::-;-1:-1:-1;;;;;46184:18:0;;;;;;:7;:18;;;;;:60;46258:26;46273:10;46258:14;:26::i;:::-;46295:23;46307:4;46313;46295:11;:23::i;:::-;46351:9;-1:-1:-1;;;;;46334:44:0;46343:6;-1:-1:-1;;;;;46334:44:0;;46362:15;46334:44;;;;13568:25:1;;13556:2;13541:18;;13523:76;46334:44:0;;;;;;;;45820:566;;;;;;;;;:::o;45226:586::-;45327:15;45344:23;45369:12;45383:23;45408:12;45422:18;45444:19;45455:7;45444:10;:19::i;:::-;-1:-1:-1;;;;;45492:15:0;;;;;;:7;:15;;;;;;45326:137;;-1:-1:-1;45326:137:0;;-1:-1:-1;45326:137:0;;-1:-1:-1;45326:137:0;-1:-1:-1;45326:137:0;-1:-1:-1;45326:137:0;-1:-1:-1;45492:28:0;;45326:137;45492:19;:28::i;:::-;-1:-1:-1;;;;;45474:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45552:18;;;;;:7;:18;;;;;:39;;45575:15;45552:22;:39::i;:::-;-1:-1:-1;;;;;45531:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45623:7;:18;;;;:39;;45646:15;45623:22;:39::i;43920:620::-;44025:15;44042:23;44067:12;44081:23;44106:12;44120:18;44142:19;44153:7;44142:10;:19::i;:::-;44024:137;;;;;;;;;;;;44209:64;44223:6;44231:15;44248;44265:7;44209:13;:64::i;:::-;-1:-1:-1;;;;;44302:15:0;;;;;;:7;:15;;;;;;44172:101;;-1:-1:-1;44172:101:0;;-1:-1:-1;44302:28:0;;44322:7;44302:19;:28::i;33006:642::-;33109:15;33126:23;33151:12;33165:23;33190:12;33204:18;33226:19;33237:7;33226:10;:19::i;:::-;-1:-1:-1;;;;;33274:15:0;;;;;;:7;:15;;;;;;33108:137;;-1:-1:-1;33108:137:0;;-1:-1:-1;33108:137:0;;-1:-1:-1;33108:137:0;-1:-1:-1;33108:137:0;-1:-1:-1;33108:137:0;-1:-1:-1;33274:28:0;;33294:7;33274:19;:28::i;:::-;-1:-1:-1;;;;;33256:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33331:7;:15;;;;:28;;33351:7;33331:19;:28::i;36230:154::-;36294:7;36321:55;36360:5;36321:20;36333:7;;36321;:11;;:20;;;;:::i;36392:166::-;36462:7;36489:61;36534:5;36489:26;36501:13;;36489:7;:11;;:26;;;;:::i;35863:355::-;35926:19;35949:10;:8;:10::i;:::-;35926:33;-1:-1:-1;35970:18:0;35991:27;:10;35926:33;35991:14;:27::i;:::-;36070:4;36054:22;;;;:7;:22;;;;;;35970:48;;-1:-1:-1;36054:38:0;;35970:48;36054:26;:38::i;:::-;36045:4;36029:22;;;;:7;:22;;;;;;;;:63;;;;36106:11;:26;;;;;;36103:107;;;36188:4;36172:22;;;;:7;:22;;;;;;:38;;36199:10;36172:26;:38::i;:::-;36163:4;36147:22;;;;:7;:22;;;;;:63;35863:355;;;:::o;33762:147::-;33840:7;;:17;;33852:4;33840:11;:17::i;:::-;33830:7;:27;33881:10;;:20;;33896:4;33881:14;:20::i;:::-;33868:10;:33;-1:-1:-1;;33762:147:0:o;44548:666::-;44676:7;44685;44713:13;;44728:1;44713:16;44710:67;;;-1:-1:-1;44741:15:0;;-1:-1:-1;44758:15:0;44734:40;;44710:67;44829:13;;44787:18;;44808:35;;:16;:7;44820:3;44808:11;:16::i;:::-;:20;;:35::i;:::-;44787:56;;44854:18;44875:26;44890:10;:8;:10::i;:::-;44875;;:14;:26::i;:::-;44854:47;-1:-1:-1;44930:31:0;:15;44854:47;44930:19;:31::i;:::-;44912:49;-1:-1:-1;44990:31:0;:15;45010:10;44990:19;:31::i;:::-;45073:4;45057:22;;;;:7;:22;;;;;;44972:49;;-1:-1:-1;45057:38:0;;45084:10;45057:26;:38::i;:::-;45048:4;45032:22;;;;:7;:22;;;;;;;:63;;;;45111:43;;-1:-1:-1;;;;;45111:43:0;;;;;;;45143:10;13568:25:1;;13556:2;13541:18;;13523:76;45111:43:0;;;;;;;;45172:15;45189;45165:40;;;;;;44548:666;;;;;;;;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;977:398::-;1045:6;1053;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;1127:6;1119;1112:22;1074:2;1171:9;1158:23;1190:31;1215:5;1190:31;:::i;:::-;1240:5;-1:-1:-1;1297:2:1;1282:18;;1269:32;1310:33;1269:32;1310:33;:::i;:::-;1362:7;1352:17;;;1064:311;;;;;:::o;1380:466::-;1457:6;1465;1473;1526:2;1514:9;1505:7;1501:23;1497:32;1494:2;;;1547:6;1539;1532:22;1494:2;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:1;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1484:362;;1782:7;;-1:-1:-1;;;1836:2:1;1821:18;;;;1808:32;;1484:362::o;1851:325::-;1916:6;1924;1977:2;1965:9;1956:7;1952:23;1948:32;1945:2;;;1998:6;1990;1983:22;1945:2;2042:9;2029:23;2061:31;2086:5;2061:31;:::i;:::-;2111:5;-1:-1:-1;2135:35:1;2166:2;2151:18;;2135:35;:::i;:::-;2125:45;;1935:241;;;;;:::o;2181:325::-;2249:6;2257;2310:2;2298:9;2289:7;2285:23;2281:32;2278:2;;;2331:6;2323;2316:22;2278:2;2375:9;2362:23;2394:31;2419:5;2394:31;:::i;:::-;2444:5;2496:2;2481:18;;;;2468:32;;-1:-1:-1;;;2268:238:1:o;2511:190::-;2567:6;2620:2;2608:9;2599:7;2595:23;2591:32;2588:2;;;2641:6;2633;2626:22;2588:2;2669:26;2685:9;2669:26;:::i;2706:190::-;2765:6;2818:2;2806:9;2797:7;2793:23;2789:32;2786:2;;;2839:6;2831;2824:22;2786:2;-1:-1:-1;2867:23:1;;2776:120;-1:-1:-1;2776:120:1:o;2901:258::-;2966:6;2974;3027:2;3015:9;3006:7;3002:23;2998:32;2995:2;;;3048:6;3040;3033:22;2995:2;3089:9;3076:23;3066:33;;3118:35;3149:2;3138:9;3134:18;3118:35;:::i;3164:258::-;3232:6;3240;3293:2;3281:9;3272:7;3268:23;3264:32;3261:2;;;3314:6;3306;3299:22;3261:2;-1:-1:-1;;3342:23:1;;;3412:2;3397:18;;;3384:32;;-1:-1:-1;3251:171:1:o;3427:316::-;3515:6;3523;3531;3584:2;3572:9;3563:7;3559:23;3555:32;3552:2;;;3605:6;3597;3590:22;3552:2;3639:9;3633:16;3623:26;;3689:2;3678:9;3674:18;3668:25;3658:35;;3733:2;3722:9;3718:18;3712:25;3702:35;;3542:201;;;;;:::o;3748:463::-;3801:3;3839:5;3833:12;3866:6;3861:3;3854:19;3892:4;3921:2;3916:3;3912:12;3905:19;;3958:2;3951:5;3947:14;3979:3;3991:195;4005:6;4002:1;3999:13;3991:195;;;4070:13;;-1:-1:-1;;;;;4066:39:1;4054:52;;4126:12;;;;4161:15;;;;4102:1;4020:9;3991:195;;;-1:-1:-1;4202:3:1;;3809:402;-1:-1:-1;;;;;3809:402:1:o;5687:510::-;5958:6;5947:9;5940:25;6001:3;5996:2;5985:9;5981:18;5974:31;5921:4;6022:57;6074:3;6063:9;6059:19;6051:6;6022:57;:::i;:::-;-1:-1:-1;;;;;6115:32:1;;;;6110:2;6095:18;;6088:60;-1:-1:-1;6179:2:1;6164:18;6157:34;6014:65;5930:267;-1:-1:-1;;5930:267:1:o;6202:603::-;6314:4;6343:2;6372;6361:9;6354:21;6404:6;6398:13;6447:6;6442:2;6431:9;6427:18;6420:34;6472:4;6485:140;6499:6;6496:1;6493:13;6485:140;;;6594:14;;;6590:23;;6584:30;6560:17;;;6579:2;6556:26;6549:66;6514:10;;6485:140;;;6643:6;6640:1;6637:13;6634:2;;;6713:4;6708:2;6699:6;6688:9;6684:22;6680:31;6673:45;6634:2;-1:-1:-1;6789:2:1;6768:15;-1:-1:-1;;6764:29:1;6749:45;;;;6796:2;6745:54;;6323:482;-1:-1:-1;;;6323:482:1:o;10663:356::-;10865:2;10847:21;;;10884:18;;;10877:30;10943:34;10938:2;10923:18;;10916:62;11010:2;10995:18;;10837:182::o;13604:332::-;13811:6;13800:9;13793:25;13854:2;13849;13838:9;13834:18;13827:30;13774:4;13874:56;13926:2;13915:9;13911:18;13903:6;13874:56;:::i;:::-;13866:64;13783:153;-1:-1:-1;;;;13783:153:1:o;13941:582::-;14240:6;14229:9;14222:25;14283:6;14278:2;14267:9;14263:18;14256:34;14326:3;14321:2;14310:9;14306:18;14299:31;14203:4;14347:57;14399:3;14388:9;14384:19;14376:6;14347:57;:::i;:::-;-1:-1:-1;;;;;14440:32:1;;;;14435:2;14420:18;;14413:60;-1:-1:-1;14504:3:1;14489:19;14482:35;14339:65;14212:311;-1:-1:-1;;;14212:311:1:o;15041:128::-;15081:3;15112:1;15108:6;15105:1;15102:13;15099:2;;;15118:18;;:::i;:::-;-1:-1:-1;15154:9:1;;15089:80::o;15174:217::-;15214:1;15240;15230:2;;-1:-1:-1;;;15265:31:1;;15319:4;15316:1;15309:15;15347:4;15272:1;15337:15;15230:2;-1:-1:-1;15376:9:1;;15220:171::o;15396:168::-;15436:7;15502:1;15498;15494:6;15490:14;15487:1;15484:21;15479:1;15472:9;15465:17;15461:45;15458:2;;;15509:18;;:::i;:::-;-1:-1:-1;15549:9:1;;15448:116::o;15569:125::-;15609:4;15637:1;15634;15631:8;15628:2;;;15642:18;;:::i;:::-;-1:-1:-1;15679:9:1;;15618:76::o;15699:380::-;15778:1;15774:12;;;;15821;;;15842:2;;15896:4;15888:6;15884:17;15874:27;;15842:2;15949;15941:6;15938:14;15918:18;15915:38;15912:2;;;15995:10;15990:3;15986:20;15983:1;15976:31;16030:4;16027:1;16020:15;16058:4;16055:1;16048:15;15912:2;;15754:325;;;:::o;16084:135::-;16123:3;-1:-1:-1;;16144:17:1;;16141:2;;;16164:18;;:::i;:::-;-1:-1:-1;16211:1:1;16200:13;;16131:88::o;16224:127::-;16285:10;16280:3;16276:20;16273:1;16266:31;16316:4;16313:1;16306:15;16340:4;16337:1;16330:15;16356:131;-1:-1:-1;;;;;16431:31:1;;16421:42;;16411:2;;16477:1;16474;16467:12;16411:2;16401:86;:::o

Swarm Source

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