ETH Price: $3,298.62 (+1.49%)

Token

ETERNIUMX (X)
 

Overview

Max Total Supply

50,000 X

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.718543387615481094 X

Value
$0.00
0x48d710d640d69440b4014fc27caaef6f4d6f7a43
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:
ETERNIUMX

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-26
*/

/**

                     S O O N T H E T R U T H S H A L L B E R E V E A L E D
TG: t.me/ETERNIUMX

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcludedFromLimit;
    mapping(address => bool) public _isBlackListed;

    uint256 private _tTotal = 50000 * 10**18;

    address payable private _marketingAddress = payable(address(0x186763af91CdA9322D3bc71984c8786498643F64));

    string private _name = "ETERNIUMX";
    string private _symbol = "X";
    uint8 private _decimals = 18;

    struct BuyFee {
        uint8 liquidity;
        uint8 marketing;
    }

    struct SellFee {
        uint8 liquidity;
        uint8 marketing;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool private isTradingEnabled;
    uint256 tradingStartBlock;
    uint8 constant BLOCKCOUNT = 5;
    bool swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = _tTotal.div(1000).mul(10); //1%
    uint256 private numTokensSellToAddToLiquidity = _tTotal.div(1000).mul(2); //0.2%
    uint256 public _maxWalletSize = _tTotal.div(1000).mul(20); // 2%

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

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

    mapping (address => uint256) _lastTrade;

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

        buyFee.liquidity = 1;
        buyFee.marketing = 5;

        sellFee.liquidity = 1;
        sellFee.marketing = 5;

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

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

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

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

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

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

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

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

   function manualBlacklist(address addr, bool value) external onlyOwner {
        _isBlackListed[addr] = value;
    }
    function enableTrading() external onlyOwner {
        isTradingEnabled = true;
        tradingStartBlock = block.number;
    }


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

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

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


    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

        return (tTransferAmount, tLiquidity, tWallet);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        _rOwned[address(this)] = _rOwned[address(this)].add(tLiquidity);
    }

    function _takeWalletFee(uint256 tWallet) private {
        _rOwned[address(this)] = _rOwned[address(this)].add(tWallet);
    }

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

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

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

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

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

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

    function isExcludedFromLimit(address account) public view returns (bool) {
        return _isExcludedFromLimit[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            !_isBlackListed[from] && !_isBlackListed[to],
            "Account is blacklisted"
        );
        require( isTradingEnabled || _isExcludedFromFee[from],
            "Trading not enabled yet"
        );
        
        

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        
        if (takeFee) {
            if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                    
                );
                if (block.number < tradingStartBlock + BLOCKCOUNT) {
                    _isBlackListed[to] = true;
                   }
                
                if (to != uniswapV2Pair) {
                    require(
                        amount + balanceOf(to) <= _maxWalletSize,
                        "Recipient exceeds max wallet size."
                    );
                }

              
            }
        }

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

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

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(toSwap);

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

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

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

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

    
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (takeFee) {
            removeAllFee();
            if (sender == uniswapV2Pair) {
                setBuy();
            }
            if (recipient == uniswapV2Pair) {
                setSell();
            }
        }

        _transferStandard(sender, recipient, amount);

        removeAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tLiquidity,
            uint256 tWallet
        ) = _getTValues(tAmount);

        _rOwned[sender] = _rOwned[sender].sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(tTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeWalletFee(tWallet);
        emit Transfer(sender, recipient, tTransferAmount);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","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":"excludeFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"manualBlacklist","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy_liquidity","type":"uint8"},{"internalType":"uint8","name":"buy_marketing","type":"uint8"},{"internalType":"uint8","name":"sell_liquidity","type":"uint8"},{"internalType":"uint8","name":"sell_marketing","type":"uint8"}],"name":"setBothFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052690a968163f0a57b40000060075573186763af91cda9322d3bc71984c8786498643f64600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600981526020017f455445524e49554d58000000000000000000000000000000000000000000000081525060099081620000ad919062000c2b565b506040518060400160405280600181526020017f5800000000000000000000000000000000000000000000000000000000000000815250600a9081620000f4919062000c2b565b506012600b60006101000a81548160ff021916908360ff1602179055506001601060006101000a81548160ff02191690831515021790555062000164600a620001506103e86007546200084360201b6200145a1790919060201c565b6200089560201b620014a41790919060201c565b6011556200019f60026200018b6103e86007546200084360201b6200145a1790919060201c565b6200089560201b620014a41790919060201c565b601255620001da6014620001c66103e86007546200084360201b6200145a1790919060201c565b6200089560201b620014a41790919060201c565b601355348015620001ea57600080fd5b506000620001fd6200091860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060075460026000620002b26200091860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600c60000160006101000a81548160ff021916908360ff1602179055506005600c60000160016101000a81548160ff021916908360ff1602179055506001600d60000160006101000a81548160ff021916908360ff1602179055506005600d60000160016101000a81548160ff021916908360ff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f7919062000d7c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000485919062000d7c565b6040518363ffffffff1660e01b8152600401620004a492919062000dbf565b6020604051808303816000875af1158015620004c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ea919062000d7c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160046000620005676200092060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200071a6200092060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007d36200091860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000834919062000dfd565b60405180910390a35062001046565b60006200088d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200094960201b60201c565b905092915050565b6000808303620008a9576000905062000912565b60008284620008b9919062000e49565b9050828482620008ca919062000ec3565b146200090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009049062000f82565b60405180910390fd5b809150505b92915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000993576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098a919062001022565b60405180910390fd5b5060008385620009a4919062000ec3565b9050809150509392505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a3357607f821691505b60208210810362000a495762000a48620009eb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ab37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a74565b62000abf868362000a74565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b0c62000b0662000b008462000ad7565b62000ae1565b62000ad7565b9050919050565b6000819050919050565b62000b288362000aeb565b62000b4062000b378262000b13565b84845462000a81565b825550505050565b600090565b62000b5762000b48565b62000b6481848462000b1d565b505050565b5b8181101562000b8c5762000b8060008262000b4d565b60018101905062000b6a565b5050565b601f82111562000bdb5762000ba58162000a4f565b62000bb08462000a64565b8101602085101562000bc0578190505b62000bd862000bcf8562000a64565b83018262000b69565b50505b505050565b600082821c905092915050565b600062000c006000198460080262000be0565b1980831691505092915050565b600062000c1b838362000bed565b9150826002028217905092915050565b62000c3682620009b1565b67ffffffffffffffff81111562000c525762000c51620009bc565b5b62000c5e825462000a1a565b62000c6b82828562000b90565b600060209050601f83116001811462000ca3576000841562000c8e578287015190505b62000c9a858262000c0d565b86555062000d0a565b601f19841662000cb38662000a4f565b60005b8281101562000cdd5784890151825560018201915060208501945060208101905062000cb6565b8683101562000cfd578489015162000cf9601f89168262000bed565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d448262000d17565b9050919050565b62000d568162000d37565b811462000d6257600080fd5b50565b60008151905062000d768162000d4b565b92915050565b60006020828403121562000d955762000d9462000d12565b5b600062000da58482850162000d65565b91505092915050565b62000db98162000d37565b82525050565b600060408201905062000dd6600083018562000dae565b62000de5602083018462000dae565b9392505050565b62000df78162000ad7565b82525050565b600060208201905062000e14600083018462000dec565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e568262000ad7565b915062000e638362000ad7565b925082820262000e738162000ad7565b9150828204841483151762000e8d5762000e8c62000e1a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ed08262000ad7565b915062000edd8362000ad7565b92508262000ef05762000eef62000e94565b5b828204905092915050565b600082825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600062000f6a60218362000efb565b915062000f778262000f0c565b604082019050919050565b6000602082019050818103600083015262000f9d8162000f5b565b9050919050565b60005b8381101562000fc457808201518184015260208101905062000fa7565b60008484015250505050565b6000601f19601f8301169050919050565b600062000fee82620009b1565b62000ffa818562000efb565b93506200100c81856020860162000fa4565b620010178162000fd0565b840191505092915050565b600060208201905081810360008301526200103e818462000fe1565b905092915050565b60805160a051613a31620010ab60003960008181610bf2015281816119df01528181611c73015281816120a7015261210301526000818161087901528181612216015281816122f70152818161231e015281816123ba01526123e10152613a316000f3fe6080604052600436106101bb5760003560e01c80636c9bb93b116100ec57806391d919a91161008a578063c49b9a8011610064578063c49b9a801461060b578063d94160e014610634578063dd62ed3e14610671578063ea2f0b37146106ae576101c2565b806391d919a91461057a57806395d89b41146105a3578063a9059cbb146105ce576101c2565b80637d1db4a5116100c65780637d1db4a5146104e25780638a8c523c1461050d5780638da5cb5b146105245780638f9a55c01461054f576101c2565b80636c9bb93b1461045157806370a082311461048e578063715018a6146104cb576101c2565b8063313ce567116101595780634706240211610133578063470624021461039457806349bd5a5e146103c05780635342acb4146103eb5780635bf84d4a14610428576101c2565b8063313ce567146103175780633a17304a14610342578063437823ec1461036b576101c2565b80631694505e116101955780631694505e1461025857806318160ddd1461028357806323b872dd146102ae5780632b14ca56146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f25780630bd3a7f91461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6106d7565b6040516101e99190612a81565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612b3c565b610769565b6040516102269190612b97565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612bb2565b610787565b005b34801561026457600080fd5b5061026d610877565b60405161027a9190612c3e565b60405180910390f35b34801561028f57600080fd5b5061029861089b565b6040516102a59190612c68565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612c83565b6108a5565b6040516102e29190612b97565b60405180910390f35b3480156102f757600080fd5b5061030061097e565b60405161030e929190612cf2565b60405180910390f35b34801561032357600080fd5b5061032c6109aa565b6040516103399190612d1b565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190612d62565b6109c1565b005b34801561037757600080fd5b50610392600480360381019061038d9190612bb2565b610ad4565b005b3480156103a057600080fd5b506103a9610bc4565b6040516103b7929190612cf2565b60405180910390f35b3480156103cc57600080fd5b506103d5610bf0565b6040516103e29190612dd8565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612bb2565b610c14565b60405161041f9190612b97565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612e1f565b610c6a565b005b34801561045d57600080fd5b5061047860048036038101906104739190612bb2565b610d5a565b6040516104859190612b97565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612bb2565b610d7a565b6040516104c29190612c68565b60405180910390f35b3480156104d757600080fd5b506104e0610dc3565b005b3480156104ee57600080fd5b506104f7610f16565b6040516105049190612c68565b60405180910390f35b34801561051957600080fd5b50610522610f1c565b005b34801561053057600080fd5b50610539610fd5565b6040516105469190612dd8565b60405180910390f35b34801561055b57600080fd5b50610564610ffe565b6040516105719190612c68565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612bb2565b611004565b005b3480156105af57600080fd5b506105b86110f4565b6040516105c59190612a81565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190612b3c565b611186565b6040516106029190612b97565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190612e5f565b6111a4565b005b34801561064057600080fd5b5061065b60048036038101906106569190612bb2565b61128d565b6040516106689190612b97565b60405180910390f35b34801561067d57600080fd5b5061069860048036038101906106939190612e8c565b6112e3565b6040516106a59190612c68565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612bb2565b61136a565b005b6060600980546106e690612efb565b80601f016020809104026020016040519081016040528092919081815260200182805461071290612efb565b801561075f5780601f106107345761010080835404028352916020019161075f565b820191906000526020600020905b81548152906001019060200180831161074257829003601f168201915b5050505050905090565b600061077d61077661151e565b8484611526565b6001905092915050565b61078f61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390612f78565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754905090565b60006108b28484846116ef565b610973846108be61151e565b61096e856040518060600160405280602881526020016139d460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061092461151e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d339092919063ffffffff16565b611526565b600190509392505050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b6000600b60009054906101000a900460ff16905090565b6109c961151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612f78565b60405180910390fd5b82600c60000160016101000a81548160ff021916908360ff16021790555083600c60000160006101000a81548160ff021916908360ff16021790555080600d60000160016101000a81548160ff021916908360ff16021790555081600d60000160006101000a81548160ff021916908360ff16021790555050505050565b610adc61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090612f78565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c7261151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690612f78565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dcb61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90612f78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b610f2461151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890612f78565b60405180910390fd5b6001600e60036101000a81548160ff02191690831515021790555043600f81905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61100c61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612f78565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6060600a805461110390612efb565b80601f016020809104026020016040519081016040528092919081815260200182805461112f90612efb565b801561117c5780601f106111515761010080835404028352916020019161117c565b820191906000526020600020905b81548152906001019060200180831161115f57829003601f168201915b5050505050905090565b600061119a61119361151e565b84846116ef565b6001905092915050565b6111ac61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123090612f78565b60405180910390fd5b80601060006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516112829190612b97565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61137261151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612f78565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061149c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d97565b905092915050565b60008083036114b65760009050611518565b600082846114c49190612fc7565b90508284826114d39190613038565b14611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906130db565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c9061316d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906131ff565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116e29190612c68565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590613291565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613323565b60405180910390fd5b60008111611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906133b5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118b45750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90613421565b60405180910390fd5b600e60039054906101000a900460ff16806119575750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9061348d565b60405180910390fd5b60006119a130610d7a565b905060115481106119b25760115490505b600060125482101590508080156119d65750600e60029054906101000a900460ff16155b8015611a2e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611a465750601060009054906101000a900460ff165b15611a5a576012549150611a5982611dfa565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b015750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b0b57600090505b8015611d1f57600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611bb55750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d1e57601154841115611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf69061351f565b60405180910390fd5b600560ff16600f54611c11919061353f565b431015611c71576001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611d1d57601354611cd086610d7a565b85611cdb919061353f565b1115611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d13906135e5565b60405180910390fd5b5b5b5b611d2b86868684612097565b505050505050565b6000838311158290611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d729190612a81565b60405180910390fd5b5060008385611d8a9190613605565b9050809150509392505050565b60008083118290611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd59190612a81565b60405180910390fd5b5060008385611ded9190613038565b9050809150509392505050565b6001600e60026101000a81548160ff02191690831515021790555060006002600d60000160019054906101000a900460ff16600c60000160019054906101000a900460ff16600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611e6f9190613639565b611e799190613639565b611e839190613639565b611e8d919061366e565b60ff169050600081600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611ec59190613639565b60ff1684611ed39190612fc7565b611edd9190613038565b905060008184611eed9190613605565b90506000479050611efd82612177565b60008147611f0b9190613605565b90506000600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611f3f9190613639565b60ff1686611f4d9190613605565b82611f589190613038565b90506000600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611f8c9190613639565b60ff1682611f9a9190612fc7565b90506000811115611fb057611faf86826123b4565b5b6000600d60000160019054906101000a900460ff16600c60000160019054906101000a900460ff16611fe29190613639565b60ff16600284611ff29190612fc7565b611ffc9190612fc7565b9050600081111561207157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561206f573d6000803e3d6000fd5b505b50505050505050506000600e60026101000a81548160ff02191690831515021790555050565b801561215e576120a561248e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612101576121006124c8565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361215d5761215c612524565b5b5b612169848484612580565b61217161248e565b50505050565b6000600267ffffffffffffffff811115612194576121936136ab565b5b6040519080825280602002602001820160405280156121c25781602001602082028036833780820191505090505b50905030816000815181106121da576121d96136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561227f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a3919061371e565b816001815181106122b7576122b66136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061231c307f000000000000000000000000000000000000000000000000000000000000000084611526565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161237e959493929190613844565b600060405180830381600087803b15801561239857600080fd5b505af11580156123ac573d6000803e3d6000fd5b505050505050565b6123df307f000000000000000000000000000000000000000000000000000000000000000084611526565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016124449695949392919061389e565b60606040518083038185885af1158015612462573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124879190613914565b5050505050565b6000600e60006101000a81548160ff021916908360ff1602179055506000600e60016101000a81548160ff021916908360ff160217905550565b600c60000160009054906101000a900460ff16600e60006101000a81548160ff021916908360ff160217905550600c60000160019054906101000a900460ff16600e60016101000a81548160ff021916908360ff160217905550565b600d60000160009054906101000a900460ff16600e60006101000a81548160ff021916908360ff160217905550600d60000160019054906101000a900460ff16600e60016101000a81548160ff021916908360ff160217905550565b600080600061258e8461273d565b9250925092506125e684600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279790919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267b83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e190919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126c78261283f565b6126d0816128d7565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161272d9190612c68565b60405180910390a3505050505050565b60008060008061274c8561296f565b90506000612759866129b0565b9050600061278282612774858a61279790919063ffffffff16565b61279790919063ffffffff16565b90508083839550955095505050509193909250565b60006127d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d33565b905092915050565b60008082846127f0919061353f565b905083811015612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906139b3565b60405180910390fd5b8091505092915050565b61289181600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e190919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b61292981600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e190919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60006129a9606461299b600e60009054906101000a900460ff1660ff16856114a490919063ffffffff16565b61145a90919063ffffffff16565b9050919050565b60006129ea60646129dc600e60019054906101000a900460ff1660ff16856114a490919063ffffffff16565b61145a90919063ffffffff16565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a2b578082015181840152602081019050612a10565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a53826129f1565b612a5d81856129fc565b9350612a6d818560208601612a0d565b612a7681612a37565b840191505092915050565b60006020820190508181036000830152612a9b8184612a48565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ad382612aa8565b9050919050565b612ae381612ac8565b8114612aee57600080fd5b50565b600081359050612b0081612ada565b92915050565b6000819050919050565b612b1981612b06565b8114612b2457600080fd5b50565b600081359050612b3681612b10565b92915050565b60008060408385031215612b5357612b52612aa3565b5b6000612b6185828601612af1565b9250506020612b7285828601612b27565b9150509250929050565b60008115159050919050565b612b9181612b7c565b82525050565b6000602082019050612bac6000830184612b88565b92915050565b600060208284031215612bc857612bc7612aa3565b5b6000612bd684828501612af1565b91505092915050565b6000819050919050565b6000612c04612bff612bfa84612aa8565b612bdf565b612aa8565b9050919050565b6000612c1682612be9565b9050919050565b6000612c2882612c0b565b9050919050565b612c3881612c1d565b82525050565b6000602082019050612c536000830184612c2f565b92915050565b612c6281612b06565b82525050565b6000602082019050612c7d6000830184612c59565b92915050565b600080600060608486031215612c9c57612c9b612aa3565b5b6000612caa86828701612af1565b9350506020612cbb86828701612af1565b9250506040612ccc86828701612b27565b9150509250925092565b600060ff82169050919050565b612cec81612cd6565b82525050565b6000604082019050612d076000830185612ce3565b612d146020830184612ce3565b9392505050565b6000602082019050612d306000830184612ce3565b92915050565b612d3f81612cd6565b8114612d4a57600080fd5b50565b600081359050612d5c81612d36565b92915050565b60008060008060808587031215612d7c57612d7b612aa3565b5b6000612d8a87828801612d4d565b9450506020612d9b87828801612d4d565b9350506040612dac87828801612d4d565b9250506060612dbd87828801612d4d565b91505092959194509250565b612dd281612ac8565b82525050565b6000602082019050612ded6000830184612dc9565b92915050565b612dfc81612b7c565b8114612e0757600080fd5b50565b600081359050612e1981612df3565b92915050565b60008060408385031215612e3657612e35612aa3565b5b6000612e4485828601612af1565b9250506020612e5585828601612e0a565b9150509250929050565b600060208284031215612e7557612e74612aa3565b5b6000612e8384828501612e0a565b91505092915050565b60008060408385031215612ea357612ea2612aa3565b5b6000612eb185828601612af1565b9250506020612ec285828601612af1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f1357607f821691505b602082108103612f2657612f25612ecc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f626020836129fc565b9150612f6d82612f2c565b602082019050919050565b60006020820190508181036000830152612f9181612f55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fd282612b06565b9150612fdd83612b06565b9250828202612feb81612b06565b9150828204841483151761300257613001612f98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061304382612b06565b915061304e83612b06565b92508261305e5761305d613009565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006130c56021836129fc565b91506130d082613069565b604082019050919050565b600060208201905081810360008301526130f4816130b8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131576024836129fc565b9150613162826130fb565b604082019050919050565b600060208201905081810360008301526131868161314a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131e96022836129fc565b91506131f48261318d565b604082019050919050565b60006020820190508181036000830152613218816131dc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061327b6025836129fc565b91506132868261321f565b604082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061330d6023836129fc565b9150613318826132b1565b604082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061339f6029836129fc565b91506133aa82613343565b604082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656400000000000000000000600082015250565b600061340b6016836129fc565b9150613416826133d5565b602082019050919050565b6000602082019050818103600083015261343a816133fe565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b60006134776017836129fc565b915061348282613441565b602082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006135096028836129fc565b9150613514826134ad565b604082019050919050565b60006020820190508181036000830152613538816134fc565b9050919050565b600061354a82612b06565b915061355583612b06565b925082820190508082111561356d5761356c612f98565b5b92915050565b7f526563697069656e742065786365656473206d61782077616c6c65742073697a60008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006135cf6022836129fc565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b600061361082612b06565b915061361b83612b06565b925082820390508181111561363357613632612f98565b5b92915050565b600061364482612cd6565b915061364f83612cd6565b9250828201905060ff81111561366857613667612f98565b5b92915050565b600061367982612cd6565b915061368483612cd6565b925082820261369281612cd6565b91508082146136a4576136a3612f98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061371881612ada565b92915050565b60006020828403121561373457613733612aa3565b5b600061374284828501613709565b91505092915050565b6000819050919050565b600061377061376b6137668461374b565b612bdf565b612b06565b9050919050565b61378081613755565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137bb81612ac8565b82525050565b60006137cd83836137b2565b60208301905092915050565b6000602082019050919050565b60006137f182613786565b6137fb8185613791565b9350613806836137a2565b8060005b8381101561383757815161381e88826137c1565b9750613829836137d9565b92505060018101905061380a565b5085935050505092915050565b600060a0820190506138596000830188612c59565b6138666020830187613777565b818103604083015261387881866137e6565b90506138876060830185612dc9565b6138946080830184612c59565b9695505050505050565b600060c0820190506138b36000830189612dc9565b6138c06020830188612c59565b6138cd6040830187613777565b6138da6060830186613777565b6138e76080830185612dc9565b6138f460a0830184612c59565b979650505050505050565b60008151905061390e81612b10565b92915050565b60008060006060848603121561392d5761392c612aa3565b5b600061393b868287016138ff565b935050602061394c868287016138ff565b925050604061395d868287016138ff565b9150509250925092565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061399d601b836129fc565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b1e90bad023ee427350d3e30ba6cb4073cb32138914cee75d168725d500a991f64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80636c9bb93b116100ec57806391d919a91161008a578063c49b9a8011610064578063c49b9a801461060b578063d94160e014610634578063dd62ed3e14610671578063ea2f0b37146106ae576101c2565b806391d919a91461057a57806395d89b41146105a3578063a9059cbb146105ce576101c2565b80637d1db4a5116100c65780637d1db4a5146104e25780638a8c523c1461050d5780638da5cb5b146105245780638f9a55c01461054f576101c2565b80636c9bb93b1461045157806370a082311461048e578063715018a6146104cb576101c2565b8063313ce567116101595780634706240211610133578063470624021461039457806349bd5a5e146103c05780635342acb4146103eb5780635bf84d4a14610428576101c2565b8063313ce567146103175780633a17304a14610342578063437823ec1461036b576101c2565b80631694505e116101955780631694505e1461025857806318160ddd1461028357806323b872dd146102ae5780632b14ca56146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f25780630bd3a7f91461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6106d7565b6040516101e99190612a81565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612b3c565b610769565b6040516102269190612b97565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612bb2565b610787565b005b34801561026457600080fd5b5061026d610877565b60405161027a9190612c3e565b60405180910390f35b34801561028f57600080fd5b5061029861089b565b6040516102a59190612c68565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612c83565b6108a5565b6040516102e29190612b97565b60405180910390f35b3480156102f757600080fd5b5061030061097e565b60405161030e929190612cf2565b60405180910390f35b34801561032357600080fd5b5061032c6109aa565b6040516103399190612d1b565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190612d62565b6109c1565b005b34801561037757600080fd5b50610392600480360381019061038d9190612bb2565b610ad4565b005b3480156103a057600080fd5b506103a9610bc4565b6040516103b7929190612cf2565b60405180910390f35b3480156103cc57600080fd5b506103d5610bf0565b6040516103e29190612dd8565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612bb2565b610c14565b60405161041f9190612b97565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612e1f565b610c6a565b005b34801561045d57600080fd5b5061047860048036038101906104739190612bb2565b610d5a565b6040516104859190612b97565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612bb2565b610d7a565b6040516104c29190612c68565b60405180910390f35b3480156104d757600080fd5b506104e0610dc3565b005b3480156104ee57600080fd5b506104f7610f16565b6040516105049190612c68565b60405180910390f35b34801561051957600080fd5b50610522610f1c565b005b34801561053057600080fd5b50610539610fd5565b6040516105469190612dd8565b60405180910390f35b34801561055b57600080fd5b50610564610ffe565b6040516105719190612c68565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612bb2565b611004565b005b3480156105af57600080fd5b506105b86110f4565b6040516105c59190612a81565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190612b3c565b611186565b6040516106029190612b97565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190612e5f565b6111a4565b005b34801561064057600080fd5b5061065b60048036038101906106569190612bb2565b61128d565b6040516106689190612b97565b60405180910390f35b34801561067d57600080fd5b5061069860048036038101906106939190612e8c565b6112e3565b6040516106a59190612c68565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612bb2565b61136a565b005b6060600980546106e690612efb565b80601f016020809104026020016040519081016040528092919081815260200182805461071290612efb565b801561075f5780601f106107345761010080835404028352916020019161075f565b820191906000526020600020905b81548152906001019060200180831161074257829003601f168201915b5050505050905090565b600061077d61077661151e565b8484611526565b6001905092915050565b61078f61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390612f78565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600754905090565b60006108b28484846116ef565b610973846108be61151e565b61096e856040518060600160405280602881526020016139d460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061092461151e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d339092919063ffffffff16565b611526565b600190509392505050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b6000600b60009054906101000a900460ff16905090565b6109c961151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90612f78565b60405180910390fd5b82600c60000160016101000a81548160ff021916908360ff16021790555083600c60000160006101000a81548160ff021916908360ff16021790555080600d60000160016101000a81548160ff021916908360ff16021790555081600d60000160006101000a81548160ff021916908360ff16021790555050505050565b610adc61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090612f78565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b7f00000000000000000000000043b499421c7e0149ef319283172827d8f36ba3d581565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c7261151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690612f78565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dcb61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90612f78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b610f2461151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890612f78565b60405180910390fd5b6001600e60036101000a81548160ff02191690831515021790555043600f81905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61100c61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612f78565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6060600a805461110390612efb565b80601f016020809104026020016040519081016040528092919081815260200182805461112f90612efb565b801561117c5780601f106111515761010080835404028352916020019161117c565b820191906000526020600020905b81548152906001019060200180831161115f57829003601f168201915b5050505050905090565b600061119a61119361151e565b84846116ef565b6001905092915050565b6111ac61151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123090612f78565b60405180910390fd5b80601060006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516112829190612b97565b60405180910390a150565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61137261151e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612f78565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061149c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d97565b905092915050565b60008083036114b65760009050611518565b600082846114c49190612fc7565b90508284826114d39190613038565b14611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906130db565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c9061316d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906131ff565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116e29190612c68565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590613291565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613323565b60405180910390fd5b60008111611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906133b5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118b45750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90613421565b60405180910390fd5b600e60039054906101000a900460ff16806119575750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9061348d565b60405180910390fd5b60006119a130610d7a565b905060115481106119b25760115490505b600060125482101590508080156119d65750600e60029054906101000a900460ff16155b8015611a2e57507f00000000000000000000000043b499421c7e0149ef319283172827d8f36ba3d573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611a465750601060009054906101000a900460ff165b15611a5a576012549150611a5982611dfa565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b015750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b0b57600090505b8015611d1f57600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611bb55750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d1e57601154841115611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf69061351f565b60405180910390fd5b600560ff16600f54611c11919061353f565b431015611c71576001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b7f00000000000000000000000043b499421c7e0149ef319283172827d8f36ba3d573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611d1d57601354611cd086610d7a565b85611cdb919061353f565b1115611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d13906135e5565b60405180910390fd5b5b5b5b611d2b86868684612097565b505050505050565b6000838311158290611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d729190612a81565b60405180910390fd5b5060008385611d8a9190613605565b9050809150509392505050565b60008083118290611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd59190612a81565b60405180910390fd5b5060008385611ded9190613038565b9050809150509392505050565b6001600e60026101000a81548160ff02191690831515021790555060006002600d60000160019054906101000a900460ff16600c60000160019054906101000a900460ff16600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611e6f9190613639565b611e799190613639565b611e839190613639565b611e8d919061366e565b60ff169050600081600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611ec59190613639565b60ff1684611ed39190612fc7565b611edd9190613038565b905060008184611eed9190613605565b90506000479050611efd82612177565b60008147611f0b9190613605565b90506000600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611f3f9190613639565b60ff1686611f4d9190613605565b82611f589190613038565b90506000600d60000160009054906101000a900460ff16600c60000160009054906101000a900460ff16611f8c9190613639565b60ff1682611f9a9190612fc7565b90506000811115611fb057611faf86826123b4565b5b6000600d60000160019054906101000a900460ff16600c60000160019054906101000a900460ff16611fe29190613639565b60ff16600284611ff29190612fc7565b611ffc9190612fc7565b9050600081111561207157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561206f573d6000803e3d6000fd5b505b50505050505050506000600e60026101000a81548160ff02191690831515021790555050565b801561215e576120a561248e565b7f00000000000000000000000043b499421c7e0149ef319283172827d8f36ba3d573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612101576121006124c8565b5b7f00000000000000000000000043b499421c7e0149ef319283172827d8f36ba3d573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361215d5761215c612524565b5b5b612169848484612580565b61217161248e565b50505050565b6000600267ffffffffffffffff811115612194576121936136ab565b5b6040519080825280602002602001820160405280156121c25781602001602082028036833780820191505090505b50905030816000815181106121da576121d96136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561227f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a3919061371e565b816001815181106122b7576122b66136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061231c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611526565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161237e959493929190613844565b600060405180830381600087803b15801561239857600080fd5b505af11580156123ac573d6000803e3d6000fd5b505050505050565b6123df307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611526565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016124449695949392919061389e565b60606040518083038185885af1158015612462573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124879190613914565b5050505050565b6000600e60006101000a81548160ff021916908360ff1602179055506000600e60016101000a81548160ff021916908360ff160217905550565b600c60000160009054906101000a900460ff16600e60006101000a81548160ff021916908360ff160217905550600c60000160019054906101000a900460ff16600e60016101000a81548160ff021916908360ff160217905550565b600d60000160009054906101000a900460ff16600e60006101000a81548160ff021916908360ff160217905550600d60000160019054906101000a900460ff16600e60016101000a81548160ff021916908360ff160217905550565b600080600061258e8461273d565b9250925092506125e684600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279790919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267b83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e190919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126c78261283f565b6126d0816128d7565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161272d9190612c68565b60405180910390a3505050505050565b60008060008061274c8561296f565b90506000612759866129b0565b9050600061278282612774858a61279790919063ffffffff16565b61279790919063ffffffff16565b90508083839550955095505050509193909250565b60006127d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d33565b905092915050565b60008082846127f0919061353f565b905083811015612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906139b3565b60405180910390fd5b8091505092915050565b61289181600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e190919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b61292981600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e190919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60006129a9606461299b600e60009054906101000a900460ff1660ff16856114a490919063ffffffff16565b61145a90919063ffffffff16565b9050919050565b60006129ea60646129dc600e60019054906101000a900460ff1660ff16856114a490919063ffffffff16565b61145a90919063ffffffff16565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a2b578082015181840152602081019050612a10565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a53826129f1565b612a5d81856129fc565b9350612a6d818560208601612a0d565b612a7681612a37565b840191505092915050565b60006020820190508181036000830152612a9b8184612a48565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ad382612aa8565b9050919050565b612ae381612ac8565b8114612aee57600080fd5b50565b600081359050612b0081612ada565b92915050565b6000819050919050565b612b1981612b06565b8114612b2457600080fd5b50565b600081359050612b3681612b10565b92915050565b60008060408385031215612b5357612b52612aa3565b5b6000612b6185828601612af1565b9250506020612b7285828601612b27565b9150509250929050565b60008115159050919050565b612b9181612b7c565b82525050565b6000602082019050612bac6000830184612b88565b92915050565b600060208284031215612bc857612bc7612aa3565b5b6000612bd684828501612af1565b91505092915050565b6000819050919050565b6000612c04612bff612bfa84612aa8565b612bdf565b612aa8565b9050919050565b6000612c1682612be9565b9050919050565b6000612c2882612c0b565b9050919050565b612c3881612c1d565b82525050565b6000602082019050612c536000830184612c2f565b92915050565b612c6281612b06565b82525050565b6000602082019050612c7d6000830184612c59565b92915050565b600080600060608486031215612c9c57612c9b612aa3565b5b6000612caa86828701612af1565b9350506020612cbb86828701612af1565b9250506040612ccc86828701612b27565b9150509250925092565b600060ff82169050919050565b612cec81612cd6565b82525050565b6000604082019050612d076000830185612ce3565b612d146020830184612ce3565b9392505050565b6000602082019050612d306000830184612ce3565b92915050565b612d3f81612cd6565b8114612d4a57600080fd5b50565b600081359050612d5c81612d36565b92915050565b60008060008060808587031215612d7c57612d7b612aa3565b5b6000612d8a87828801612d4d565b9450506020612d9b87828801612d4d565b9350506040612dac87828801612d4d565b9250506060612dbd87828801612d4d565b91505092959194509250565b612dd281612ac8565b82525050565b6000602082019050612ded6000830184612dc9565b92915050565b612dfc81612b7c565b8114612e0757600080fd5b50565b600081359050612e1981612df3565b92915050565b60008060408385031215612e3657612e35612aa3565b5b6000612e4485828601612af1565b9250506020612e5585828601612e0a565b9150509250929050565b600060208284031215612e7557612e74612aa3565b5b6000612e8384828501612e0a565b91505092915050565b60008060408385031215612ea357612ea2612aa3565b5b6000612eb185828601612af1565b9250506020612ec285828601612af1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f1357607f821691505b602082108103612f2657612f25612ecc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f626020836129fc565b9150612f6d82612f2c565b602082019050919050565b60006020820190508181036000830152612f9181612f55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fd282612b06565b9150612fdd83612b06565b9250828202612feb81612b06565b9150828204841483151761300257613001612f98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061304382612b06565b915061304e83612b06565b92508261305e5761305d613009565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006130c56021836129fc565b91506130d082613069565b604082019050919050565b600060208201905081810360008301526130f4816130b8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131576024836129fc565b9150613162826130fb565b604082019050919050565b600060208201905081810360008301526131868161314a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131e96022836129fc565b91506131f48261318d565b604082019050919050565b60006020820190508181036000830152613218816131dc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061327b6025836129fc565b91506132868261321f565b604082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061330d6023836129fc565b9150613318826132b1565b604082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061339f6029836129fc565b91506133aa82613343565b604082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656400000000000000000000600082015250565b600061340b6016836129fc565b9150613416826133d5565b602082019050919050565b6000602082019050818103600083015261343a816133fe565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b60006134776017836129fc565b915061348282613441565b602082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006135096028836129fc565b9150613514826134ad565b604082019050919050565b60006020820190508181036000830152613538816134fc565b9050919050565b600061354a82612b06565b915061355583612b06565b925082820190508082111561356d5761356c612f98565b5b92915050565b7f526563697069656e742065786365656473206d61782077616c6c65742073697a60008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006135cf6022836129fc565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b600061361082612b06565b915061361b83612b06565b925082820390508181111561363357613632612f98565b5b92915050565b600061364482612cd6565b915061364f83612cd6565b9250828201905060ff81111561366857613667612f98565b5b92915050565b600061367982612cd6565b915061368483612cd6565b925082820261369281612cd6565b91508082146136a4576136a3612f98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061371881612ada565b92915050565b60006020828403121561373457613733612aa3565b5b600061374284828501613709565b91505092915050565b6000819050919050565b600061377061376b6137668461374b565b612bdf565b612b06565b9050919050565b61378081613755565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137bb81612ac8565b82525050565b60006137cd83836137b2565b60208301905092915050565b6000602082019050919050565b60006137f182613786565b6137fb8185613791565b9350613806836137a2565b8060005b8381101561383757815161381e88826137c1565b9750613829836137d9565b92505060018101905061380a565b5085935050505092915050565b600060a0820190506138596000830188612c59565b6138666020830187613777565b818103604083015261387881866137e6565b90506138876060830185612dc9565b6138946080830184612c59565b9695505050505050565b600060c0820190506138b36000830189612dc9565b6138c06020830188612c59565b6138cd6040830187613777565b6138da6060830186613777565b6138e76080830185612dc9565b6138f460a0830184612c59565b979650505050505050565b60008151905061390e81612b10565b92915050565b60008060006060848603121561392d5761392c612aa3565b5b600061393b868287016138ff565b935050602061394c868287016138ff565b925050604061395d868287016138ff565b9150509250925092565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061399d601b836129fc565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b1e90bad023ee427350d3e30ba6cb4073cb32138914cee75d168725d500a991f64736f6c63430008110033

Deployed Bytecode Sourcemap

24796:14064:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27732:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28636:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29532:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25786:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28009:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28837:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25685:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27918:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30038:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29295:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25658:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;25844:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32148:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29776:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25163:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28112:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15296:148;;;;;;;;;;;;;:::i;:::-;;26065:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29899:129;;;;;;;;;;;;;:::i;:::-;;14654:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26218:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29655:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27823:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28237:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30405:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32280:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28444:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29414:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27732:83;27769:13;27802:5;27795:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27732:83;:::o;28636:193::-;28738:4;28760:39;28769:12;:10;:12::i;:::-;28783:7;28792:6;28760:8;:39::i;:::-;28817:4;28810:11;;28636:193;;;;:::o;29532:115::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29635:4:::1;29603:20;:29;29624:7;29603:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;29532:115:::0;:::o;25786:51::-;;;:::o;28009:95::-;28062:7;28089;;28082:14;;28009:95;:::o;28837:446::-;28969:4;28986:36;28996:6;29004:9;29015:6;28986:9;:36::i;:::-;29033:220;29056:6;29077:12;:10;:12::i;:::-;29104:138;29160:6;29104:138;;;;;;;;;;;;;;;;;:11;:19;29116:6;29104:19;;;;;;;;;;;;;;;:33;29124:12;:10;:12::i;:::-;29104:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;29033:8;:220::i;:::-;29271:4;29264:11;;28837:446;;;;;:::o;25685:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27918:83::-;27959:5;27984:9;;;;;;;;;;;27977:16;;27918:83;:::o;30038:357::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30239:13:::1;30220:6;:16;;;:32;;;;;;;;;;;;;;;;;;30282:13;30263:6;:16;;;:32;;;;;;;;;;;;;;;;;;30328:14;30308:7;:17;;;:34;;;;;;;;;;;;;;;;;;30373:14;30353:7;:17;;;:34;;;;;;;;;;;;;;;;;;30038:357:::0;;;;:::o;29295:111::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29394:4:::1;29364:18;:27;29383:7;29364:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;29295:111:::0;:::o;25658:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25844:38::-;;;:::o;32148:124::-;32213:4;32237:18;:27;32256:7;32237:27;;;;;;;;;;;;;;;;;;;;;;;;;32230:34;;32148:124;;;:::o;29776:117::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29880:5:::1;29857:14;:20;29872:4;29857:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29776:117:::0;;:::o;25163:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;28112:117::-;28178:7;28205;:16;28213:7;28205:16;;;;;;;;;;;;;;;;28198:23;;28112:117;;;:::o;15296:148::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15403:1:::1;15366:40;;15387:6;::::0;::::1;;;;;;;;15366:40;;;;;;;;;;;;15434:1;15417:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15296:148::o:0;26065:55::-;;;;:::o;29899:129::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29973:4:::1;29954:16;;:23;;;;;;;;;;;;;;;;;;30008:12;29988:17;:32;;;;29899:129::o:0;14654:79::-;14692:7;14719:6;;;;;;;;;;;14712:13;;14654:79;:::o;26218:57::-;;;;:::o;29655:114::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29756:5:::1;29724:20;:29;29745:7;29724:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29655:114:::0;:::o;27823:87::-;27862:13;27895:7;27888:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27823:87;:::o;28237:199::-;28342:4;28364:42;28374:12;:10;:12::i;:::-;28388:9;28399:6;28364:9;:42::i;:::-;28424:4;28417:11;;28237:199;;;;:::o;30405:171::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30506:8:::1;30482:21;;:32;;;;;;;;;;;;;;;;;;30530:38;30559:8;30530:38;;;;;;:::i;:::-;;;;;;;;30405:171:::0;:::o;32280:128::-;32347:4;32371:20;:29;32392:7;32371:29;;;;;;;;;;;;;;;;;;;;;;;;;32364:36;;32280:128;;;:::o;28444:184::-;28561:7;28593:11;:18;28605:5;28593:18;;;;;;;;;;;;;;;:27;28612:7;28593:27;;;;;;;;;;;;;;;;28586:34;;28444:184;;;;:::o;29414:110::-;14876:12;:10;:12::i;:::-;14866:22;;:6;;;;;;;;;;:22;;;14858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29511:5:::1;29481:18;:27;29500:7;29481:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29414:110:::0;:::o;5142:132::-;5200:7;5227:39;5231:1;5234;5227:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5220:46;;5142:132;;;;:::o;4647:252::-;4705:7;4736:1;4731;:6;4727:47;;4761:1;4754:8;;;;4727:47;4786:9;4802:1;4798;:5;;;;:::i;:::-;4786:17;;4831:1;4826;4822;:5;;;;:::i;:::-;:10;4814:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4890:1;4883:8;;;4647:252;;;;;:::o;7402:115::-;7455:15;7498:10;7483:26;;7402:115;:::o;32416:371::-;32560:1;32543:19;;:5;:19;;;32535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32641:1;32622:21;;:7;:21;;;32614:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32725:6;32695:11;:18;32707:5;32695:18;;;;;;;;;;;;;;;:27;32714:7;32695:27;;;;;;;;;;;;;;;:36;;;;32763:7;32747:32;;32756:5;32747:32;;;32772:6;32747:32;;;;;;:::i;:::-;;;;;;;;32416:371;;;:::o;32795:2634::-;32933:1;32917:18;;:4;:18;;;32909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33010:1;32996:16;;:2;:16;;;32988:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33080:1;33071:6;:10;33063:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33161:14;:20;33176:4;33161:20;;;;;;;;;;;;;;;;;;;;;;;;;33160:21;:44;;;;;33186:14;:18;33201:2;33186:18;;;;;;;;;;;;;;;;;;;;;;;;;33185:19;33160:44;33138:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;33274:16;;;;;;;;;;;:44;;;;33294:18;:24;33313:4;33294:24;;;;;;;;;;;;;;;;;;;;;;;;;33274:44;33265:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;33684:28;33715:24;33733:4;33715:9;:24::i;:::-;33684:55;;33780:12;;33756:20;:36;33752:104;;33832:12;;33809:35;;33752:104;33868:24;33932:29;;33895:20;:66;;33868:93;;33990:19;:53;;;;;34027:16;;;;;;;;;;;34026:17;33990:53;:91;;;;;34068:13;34060:21;;:4;:21;;;;33990:91;:129;;;;;34098:21;;;;;;;;;;;33990:129;33972:318;;;34169:29;;34146:52;;34242:36;34257:20;34242:14;:36::i;:::-;33972:318;34363:12;34378:4;34363:19;;34483:18;:24;34502:4;34483:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;34511:18;:22;34530:2;34511:22;;;;;;;;;;;;;;;;;;;;;;;;;34483:50;34479:98;;;34560:5;34550:15;;34479:98;34601:7;34597:716;;;34630:20;:26;34651:4;34630:26;;;;;;;;;;;;;;;;;;;;;;;;;34629:27;:56;;;;;34661:20;:24;34682:2;34661:24;;;;;;;;;;;;;;;;;;;;;;;;;34660:25;34629:56;34625:677;;;34746:12;;34736:6;:22;;34706:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;26015:1;34902:30;;:17;;:30;;;;:::i;:::-;34887:12;:45;34883:122;;;34978:4;34957:14;:18;34972:2;34957:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;34883:122;35051:13;35045:19;;:2;:19;;;35041:228;;35149:14;;35132:13;35142:2;35132:9;:13::i;:::-;35123:6;:22;;;;:::i;:::-;:40;;35089:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;35041:228;34625:677;34597:716;35380:41;35395:4;35401:2;35405:6;35413:7;35380:14;:41::i;:::-;32898:2531;;;32795:2634;;;:::o;4162:226::-;4282:7;4315:1;4310;:6;;4318:12;4302:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4342:9;4358:1;4354;:5;;;;:::i;:::-;4342:17;;4379:1;4372:8;;;4162:226;;;;;:::o;5770:312::-;5890:7;5922:1;5918;:5;5925:12;5910:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5949:9;5965:1;5961;:5;;;;:::i;:::-;5949:17;;6073:1;6066:8;;;5770:312;;;;;:::o;35437:1195::-;26601:4;26582:16;;:23;;;;;;;;;;;;;;;;;;35559:19:::1;35661:1;35640:7;:17;;;;;;;;;;;;35621:6;:16;;;;;;;;;;;;35601:7;:17;;;;;;;;;;;;35582:6;:16;;;;;;;;;;;;:36;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;35581:81;;;;:::i;:::-;35559:103;;;;35673:32;35760:11;35738:7;:17;;;;;;;;;;;;35719:6;:16;;;;;;;;;;;;:36;;;;:::i;:::-;35709:47;;:6;:47;;;;:::i;:::-;35708:63;;;;:::i;:::-;35673:98;;35782:14;35808:24;35799:6;:33;;;;:::i;:::-;35782:50;;35845:22;35870:21;35845:46;;35904:24;35921:6;35904:16;:24::i;:::-;35941:20;35988:14;35964:21;:38;;;;:::i;:::-;35941:61;;36013:19;36085:7;:17;;;;;;;;;;;;36066:6;:16;;;;;;;;;;;;:36;;;;:::i;:::-;36051:52;;:11;:52;;;;:::i;:::-;36035:12;:69;;;;:::i;:::-;36013:91;;36115:29;36181:7;:17;;;;;;;;;;;;36162:6;:16;;;;;;;;;;;;:36;;;;:::i;:::-;36147:52;;:11;:52;;;;:::i;:::-;36115:84;;36240:1;36216:21;:25;36212:160;;;36299:61;36312:24;36338:21;36299:12;:61::i;:::-;36212:160;36418:20;36479:7;:17;;;;;;;;;;;;36460:6;:16;;;;;;;;;;;;:36;;;;:::i;:::-;36441:56;;36455:1;36441:11;:15;;;;:::i;:::-;:56;;;;:::i;:::-;36418:79;;36538:1;36523:12;:16;36519:98;;;36564:17;;;;;;;;;;;36556:35;;:49;36592:12;36556:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36519:98;35497:1135;;;;;;;;26647:5:::0;26628:16;;:24;;;;;;;;;;;;;;;;;;35437:1195;:::o;37837:472::-;37992:7;37988:230;;;38016:14;:12;:14::i;:::-;38059:13;38049:23;;:6;:23;;;38045:72;;38093:8;:6;:8::i;:::-;38045:72;38148:13;38135:26;;:9;:26;;;38131:76;;38182:9;:7;:9::i;:::-;38131:76;37988:230;38230:44;38248:6;38256:9;38267:6;38230:17;:44::i;:::-;38287:14;:12;:14::i;:::-;37837:472;;;;:::o;36640:589::-;36766:21;36804:1;36790:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36766:40;;36835:4;36817;36822:1;36817:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36861:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36851:4;36856:1;36851:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36896:62;36913:4;36928:15;36946:11;36896:8;:62::i;:::-;36997:15;:66;;;37078:11;37104:1;37148:4;37175;37195:15;36997:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36695:534;36640:589;:::o;37237:519::-;37385:62;37402:4;37417:15;37435:11;37385:8;:62::i;:::-;37490:15;:31;;;37529:9;37562:4;37582:11;37608:1;37651;37702:4;37722:15;37490:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37237:519;;:::o;31762:103::-;31821:1;31805:13;;:17;;;;;;;;;;;;;;;;;;31849:1;31833:13;;:17;;;;;;;;;;;;;;;;;;31762:103::o;31873:128::-;31926:6;:16;;;;;;;;;;;;31910:13;;:32;;;;;;;;;;;;;;;;;;31969:6;:16;;;;;;;;;;;;31953:13;;:32;;;;;;;;;;;;;;;;;;31873:128::o;32009:131::-;32063:7;:17;;;;;;;;;;;;32047:13;;:33;;;;;;;;;;;;;;;;;;32107:7;:17;;;;;;;;;;;;32091:13;;:33;;;;;;;;;;;;;;;;;;32009:131::o;38317:536::-;38464:23;38502:18;38535:15;38564:20;38576:7;38564:11;:20::i;:::-;38449:135;;;;;;38615:28;38635:7;38615;:15;38623:6;38615:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38597:7;:15;38605:6;38597:15;;;;;;;;;;;;;;;:46;;;;38675:39;38698:15;38675:7;:18;38683:9;38675:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38654:7;:18;38662:9;38654:18;;;;;;;;;;;;;;;:60;;;;38725:26;38740:10;38725:14;:26::i;:::-;38762:23;38777:7;38762:14;:23::i;:::-;38818:9;38801:44;;38810:6;38801:44;;;38829:15;38801:44;;;;;;:::i;:::-;;;;;;;;38438:415;;;38317:536;;;:::o;30678:429::-;30779:7;30801;30823;30858:18;30879:30;30901:7;30879:21;:30::i;:::-;30858:51;;30920:15;30938:30;30960:7;30938:21;:30::i;:::-;30920:48;;30979:23;31005:36;31033:7;31005:23;31017:10;31005:7;:11;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;30979:62;;31062:15;31079:10;31091:7;31054:45;;;;;;;;;30678:429;;;;;:::o;3723:136::-;3781:7;3808:43;3812:1;3815;3808:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3801:50;;3723:136;;;;:::o;3259:181::-;3317:7;3337:9;3353:1;3349;:5;;;;:::i;:::-;3337:17;;3378:1;3373;:6;;3365:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3431:1;3424:8;;;3259:181;;;;:::o;31115:134::-;31203:38;31230:10;31203:7;:22;31219:4;31203:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;31178:7;:22;31194:4;31178:22;;;;;;;;;;;;;;;:63;;;;31115:134;:::o;31257:128::-;31342:35;31369:7;31342;:22;31358:4;31342:22;;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;31317:7;:22;31333:4;31317:22;;;;;;;;;;;;;;;:60;;;;31257:128;:::o;31393:174::-;31490:7;31522:37;31553:5;31522:26;31534:13;;;;;;;;;;;31522:26;;:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;31515:44;;31393:174;;;:::o;31575:::-;31672:7;31704:37;31735:5;31704:26;31716:13;;;;;;;;;;;31704:26;;:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;31697:44;;31575:174;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:316::-;6059:4;6097:2;6086:9;6082:18;6074:26;;6110:67;6174:1;6163:9;6159:17;6150:6;6110:67;:::i;:::-;6187:68;6251:2;6240:9;6236:18;6227:6;6187:68;:::i;:::-;5946:316;;;;;:::o;6268:214::-;6357:4;6395:2;6384:9;6380:18;6372:26;;6408:67;6472:1;6461:9;6457:17;6448:6;6408:67;:::i;:::-;6268:214;;;;:::o;6488:118::-;6559:22;6575:5;6559:22;:::i;:::-;6552:5;6549:33;6539:61;;6596:1;6593;6586:12;6539:61;6488:118;:::o;6612:135::-;6656:5;6694:6;6681:20;6672:29;;6710:31;6735:5;6710:31;:::i;:::-;6612:135;;;;:::o;6753:749::-;6831:6;6839;6847;6855;6904:3;6892:9;6883:7;6879:23;6875:33;6872:120;;;6911:79;;:::i;:::-;6872:120;7031:1;7056:51;7099:7;7090:6;7079:9;7075:22;7056:51;:::i;:::-;7046:61;;7002:115;7156:2;7182:51;7225:7;7216:6;7205:9;7201:22;7182:51;:::i;:::-;7172:61;;7127:116;7282:2;7308:51;7351:7;7342:6;7331:9;7327:22;7308:51;:::i;:::-;7298:61;;7253:116;7408:2;7434:51;7477:7;7468:6;7457:9;7453:22;7434:51;:::i;:::-;7424:61;;7379:116;6753:749;;;;;;;:::o;7508:118::-;7595:24;7613:5;7595:24;:::i;:::-;7590:3;7583:37;7508:118;;:::o;7632:222::-;7725:4;7763:2;7752:9;7748:18;7740:26;;7776:71;7844:1;7833:9;7829:17;7820:6;7776:71;:::i;:::-;7632:222;;;;:::o;7860:116::-;7930:21;7945:5;7930:21;:::i;:::-;7923:5;7920:32;7910:60;;7966:1;7963;7956:12;7910:60;7860:116;:::o;7982:133::-;8025:5;8063:6;8050:20;8041:29;;8079:30;8103:5;8079:30;:::i;:::-;7982:133;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:323::-;8651:6;8700:2;8688:9;8679:7;8675:23;8671:32;8668:119;;;8706:79;;:::i;:::-;8668:119;8826:1;8851:50;8893:7;8884:6;8873:9;8869:22;8851:50;:::i;:::-;8841:60;;8797:114;8595:323;;;;:::o;8924:474::-;8992:6;9000;9049:2;9037:9;9028:7;9024:23;9020:32;9017:119;;;9055:79;;:::i;:::-;9017:119;9175:1;9200:53;9245:7;9236:6;9225:9;9221:22;9200:53;:::i;:::-;9190:63;;9146:117;9302:2;9328:53;9373:7;9364:6;9353:9;9349:22;9328:53;:::i;:::-;9318:63;;9273:118;8924:474;;;;;:::o;9404:180::-;9452:77;9449:1;9442:88;9549:4;9546:1;9539:15;9573:4;9570:1;9563:15;9590:320;9634:6;9671:1;9665:4;9661:12;9651:22;;9718:1;9712:4;9708:12;9739:18;9729:81;;9795:4;9787:6;9783:17;9773:27;;9729:81;9857:2;9849:6;9846:14;9826:18;9823:38;9820:84;;9876:18;;:::i;:::-;9820:84;9641:269;9590:320;;;:::o;9916:182::-;10056:34;10052:1;10044:6;10040:14;10033:58;9916:182;:::o;10104:366::-;10246:3;10267:67;10331:2;10326:3;10267:67;:::i;:::-;10260:74;;10343:93;10432:3;10343:93;:::i;:::-;10461:2;10456:3;10452:12;10445:19;;10104:366;;;:::o;10476:419::-;10642:4;10680:2;10669:9;10665:18;10657:26;;10729:9;10723:4;10719:20;10715:1;10704:9;10700:17;10693:47;10757:131;10883:4;10757:131;:::i;:::-;10749:139;;10476:419;;;:::o;10901:180::-;10949:77;10946:1;10939:88;11046:4;11043:1;11036:15;11070:4;11067:1;11060:15;11087:410;11127:7;11150:20;11168:1;11150:20;:::i;:::-;11145:25;;11184:20;11202:1;11184:20;:::i;:::-;11179:25;;11239:1;11236;11232:9;11261:30;11279:11;11261:30;:::i;:::-;11250:41;;11440:1;11431:7;11427:15;11424:1;11421:22;11401:1;11394:9;11374:83;11351:139;;11470:18;;:::i;:::-;11351:139;11135:362;11087:410;;;;:::o;11503:180::-;11551:77;11548:1;11541:88;11648:4;11645:1;11638:15;11672:4;11669:1;11662:15;11689:185;11729:1;11746:20;11764:1;11746:20;:::i;:::-;11741:25;;11780:20;11798:1;11780:20;:::i;:::-;11775:25;;11819:1;11809:35;;11824:18;;:::i;:::-;11809:35;11866:1;11863;11859:9;11854:14;;11689:185;;;;:::o;11880:220::-;12020:34;12016:1;12008:6;12004:14;11997:58;12089:3;12084:2;12076:6;12072:15;12065:28;11880:220;:::o;12106:366::-;12248:3;12269:67;12333:2;12328:3;12269:67;:::i;:::-;12262:74;;12345:93;12434:3;12345:93;:::i;:::-;12463:2;12458:3;12454:12;12447:19;;12106:366;;;:::o;12478:419::-;12644:4;12682:2;12671:9;12667:18;12659:26;;12731:9;12725:4;12721:20;12717:1;12706:9;12702:17;12695:47;12759:131;12885:4;12759:131;:::i;:::-;12751:139;;12478:419;;;:::o;12903:223::-;13043:34;13039:1;13031:6;13027:14;13020:58;13112:6;13107:2;13099:6;13095:15;13088:31;12903:223;:::o;13132:366::-;13274:3;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13371:93;13460:3;13371:93;:::i;:::-;13489:2;13484:3;13480:12;13473:19;;13132:366;;;:::o;13504:419::-;13670:4;13708:2;13697:9;13693:18;13685:26;;13757:9;13751:4;13747:20;13743:1;13732:9;13728:17;13721:47;13785:131;13911:4;13785:131;:::i;:::-;13777:139;;13504:419;;;:::o;13929:221::-;14069:34;14065:1;14057:6;14053:14;14046:58;14138:4;14133:2;14125:6;14121:15;14114:29;13929:221;:::o;14156:366::-;14298:3;14319:67;14383:2;14378:3;14319:67;:::i;:::-;14312:74;;14395:93;14484:3;14395:93;:::i;:::-;14513:2;14508:3;14504:12;14497:19;;14156:366;;;:::o;14528:419::-;14694:4;14732:2;14721:9;14717:18;14709:26;;14781:9;14775:4;14771:20;14767:1;14756:9;14752:17;14745:47;14809:131;14935:4;14809:131;:::i;:::-;14801:139;;14528:419;;;:::o;14953:224::-;15093:34;15089:1;15081:6;15077:14;15070:58;15162:7;15157:2;15149:6;15145:15;15138:32;14953:224;:::o;15183:366::-;15325:3;15346:67;15410:2;15405:3;15346:67;:::i;:::-;15339:74;;15422:93;15511:3;15422:93;:::i;:::-;15540:2;15535:3;15531:12;15524:19;;15183:366;;;:::o;15555:419::-;15721:4;15759:2;15748:9;15744:18;15736:26;;15808:9;15802:4;15798:20;15794:1;15783:9;15779:17;15772:47;15836:131;15962:4;15836:131;:::i;:::-;15828:139;;15555:419;;;:::o;15980:222::-;16120:34;16116:1;16108:6;16104:14;16097:58;16189:5;16184:2;16176:6;16172:15;16165:30;15980:222;:::o;16208:366::-;16350:3;16371:67;16435:2;16430:3;16371:67;:::i;:::-;16364:74;;16447:93;16536:3;16447:93;:::i;:::-;16565:2;16560:3;16556:12;16549:19;;16208:366;;;:::o;16580:419::-;16746:4;16784:2;16773:9;16769:18;16761:26;;16833:9;16827:4;16823:20;16819:1;16808:9;16804:17;16797:47;16861:131;16987:4;16861:131;:::i;:::-;16853:139;;16580:419;;;:::o;17005:228::-;17145:34;17141:1;17133:6;17129:14;17122:58;17214:11;17209:2;17201:6;17197:15;17190:36;17005:228;:::o;17239:366::-;17381:3;17402:67;17466:2;17461:3;17402:67;:::i;:::-;17395:74;;17478:93;17567:3;17478:93;:::i;:::-;17596:2;17591:3;17587:12;17580:19;;17239:366;;;:::o;17611:419::-;17777:4;17815:2;17804:9;17800:18;17792:26;;17864:9;17858:4;17854:20;17850:1;17839:9;17835:17;17828:47;17892:131;18018:4;17892:131;:::i;:::-;17884:139;;17611:419;;;:::o;18036:172::-;18176:24;18172:1;18164:6;18160:14;18153:48;18036:172;:::o;18214:366::-;18356:3;18377:67;18441:2;18436:3;18377:67;:::i;:::-;18370:74;;18453:93;18542:3;18453:93;:::i;:::-;18571:2;18566:3;18562:12;18555:19;;18214:366;;;:::o;18586:419::-;18752:4;18790:2;18779:9;18775:18;18767:26;;18839:9;18833:4;18829:20;18825:1;18814:9;18810:17;18803:47;18867:131;18993:4;18867:131;:::i;:::-;18859:139;;18586:419;;;:::o;19011:173::-;19151:25;19147:1;19139:6;19135:14;19128:49;19011:173;:::o;19190:366::-;19332:3;19353:67;19417:2;19412:3;19353:67;:::i;:::-;19346:74;;19429:93;19518:3;19429:93;:::i;:::-;19547:2;19542:3;19538:12;19531:19;;19190:366;;;:::o;19562:419::-;19728:4;19766:2;19755:9;19751:18;19743:26;;19815:9;19809:4;19805:20;19801:1;19790:9;19786:17;19779:47;19843:131;19969:4;19843:131;:::i;:::-;19835:139;;19562:419;;;:::o;19987:227::-;20127:34;20123:1;20115:6;20111:14;20104:58;20196:10;20191:2;20183:6;20179:15;20172:35;19987:227;:::o;20220:366::-;20362:3;20383:67;20447:2;20442:3;20383:67;:::i;:::-;20376:74;;20459:93;20548:3;20459:93;:::i;:::-;20577:2;20572:3;20568:12;20561:19;;20220:366;;;:::o;20592:419::-;20758:4;20796:2;20785:9;20781:18;20773:26;;20845:9;20839:4;20835:20;20831:1;20820:9;20816:17;20809:47;20873:131;20999:4;20873:131;:::i;:::-;20865:139;;20592:419;;;:::o;21017:191::-;21057:3;21076:20;21094:1;21076:20;:::i;:::-;21071:25;;21110:20;21128:1;21110:20;:::i;:::-;21105:25;;21153:1;21150;21146:9;21139:16;;21174:3;21171:1;21168:10;21165:36;;;21181:18;;:::i;:::-;21165:36;21017:191;;;;:::o;21214:221::-;21354:34;21350:1;21342:6;21338:14;21331:58;21423:4;21418:2;21410:6;21406:15;21399:29;21214:221;:::o;21441:366::-;21583:3;21604:67;21668:2;21663:3;21604:67;:::i;:::-;21597:74;;21680:93;21769:3;21680:93;:::i;:::-;21798:2;21793:3;21789:12;21782:19;;21441:366;;;:::o;21813:419::-;21979:4;22017:2;22006:9;22002:18;21994:26;;22066:9;22060:4;22056:20;22052:1;22041:9;22037:17;22030:47;22094:131;22220:4;22094:131;:::i;:::-;22086:139;;21813:419;;;:::o;22238:194::-;22278:4;22298:20;22316:1;22298:20;:::i;:::-;22293:25;;22332:20;22350:1;22332:20;:::i;:::-;22327:25;;22376:1;22373;22369:9;22361:17;;22400:1;22394:4;22391:11;22388:37;;;22405:18;;:::i;:::-;22388:37;22238:194;;;;:::o;22438:188::-;22476:3;22495:18;22511:1;22495:18;:::i;:::-;22490:23;;22527:18;22543:1;22527:18;:::i;:::-;22522:23;;22568:1;22565;22561:9;22554:16;;22591:4;22586:3;22583:13;22580:39;;;22599:18;;:::i;:::-;22580:39;22438:188;;;;:::o;22632:271::-;22670:7;22693:18;22709:1;22693:18;:::i;:::-;22688:23;;22725:18;22741:1;22725:18;:::i;:::-;22720:23;;22778:1;22775;22771:9;22800:28;22816:11;22800:28;:::i;:::-;22789:39;;22860:11;22851:7;22848:24;22838:58;;22876:18;;:::i;:::-;22838:58;22678:225;22632:271;;;;:::o;22909:180::-;22957:77;22954:1;22947:88;23054:4;23051:1;23044:15;23078:4;23075:1;23068:15;23095:180;23143:77;23140:1;23133:88;23240:4;23237:1;23230:15;23264:4;23261:1;23254:15;23281:143;23338:5;23369:6;23363:13;23354:22;;23385:33;23412:5;23385:33;:::i;:::-;23281:143;;;;:::o;23430:351::-;23500:6;23549:2;23537:9;23528:7;23524:23;23520:32;23517:119;;;23555:79;;:::i;:::-;23517:119;23675:1;23700:64;23756:7;23747:6;23736:9;23732:22;23700:64;:::i;:::-;23690:74;;23646:128;23430:351;;;;:::o;23787:85::-;23832:7;23861:5;23850:16;;23787:85;;;:::o;23878:158::-;23936:9;23969:61;23987:42;23996:32;24022:5;23996:32;:::i;:::-;23987:42;:::i;:::-;23969:61;:::i;:::-;23956:74;;23878:158;;;:::o;24042:147::-;24137:45;24176:5;24137:45;:::i;:::-;24132:3;24125:58;24042:147;;:::o;24195:114::-;24262:6;24296:5;24290:12;24280:22;;24195:114;;;:::o;24315:184::-;24414:11;24448:6;24443:3;24436:19;24488:4;24483:3;24479:14;24464:29;;24315:184;;;;:::o;24505:132::-;24572:4;24595:3;24587:11;;24625:4;24620:3;24616:14;24608:22;;24505:132;;;:::o;24643:108::-;24720:24;24738:5;24720:24;:::i;:::-;24715:3;24708:37;24643:108;;:::o;24757:179::-;24826:10;24847:46;24889:3;24881:6;24847:46;:::i;:::-;24925:4;24920:3;24916:14;24902:28;;24757:179;;;;:::o;24942:113::-;25012:4;25044;25039:3;25035:14;25027:22;;24942:113;;;:::o;25091:732::-;25210:3;25239:54;25287:5;25239:54;:::i;:::-;25309:86;25388:6;25383:3;25309:86;:::i;:::-;25302:93;;25419:56;25469:5;25419:56;:::i;:::-;25498:7;25529:1;25514:284;25539:6;25536:1;25533:13;25514:284;;;25615:6;25609:13;25642:63;25701:3;25686:13;25642:63;:::i;:::-;25635:70;;25728:60;25781:6;25728:60;:::i;:::-;25718:70;;25574:224;25561:1;25558;25554:9;25549:14;;25514:284;;;25518:14;25814:3;25807:10;;25215:608;;;25091:732;;;;:::o;25829:831::-;26092:4;26130:3;26119:9;26115:19;26107:27;;26144:71;26212:1;26201:9;26197:17;26188:6;26144:71;:::i;:::-;26225:80;26301:2;26290:9;26286:18;26277:6;26225:80;:::i;:::-;26352:9;26346:4;26342:20;26337:2;26326:9;26322:18;26315:48;26380:108;26483:4;26474:6;26380:108;:::i;:::-;26372:116;;26498:72;26566:2;26555:9;26551:18;26542:6;26498:72;:::i;:::-;26580:73;26648:3;26637:9;26633:19;26624:6;26580:73;:::i;:::-;25829:831;;;;;;;;:::o;26666:807::-;26915:4;26953:3;26942:9;26938:19;26930:27;;26967:71;27035:1;27024:9;27020:17;27011:6;26967:71;:::i;:::-;27048:72;27116:2;27105:9;27101:18;27092:6;27048:72;:::i;:::-;27130:80;27206:2;27195:9;27191:18;27182:6;27130:80;:::i;:::-;27220;27296:2;27285:9;27281:18;27272:6;27220:80;:::i;:::-;27310:73;27378:3;27367:9;27363:19;27354:6;27310:73;:::i;:::-;27393;27461:3;27450:9;27446:19;27437:6;27393:73;:::i;:::-;26666:807;;;;;;;;;:::o;27479:143::-;27536:5;27567:6;27561:13;27552:22;;27583:33;27610:5;27583:33;:::i;:::-;27479:143;;;;:::o;27628:663::-;27716:6;27724;27732;27781:2;27769:9;27760:7;27756:23;27752:32;27749:119;;;27787:79;;:::i;:::-;27749:119;27907:1;27932:64;27988:7;27979:6;27968:9;27964:22;27932:64;:::i;:::-;27922:74;;27878:128;28045:2;28071:64;28127:7;28118:6;28107:9;28103:22;28071:64;:::i;:::-;28061:74;;28016:129;28184:2;28210:64;28266:7;28257:6;28246:9;28242:22;28210:64;:::i;:::-;28200:74;;28155:129;27628:663;;;;;:::o;28297:177::-;28437:29;28433:1;28425:6;28421:14;28414:53;28297:177;:::o;28480:366::-;28622:3;28643:67;28707:2;28702:3;28643:67;:::i;:::-;28636:74;;28719:93;28808:3;28719:93;:::i;:::-;28837:2;28832:3;28828:12;28821:19;;28480:366;;;:::o;28852:419::-;29018:4;29056:2;29045:9;29041:18;29033:26;;29105:9;29099:4;29095:20;29091:1;29080:9;29076:17;29069:47;29133:131;29259:4;29133:131;:::i;:::-;29125:139;;28852:419;;;:::o

Swarm Source

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