ETH Price: $3,413.43 (-1.19%)
Gas: 11 Gwei

Token

Boston Dynamics Inu (BDINU)
 

Overview

Max Total Supply

10,000,000 BDINU

Holders

706

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,656.92806664207249296 BDINU

Value
$0.00
0xAdD055D0456f506544056E54e0B0270715956d1D
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:
BostonDynamicsInu

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Dependency file: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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


// Dependency file: @openzeppelin/contracts/utils/Context.sol


// pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// Dependency file: @openzeppelin/contracts/access/Ownable.sol


// pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/utils/Context.sol";

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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// Dependency file: @openzeppelin/contracts/utils/math/SafeMath.sol


// pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// Dependency file: @openzeppelin/contracts/utils/Address.sol


// pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// Dependency file: contracts/interfaces/IUniswapV2Router02.sol

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        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;
}


// Dependency file: contracts/interfaces/IUniswapV2Factory.sol

// pragma solidity >=0.5.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;
}


// Dependency file: contracts/BaseToken.sol

// pragma solidity =0.8.4;

enum TokenType {
    standard,
    antiBotStandard,
    liquidityGenerator,
    antiBotLiquidityGenerator,
    baby,
    antiBotBaby,
    buybackBaby,
    antiBotBuybackBaby
}

abstract contract BaseToken {
    event TokenCreated(
        address indexed owner,
        address indexed token,
        TokenType tokenType,
        uint256 version
    );
}


// Root file: contracts/liquidity-generator/LiquidityGeneratorToken.sol

pragma solidity >0.8.4;

// import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
// import "@openzeppelin/contracts/access/Ownable.sol";
// import "@openzeppelin/contracts/utils/math/SafeMath.sol";
// import "@openzeppelin/contracts/utils/Address.sol";
// import "contracts/interfaces/IUniswapV2Router02.sol";
// import "contracts/interfaces/IUniswapV2Factory.sol";
// import "contracts/BaseToken.sol";

contract BostonDynamicsInu is IERC20, Ownable, BaseToken {
    using SafeMath for uint256;
    using Address for address;

    uint256 public constant VERSION = 2;

    uint256 public constant MAX_FEE = 10**4 / 4;

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

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

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 public _taxFee;
    uint256 private _previousTaxFee;

    uint256 public _liquidityFee;
    uint256 private _previousLiquidityFee;

    uint256 public _charityFee;
    uint256 private _previousCharityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public _charityAddress;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;

    uint256 private numTokensSellToAddToLiquidity;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyAmountUpdated(uint256 amount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor(
    )  {
        

        _name = "Boston Dynamics Inu";
        _symbol = "BDINU";
        _decimals = 18;

        _tTotal = 10000000 * 10**18;
        _rTotal = (MAX - (MAX % _tTotal));

        _taxFee = 500;
        _previousTaxFee = _taxFee;

        _liquidityFee = 100;
        _previousLiquidityFee = _liquidityFee;

        _charityAddress = 0xa5dEAAb6e955dCF98Bcc028eB42ae3F4cE508173;
        _charityFee = 100;
        _previousCharityFee = _charityFee;

        numTokensSellToAddToLiquidity = _rTotal.div(10**3); 

        swapAndLiquifyEnabled = true;

        _rOwned[owner()] = _rTotal;
        address router_ = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_);
        // 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;

        emit Transfer(address(0), owner(), _tTotal);

        emit TokenCreated(
            owner(),
            address(this),
            TokenType.liquidityGenerator,
            VERSION
        );

    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



    

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

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

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

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

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

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function _takeCharityFee(uint256 tCharity) private {
        if (tCharity > 0) {
            uint256 currentRate = _getRate();
            uint256 rCharity = tCharity.mul(currentRate);
            _rOwned[_charityAddress] = _rOwned[_charityAddress].add(rCharity);
            if (_isExcluded[_charityAddress])
                _tOwned[_charityAddress] = _tOwned[_charityAddress].add(
                    tCharity
                );
            emit Transfer(_msgSender(), _charityAddress, tCharity);
        }
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**4);
    }

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

    function calculateCharityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        if (_charityAddress == address(0)) return 0;
        return _amount.mul(_charityFee).div(10**4);
    }

    function removeAllFee() private {
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousCharityFee = _charityFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _charityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _charityFee = _previousCharityFee;
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

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

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

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

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

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

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

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

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

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            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 (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

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

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

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCharity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeCharityFee(tCharity);
        _reflectFee(rFee, tFee);
        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":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiquifyAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506200003262000026620005ee60201b60201c565b620005f660201b60201c565b6040518060400160405280601381526020017f426f73746f6e2044796e616d69637320496e7500000000000000000000000000815250600a908162000078919062000975565b506040518060400160405280600581526020017f4244494e55000000000000000000000000000000000000000000000000000000815250600b9081620000bf919062000975565b506012600c60006101000a81548160ff021916908360ff1602179055506a084595161401484a00000060078190555060075460001962000100919062000a8b565b6000196200010f919062000af2565b6008819055506101f4600d81905550600d54600e819055506064600f81905550600f5460108190555073a5deaab6e955dcf98bcc028eb42ae3f4ce508173601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064601181905550601154601281905550620001bc6103e8600854620006ba60201b620012191790919060201c565b60168190555060016015806101000a81548160ff02191690831515021790555060085460016000620001f3620006d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000b97565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000b97565b6040518363ffffffff1660e01b81526004016200036e92919062000bda565b6020604051808303816000875af11580156200038e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b4919062000b97565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006200044b620006d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000504620006d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000565919062000c18565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff1662000594620006d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff167f56358b41df5fa59f5639228f0930994cbdde383c8a8fd74e06c04e1deebe3562600280604051620005de92919062000cb5565b60405180910390a3505062000d1a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183620006ca919062000ce2565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200077d57607f821691505b60208210810362000793576200079262000735565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007fd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007be565b620008098683620007be565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000856620008506200084a8462000821565b6200082b565b62000821565b9050919050565b6000819050919050565b620008728362000835565b6200088a62000881826200085d565b848454620007cb565b825550505050565b600090565b620008a162000892565b620008ae81848462000867565b505050565b5b81811015620008d657620008ca60008262000897565b600181019050620008b4565b5050565b601f8211156200092557620008ef8162000799565b620008fa84620007ae565b810160208510156200090a578190505b620009226200091985620007ae565b830182620008b3565b50505b505050565b600082821c905092915050565b60006200094a600019846008026200092a565b1980831691505092915050565b600062000965838362000937565b9150826002028217905092915050565b6200098082620006fb565b67ffffffffffffffff8111156200099c576200099b62000706565b5b620009a8825462000764565b620009b5828285620008da565b600060209050601f831160018114620009ed5760008415620009d8578287015190505b620009e4858262000957565b86555062000a54565b601f198416620009fd8662000799565b60005b8281101562000a275784890151825560018201915060208501945060208101905062000a00565b8683101562000a47578489015162000a43601f89168262000937565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a988262000821565b915062000aa58362000821565b92508262000ab85762000ab762000a5c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aff8262000821565b915062000b0c8362000821565b925082820390508181111562000b275762000b2662000ac3565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b5f8262000b32565b9050919050565b62000b718162000b52565b811462000b7d57600080fd5b50565b60008151905062000b918162000b66565b92915050565b60006020828403121562000bb05762000baf62000b2d565b5b600062000bc08482850162000b80565b91505092915050565b62000bd48162000b52565b82525050565b600060408201905062000bf1600083018562000bc9565b62000c00602083018462000bc9565b9392505050565b62000c128162000821565b82525050565b600060208201905062000c2f600083018462000c07565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6008811062000c785762000c7762000c35565b5b50565b600081905062000c8b8262000c64565b919050565b600062000c9d8262000c7b565b9050919050565b62000caf8162000c90565b82525050565b600060408201905062000ccc600083018562000ca4565b62000cdb602083018462000c07565b9392505050565b600062000cef8262000821565b915062000cfc8362000821565b92508262000d0f5762000d0e62000a5c565b5b828204905092915050565b61421c8062000d2a6000396000f3fe6080604052600436106101c65760003560e01c806349bd5a5e116100f75780638da5cb5b11610095578063bc063e1a11610064578063bc063e1a146106a3578063dd62ed3e146106ce578063f2fde38b1461070b578063ffa1ad7414610734576101cd565b80638da5cb5b146105d357806395d89b41146105fe578063a457c2d714610629578063a9059cbb14610666576101cd565b80636bc87c3a116100d15780636bc87c3a1461051757806370a0823114610542578063715018a61461057f57806388f8202014610596576101cd565b806349bd5a5e146104845780634a74bb02146104af5780635342acb4146104da576101cd565b80632d838119116101645780633b124fe71161013e5780633b124fe7146103c85780633bd5d173146103f357806340f8007a1461041c5780634549b03914610447576101cd565b80632d83811914610323578063313ce56714610360578063395093511461038b576101cd565b80631694505e116101a05780631694505e1461026557806318160ddd1461029057806319a8ac9e146102bb57806323b872dd146102e6576101cd565b806306fdde03146101d2578063095ea7b3146101fd57806313114a9d1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e761075f565b6040516101f491906133ce565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190613489565b6107f1565b60405161023191906134e4565b60405180910390f35b34801561024657600080fd5b5061024f61080f565b60405161025c919061350e565b60405180910390f35b34801561027157600080fd5b5061027a610819565b6040516102879190613588565b60405180910390f35b34801561029c57600080fd5b506102a561083f565b6040516102b2919061350e565b60405180910390f35b3480156102c757600080fd5b506102d0610849565b6040516102dd91906135b2565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906135cd565b61086f565b60405161031a91906134e4565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190613620565b610948565b604051610357919061350e565b60405180910390f35b34801561036c57600080fd5b506103756109b6565b6040516103829190613669565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613489565b6109cd565b6040516103bf91906134e4565b60405180910390f35b3480156103d457600080fd5b506103dd610a80565b6040516103ea919061350e565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613620565b610a86565b005b34801561042857600080fd5b50610431610c02565b60405161043e919061350e565b60405180910390f35b34801561045357600080fd5b5061046e600480360381019061046991906136b0565b610c08565b60405161047b919061350e565b60405180910390f35b34801561049057600080fd5b50610499610c8e565b6040516104a691906135b2565b60405180910390f35b3480156104bb57600080fd5b506104c4610cb4565b6040516104d191906134e4565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906136f0565b610cc5565b60405161050e91906134e4565b60405180910390f35b34801561052357600080fd5b5061052c610d1b565b604051610539919061350e565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906136f0565b610d21565b604051610576919061350e565b60405180910390f35b34801561058b57600080fd5b50610594610e0c565b005b3480156105a257600080fd5b506105bd60048036038101906105b891906136f0565b610e94565b6040516105ca91906134e4565b60405180910390f35b3480156105df57600080fd5b506105e8610eea565b6040516105f591906135b2565b60405180910390f35b34801561060a57600080fd5b50610613610f13565b60405161062091906133ce565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613489565b610fa5565b60405161065d91906134e4565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613489565b611072565b60405161069a91906134e4565b60405180910390f35b3480156106af57600080fd5b506106b8611090565b6040516106c5919061350e565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f0919061371d565b611096565b604051610702919061350e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906136f0565b61111d565b005b34801561074057600080fd5b50610749611214565b604051610756919061350e565b60405180910390f35b6060600a805461076e9061378c565b80601f016020809104026020016040519081016040528092919081815260200182805461079a9061378c565b80156107e75780601f106107bc576101008083540402835291602001916107e7565b820191906000526020600020905b8154815290600101906020018083116107ca57829003601f168201915b5050505050905090565b60006108056107fe61122f565b8484611237565b6001905092915050565b6000600954905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061087c848484611400565b61093d8461088861122f565b6109388560405180606001604052806028815260200161419a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108ee61122f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9092919063ffffffff16565b611237565b600190509392505050565b600060085482111561098f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109869061382f565b60405180910390fd5b60006109996116f0565b90506109ae818461121990919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610a766109da61122f565b84610a7185600360006109eb61122f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b611237565b6001905092915050565b600d5481565b6000610a9061122f565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b16906138c1565b60405180910390fd5b6000610b2a83611731565b5050505050509050610b8481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610bdc8160085461179990919063ffffffff16565b600881905550610bf78360095461171b90919063ffffffff16565b600981905550505050565b60115481565b6000600754831115610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c469061392d565b60405180910390fd5b81610c70576000610c5f84611731565b505050505050905080915050610c88565b6000610c7b84611731565b5050505050915050809150505b92915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dbc57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e07565b610e04600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610948565b90505b919050565b610e1461122f565b73ffffffffffffffffffffffffffffffffffffffff16610e32610eea565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613999565b60405180910390fd5b610e9260006117af565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054610f229061378c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4e9061378c565b8015610f9b5780601f10610f7057610100808354040283529160200191610f9b565b820191906000526020600020905b815481529060010190602001808311610f7e57829003601f168201915b5050505050905090565b6000611068610fb261122f565b84611063856040518060600160405280602581526020016141c26025913960036000610fdc61122f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9092919063ffffffff16565b611237565b6001905092915050565b600061108661107f61122f565b8484611400565b6001905092915050565b6109c481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61112561122f565b73ffffffffffffffffffffffffffffffffffffffff16611143610eea565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613999565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613a2b565b60405180910390fd5b611211816117af565b50565b600281565b600081836112279190613aa9565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90613b4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613bde565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113f3919061350e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613c70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590613d02565b60405180910390fd5b60008111611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151890613d94565b60405180910390fd5b600061152c30610d21565b9050600060165482101590508080156115525750601560149054906101000a900460ff16155b80156115ac5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156115c2575060158054906101000a900460ff165b156115d65760165491506115d582611873565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061167d5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561168757600090505b61169386868684611949565b505050505050565b60008383111582906116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da91906133ce565b60405180910390fd5b5082840390509392505050565b60008060006116fd611c5a565b91509150611714818361121990919063ffffffff16565b9250505090565b600081836117299190613db4565b905092915050565b600080600080600080600080600080600061174b8c611f0d565b9350935093509350600080600061176c8f8787876117676116f0565b611f8c565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836117a79190613de8565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601560146101000a81548160ff02191690831515021790555060006118a460028361121990919063ffffffff16565b905060006118bb828461179990919063ffffffff16565b905060004790506118cb83612040565b60006118e0824761179990919063ffffffff16565b90506118ec8382612283565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161191f93929190613e1c565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b8061195757611956612363565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119fa5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a0f57611a0a848484612398565b611c46565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ab25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ac757611ac2848484612606565b611c45565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b6b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b8057611b7b848484612874565b611c44565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c225750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c3757611c32848484612a4d565b611c43565b611c42848484612874565b5b5b5b5b80611c5457611c53612d50565b5b50505050565b600080600060085490506000600754905060005b600680549050811015611ed057826001600060068481548110611c9457611c93613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611d825750816002600060068481548110611d1a57611d19613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15611d995760085460075494509450505050611f09565b611e296001600060068481548110611db457611db3613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461179990919063ffffffff16565b9250611ebb6002600060068481548110611e4657611e45613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361179990919063ffffffff16565b91508080611ec890613e82565b915050611c6e565b50611ee860075460085461121990919063ffffffff16565b821015611f0057600854600754935093505050611f09565b81819350935050505b9091565b6000806000806000611f1e86612d6d565b90506000611f2b87612d9f565b90506000611f3888612dd1565b90506000611f7382611f6585611f57888e61179990919063ffffffff16565b61179990919063ffffffff16565b61179990919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080611fa5858a612e6290919063ffffffff16565b90506000611fbc868a612e6290919063ffffffff16565b90506000611fd3878a612e6290919063ffffffff16565b90506000611fea888a612e6290919063ffffffff16565b905060006120258261201785612009888a61179990919063ffffffff16565b61179990919063ffffffff16565b61179990919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff81111561205d5761205c613eca565b5b60405190808252806020026020018201604052801561208b5781602001602082028036833780820191505090505b50905030816000815181106120a3576120a2613e53565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561214a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216e9190613f0e565b8160018151811061218257612181613e53565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121e930601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611237565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161224d959493929190614034565b600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050505050565b6122b030601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611237565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016123199695949392919061408e565b60606040518083038185885af1158015612337573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061235c9190614104565b5050505050565b600d54600e81905550600f546010819055506011546012819055506000600d819055506000600f819055506000601181905550565b60008060008060008060006123ac88611731565b965096509650965096509650965061240c88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124a187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061253686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061258282612e78565b61258b8161301d565b6125958584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516125f2919061350e565b60405180910390a350505050505050505050565b600080600080600080600061261a88611731565b965096509650965096509650965061267a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061270f84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127f082612e78565b6127f98161301d565b6128038584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612860919061350e565b60405180910390a350505050505050505050565b600080600080600080600061288888611731565b96509650965096509650965096506128e887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129c982612e78565b6129d28161301d565b6129dc8584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612a39919061350e565b60405180910390a350505050505050505050565b6000806000806000806000612a6188611731565b9650965096509650965096509650612ac188600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b5687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612beb84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c8086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ccc82612e78565b612cd58161301d565b612cdf8584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d3c919061350e565b60405180910390a350505050505050505050565b600e54600d81905550601054600f81905550601254601181905550565b6000612d98612710612d8a600d5485612e6290919063ffffffff16565b61121990919063ffffffff16565b9050919050565b6000612dca612710612dbc600f5485612e6290919063ffffffff16565b61121990919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612e315760009050612e5d565b612e5a612710612e4c60115485612e6290919063ffffffff16565b61121990919063ffffffff16565b90505b919050565b60008183612e709190614157565b905092915050565b6000612e826116f0565b90506000612e998284612e6290919063ffffffff16565b9050612eed81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561301857612fd483600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60008111156133015760006130306116f0565b905060006130478284612e6290919063ffffffff16565b90506130bd8160016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b60016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132705761320a8360026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b60026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132b161122f565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516132f6919061350e565b60405180910390a350505b50565b6133198260085461179990919063ffffffff16565b6008819055506133348160095461171b90919063ffffffff16565b6009819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561337857808201518184015260208101905061335d565b60008484015250505050565b6000601f19601f8301169050919050565b60006133a08261333e565b6133aa8185613349565b93506133ba81856020860161335a565b6133c381613384565b840191505092915050565b600060208201905081810360008301526133e88184613395565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613420826133f5565b9050919050565b61343081613415565b811461343b57600080fd5b50565b60008135905061344d81613427565b92915050565b6000819050919050565b61346681613453565b811461347157600080fd5b50565b6000813590506134838161345d565b92915050565b600080604083850312156134a05761349f6133f0565b5b60006134ae8582860161343e565b92505060206134bf85828601613474565b9150509250929050565b60008115159050919050565b6134de816134c9565b82525050565b60006020820190506134f960008301846134d5565b92915050565b61350881613453565b82525050565b600060208201905061352360008301846134ff565b92915050565b6000819050919050565b600061354e613549613544846133f5565b613529565b6133f5565b9050919050565b600061356082613533565b9050919050565b600061357282613555565b9050919050565b61358281613567565b82525050565b600060208201905061359d6000830184613579565b92915050565b6135ac81613415565b82525050565b60006020820190506135c760008301846135a3565b92915050565b6000806000606084860312156135e6576135e56133f0565b5b60006135f48682870161343e565b93505060206136058682870161343e565b925050604061361686828701613474565b9150509250925092565b600060208284031215613636576136356133f0565b5b600061364484828501613474565b91505092915050565b600060ff82169050919050565b6136638161364d565b82525050565b600060208201905061367e600083018461365a565b92915050565b61368d816134c9565b811461369857600080fd5b50565b6000813590506136aa81613684565b92915050565b600080604083850312156136c7576136c66133f0565b5b60006136d585828601613474565b92505060206136e68582860161369b565b9150509250929050565b600060208284031215613706576137056133f0565b5b60006137148482850161343e565b91505092915050565b60008060408385031215613734576137336133f0565b5b60006137428582860161343e565b92505060206137538582860161343e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137a457607f821691505b6020821081036137b7576137b661375d565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613819602a83613349565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006138ab602c83613349565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000613917601f83613349565b9150613922826138e1565b602082019050919050565b600060208201905081810360008301526139468161390a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613983602083613349565b915061398e8261394d565b602082019050919050565b600060208201905081810360008301526139b281613976565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a15602683613349565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ab482613453565b9150613abf83613453565b925082613acf57613ace613a4b565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b36602483613349565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bc8602283613349565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c5a602583613349565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cec602383613349565b9150613cf782613c90565b604082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613d7e602983613349565b9150613d8982613d22565b604082019050919050565b60006020820190508181036000830152613dad81613d71565b9050919050565b6000613dbf82613453565b9150613dca83613453565b9250828201905080821115613de257613de1613a7a565b5b92915050565b6000613df382613453565b9150613dfe83613453565b9250828203905081811115613e1657613e15613a7a565b5b92915050565b6000606082019050613e3160008301866134ff565b613e3e60208301856134ff565b613e4b60408301846134ff565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613e8d82613453565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ebf57613ebe613a7a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613f0881613427565b92915050565b600060208284031215613f2457613f236133f0565b5b6000613f3284828501613ef9565b91505092915050565b6000819050919050565b6000613f60613f5b613f5684613f3b565b613529565b613453565b9050919050565b613f7081613f45565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613fab81613415565b82525050565b6000613fbd8383613fa2565b60208301905092915050565b6000602082019050919050565b6000613fe182613f76565b613feb8185613f81565b9350613ff683613f92565b8060005b8381101561402757815161400e8882613fb1565b975061401983613fc9565b925050600181019050613ffa565b5085935050505092915050565b600060a08201905061404960008301886134ff565b6140566020830187613f67565b81810360408301526140688186613fd6565b905061407760608301856135a3565b61408460808301846134ff565b9695505050505050565b600060c0820190506140a360008301896135a3565b6140b060208301886134ff565b6140bd6040830187613f67565b6140ca6060830186613f67565b6140d760808301856135a3565b6140e460a08301846134ff565b979650505050505050565b6000815190506140fe8161345d565b92915050565b60008060006060848603121561411d5761411c6133f0565b5b600061412b868287016140ef565b935050602061413c868287016140ef565b925050604061414d868287016140ef565b9150509250925092565b600061416282613453565b915061416d83613453565b925082820261417b81613453565b9150828204841483151761419257614191613a7a565b5b509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206c3613cbbe0bcd89f5bde8ba06f431a62dda29e11fb271805d7088b3f96baf8f64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c806349bd5a5e116100f75780638da5cb5b11610095578063bc063e1a11610064578063bc063e1a146106a3578063dd62ed3e146106ce578063f2fde38b1461070b578063ffa1ad7414610734576101cd565b80638da5cb5b146105d357806395d89b41146105fe578063a457c2d714610629578063a9059cbb14610666576101cd565b80636bc87c3a116100d15780636bc87c3a1461051757806370a0823114610542578063715018a61461057f57806388f8202014610596576101cd565b806349bd5a5e146104845780634a74bb02146104af5780635342acb4146104da576101cd565b80632d838119116101645780633b124fe71161013e5780633b124fe7146103c85780633bd5d173146103f357806340f8007a1461041c5780634549b03914610447576101cd565b80632d83811914610323578063313ce56714610360578063395093511461038b576101cd565b80631694505e116101a05780631694505e1461026557806318160ddd1461029057806319a8ac9e146102bb57806323b872dd146102e6576101cd565b806306fdde03146101d2578063095ea7b3146101fd57806313114a9d1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e761075f565b6040516101f491906133ce565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190613489565b6107f1565b60405161023191906134e4565b60405180910390f35b34801561024657600080fd5b5061024f61080f565b60405161025c919061350e565b60405180910390f35b34801561027157600080fd5b5061027a610819565b6040516102879190613588565b60405180910390f35b34801561029c57600080fd5b506102a561083f565b6040516102b2919061350e565b60405180910390f35b3480156102c757600080fd5b506102d0610849565b6040516102dd91906135b2565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906135cd565b61086f565b60405161031a91906134e4565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190613620565b610948565b604051610357919061350e565b60405180910390f35b34801561036c57600080fd5b506103756109b6565b6040516103829190613669565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613489565b6109cd565b6040516103bf91906134e4565b60405180910390f35b3480156103d457600080fd5b506103dd610a80565b6040516103ea919061350e565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613620565b610a86565b005b34801561042857600080fd5b50610431610c02565b60405161043e919061350e565b60405180910390f35b34801561045357600080fd5b5061046e600480360381019061046991906136b0565b610c08565b60405161047b919061350e565b60405180910390f35b34801561049057600080fd5b50610499610c8e565b6040516104a691906135b2565b60405180910390f35b3480156104bb57600080fd5b506104c4610cb4565b6040516104d191906134e4565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906136f0565b610cc5565b60405161050e91906134e4565b60405180910390f35b34801561052357600080fd5b5061052c610d1b565b604051610539919061350e565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906136f0565b610d21565b604051610576919061350e565b60405180910390f35b34801561058b57600080fd5b50610594610e0c565b005b3480156105a257600080fd5b506105bd60048036038101906105b891906136f0565b610e94565b6040516105ca91906134e4565b60405180910390f35b3480156105df57600080fd5b506105e8610eea565b6040516105f591906135b2565b60405180910390f35b34801561060a57600080fd5b50610613610f13565b60405161062091906133ce565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613489565b610fa5565b60405161065d91906134e4565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613489565b611072565b60405161069a91906134e4565b60405180910390f35b3480156106af57600080fd5b506106b8611090565b6040516106c5919061350e565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f0919061371d565b611096565b604051610702919061350e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906136f0565b61111d565b005b34801561074057600080fd5b50610749611214565b604051610756919061350e565b60405180910390f35b6060600a805461076e9061378c565b80601f016020809104026020016040519081016040528092919081815260200182805461079a9061378c565b80156107e75780601f106107bc576101008083540402835291602001916107e7565b820191906000526020600020905b8154815290600101906020018083116107ca57829003601f168201915b5050505050905090565b60006108056107fe61122f565b8484611237565b6001905092915050565b6000600954905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061087c848484611400565b61093d8461088861122f565b6109388560405180606001604052806028815260200161419a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108ee61122f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9092919063ffffffff16565b611237565b600190509392505050565b600060085482111561098f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109869061382f565b60405180910390fd5b60006109996116f0565b90506109ae818461121990919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610a766109da61122f565b84610a7185600360006109eb61122f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b611237565b6001905092915050565b600d5481565b6000610a9061122f565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b16906138c1565b60405180910390fd5b6000610b2a83611731565b5050505050509050610b8481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610bdc8160085461179990919063ffffffff16565b600881905550610bf78360095461171b90919063ffffffff16565b600981905550505050565b60115481565b6000600754831115610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c469061392d565b60405180910390fd5b81610c70576000610c5f84611731565b505050505050905080915050610c88565b6000610c7b84611731565b5050505050915050809150505b92915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dbc57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e07565b610e04600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610948565b90505b919050565b610e1461122f565b73ffffffffffffffffffffffffffffffffffffffff16610e32610eea565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613999565b60405180910390fd5b610e9260006117af565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054610f229061378c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4e9061378c565b8015610f9b5780601f10610f7057610100808354040283529160200191610f9b565b820191906000526020600020905b815481529060010190602001808311610f7e57829003601f168201915b5050505050905090565b6000611068610fb261122f565b84611063856040518060600160405280602581526020016141c26025913960036000610fdc61122f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9092919063ffffffff16565b611237565b6001905092915050565b600061108661107f61122f565b8484611400565b6001905092915050565b6109c481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61112561122f565b73ffffffffffffffffffffffffffffffffffffffff16611143610eea565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613999565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613a2b565b60405180910390fd5b611211816117af565b50565b600281565b600081836112279190613aa9565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90613b4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613bde565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113f3919061350e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613c70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590613d02565b60405180910390fd5b60008111611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151890613d94565b60405180910390fd5b600061152c30610d21565b9050600060165482101590508080156115525750601560149054906101000a900460ff16155b80156115ac5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156115c2575060158054906101000a900460ff165b156115d65760165491506115d582611873565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061167d5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561168757600090505b61169386868684611949565b505050505050565b60008383111582906116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da91906133ce565b60405180910390fd5b5082840390509392505050565b60008060006116fd611c5a565b91509150611714818361121990919063ffffffff16565b9250505090565b600081836117299190613db4565b905092915050565b600080600080600080600080600080600061174b8c611f0d565b9350935093509350600080600061176c8f8787876117676116f0565b611f8c565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836117a79190613de8565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601560146101000a81548160ff02191690831515021790555060006118a460028361121990919063ffffffff16565b905060006118bb828461179990919063ffffffff16565b905060004790506118cb83612040565b60006118e0824761179990919063ffffffff16565b90506118ec8382612283565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161191f93929190613e1c565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b8061195757611956612363565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119fa5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a0f57611a0a848484612398565b611c46565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ab25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ac757611ac2848484612606565b611c45565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b6b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b8057611b7b848484612874565b611c44565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c225750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c3757611c32848484612a4d565b611c43565b611c42848484612874565b5b5b5b5b80611c5457611c53612d50565b5b50505050565b600080600060085490506000600754905060005b600680549050811015611ed057826001600060068481548110611c9457611c93613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611d825750816002600060068481548110611d1a57611d19613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15611d995760085460075494509450505050611f09565b611e296001600060068481548110611db457611db3613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461179990919063ffffffff16565b9250611ebb6002600060068481548110611e4657611e45613e53565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361179990919063ffffffff16565b91508080611ec890613e82565b915050611c6e565b50611ee860075460085461121990919063ffffffff16565b821015611f0057600854600754935093505050611f09565b81819350935050505b9091565b6000806000806000611f1e86612d6d565b90506000611f2b87612d9f565b90506000611f3888612dd1565b90506000611f7382611f6585611f57888e61179990919063ffffffff16565b61179990919063ffffffff16565b61179990919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080611fa5858a612e6290919063ffffffff16565b90506000611fbc868a612e6290919063ffffffff16565b90506000611fd3878a612e6290919063ffffffff16565b90506000611fea888a612e6290919063ffffffff16565b905060006120258261201785612009888a61179990919063ffffffff16565b61179990919063ffffffff16565b61179990919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff81111561205d5761205c613eca565b5b60405190808252806020026020018201604052801561208b5781602001602082028036833780820191505090505b50905030816000815181106120a3576120a2613e53565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561214a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216e9190613f0e565b8160018151811061218257612181613e53565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121e930601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611237565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161224d959493929190614034565b600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050505050565b6122b030601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611237565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016123199695949392919061408e565b60606040518083038185885af1158015612337573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061235c9190614104565b5050505050565b600d54600e81905550600f546010819055506011546012819055506000600d819055506000600f819055506000601181905550565b60008060008060008060006123ac88611731565b965096509650965096509650965061240c88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124a187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061253686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061258282612e78565b61258b8161301d565b6125958584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516125f2919061350e565b60405180910390a350505050505050505050565b600080600080600080600061261a88611731565b965096509650965096509650965061267a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061270f84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127a486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127f082612e78565b6127f98161301d565b6128038584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612860919061350e565b60405180910390a350505050505050505050565b600080600080600080600061288888611731565b96509650965096509650965096506128e887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061297d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129c982612e78565b6129d28161301d565b6129dc8584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612a39919061350e565b60405180910390a350505050505050505050565b6000806000806000806000612a6188611731565b9650965096509650965096509650612ac188600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b5687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612beb84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c8086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ccc82612e78565b612cd58161301d565b612cdf8584613304565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d3c919061350e565b60405180910390a350505050505050505050565b600e54600d81905550601054600f81905550601254601181905550565b6000612d98612710612d8a600d5485612e6290919063ffffffff16565b61121990919063ffffffff16565b9050919050565b6000612dca612710612dbc600f5485612e6290919063ffffffff16565b61121990919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612e315760009050612e5d565b612e5a612710612e4c60115485612e6290919063ffffffff16565b61121990919063ffffffff16565b90505b919050565b60008183612e709190614157565b905092915050565b6000612e826116f0565b90506000612e998284612e6290919063ffffffff16565b9050612eed81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561301857612fd483600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60008111156133015760006130306116f0565b905060006130478284612e6290919063ffffffff16565b90506130bd8160016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b60016000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132705761320a8360026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461171b90919063ffffffff16565b60026000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132b161122f565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516132f6919061350e565b60405180910390a350505b50565b6133198260085461179990919063ffffffff16565b6008819055506133348160095461171b90919063ffffffff16565b6009819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561337857808201518184015260208101905061335d565b60008484015250505050565b6000601f19601f8301169050919050565b60006133a08261333e565b6133aa8185613349565b93506133ba81856020860161335a565b6133c381613384565b840191505092915050565b600060208201905081810360008301526133e88184613395565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613420826133f5565b9050919050565b61343081613415565b811461343b57600080fd5b50565b60008135905061344d81613427565b92915050565b6000819050919050565b61346681613453565b811461347157600080fd5b50565b6000813590506134838161345d565b92915050565b600080604083850312156134a05761349f6133f0565b5b60006134ae8582860161343e565b92505060206134bf85828601613474565b9150509250929050565b60008115159050919050565b6134de816134c9565b82525050565b60006020820190506134f960008301846134d5565b92915050565b61350881613453565b82525050565b600060208201905061352360008301846134ff565b92915050565b6000819050919050565b600061354e613549613544846133f5565b613529565b6133f5565b9050919050565b600061356082613533565b9050919050565b600061357282613555565b9050919050565b61358281613567565b82525050565b600060208201905061359d6000830184613579565b92915050565b6135ac81613415565b82525050565b60006020820190506135c760008301846135a3565b92915050565b6000806000606084860312156135e6576135e56133f0565b5b60006135f48682870161343e565b93505060206136058682870161343e565b925050604061361686828701613474565b9150509250925092565b600060208284031215613636576136356133f0565b5b600061364484828501613474565b91505092915050565b600060ff82169050919050565b6136638161364d565b82525050565b600060208201905061367e600083018461365a565b92915050565b61368d816134c9565b811461369857600080fd5b50565b6000813590506136aa81613684565b92915050565b600080604083850312156136c7576136c66133f0565b5b60006136d585828601613474565b92505060206136e68582860161369b565b9150509250929050565b600060208284031215613706576137056133f0565b5b60006137148482850161343e565b91505092915050565b60008060408385031215613734576137336133f0565b5b60006137428582860161343e565b92505060206137538582860161343e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137a457607f821691505b6020821081036137b7576137b661375d565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613819602a83613349565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006138ab602c83613349565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000613917601f83613349565b9150613922826138e1565b602082019050919050565b600060208201905081810360008301526139468161390a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613983602083613349565b915061398e8261394d565b602082019050919050565b600060208201905081810360008301526139b281613976565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a15602683613349565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ab482613453565b9150613abf83613453565b925082613acf57613ace613a4b565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b36602483613349565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bc8602283613349565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c5a602583613349565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cec602383613349565b9150613cf782613c90565b604082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613d7e602983613349565b9150613d8982613d22565b604082019050919050565b60006020820190508181036000830152613dad81613d71565b9050919050565b6000613dbf82613453565b9150613dca83613453565b9250828201905080821115613de257613de1613a7a565b5b92915050565b6000613df382613453565b9150613dfe83613453565b9250828203905081811115613e1657613e15613a7a565b5b92915050565b6000606082019050613e3160008301866134ff565b613e3e60208301856134ff565b613e4b60408301846134ff565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613e8d82613453565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ebf57613ebe613a7a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613f0881613427565b92915050565b600060208284031215613f2457613f236133f0565b5b6000613f3284828501613ef9565b91505092915050565b6000819050919050565b6000613f60613f5b613f5684613f3b565b613529565b613453565b9050919050565b613f7081613f45565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613fab81613415565b82525050565b6000613fbd8383613fa2565b60208301905092915050565b6000602082019050919050565b6000613fe182613f76565b613feb8185613f81565b9350613ff683613f92565b8060005b8381101561402757815161400e8882613fb1565b975061401983613fc9565b925050600181019050613ffa565b5085935050505092915050565b600060a08201905061404960008301886134ff565b6140566020830187613f67565b81810360408301526140688186613fd6565b905061407760608301856135a3565b61408460808301846134ff565b9695505050505050565b600060c0820190506140a360008301896135a3565b6140b060208301886134ff565b6140bd6040830187613f67565b6140ca6060830186613f67565b6140d760808301856135a3565b6140e460a08301846134ff565b979650505050505050565b6000815190506140fe8161345d565b92915050565b60008060006060848603121561411d5761411c6133f0565b5b600061412b868287016140ef565b935050602061413c868287016140ef565b925050604061414d868287016140ef565b9150509250925092565b600061416282613453565b915061416d83613453565b925082820261417b81613453565b9150828204841483151761419257614191613a7a565b5b509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206c3613cbbe0bcd89f5bde8ba06f431a62dda29e11fb271805d7088b3f96baf8f64736f6c63430008110033

Deployed Bytecode Sourcemap

28737:20073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31826:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32811:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34310:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29744:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32103:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29827:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33012:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35325:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32012:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33466:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29517:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34405:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29667:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34834:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29792:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41501:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29586:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32206:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5454:94;;;;;;;;;;;;;:::i;:::-;;34182:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4803:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31917;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33774:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32412:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28912:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32619:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5703:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28868:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31826:83;31863:13;31896:5;31889:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31826:83;:::o;32811:193::-;32913:4;32935:39;32944:12;:10;:12::i;:::-;32958:7;32967:6;32935:8;:39::i;:::-;32992:4;32985:11;;32811:193;;;;:::o;34310:87::-;34352:7;34379:10;;34372:17;;34310:87;:::o;29744:41::-;;;;;;;;;;;;;:::o;32103:95::-;32156:7;32183;;32176:14;;32103:95;:::o;29827:30::-;;;;;;;;;;;;;:::o;33012:446::-;33144:4;33161:36;33171:6;33179:9;33190:6;33161:9;:36::i;:::-;33208:220;33231:6;33252:12;:10;:12::i;:::-;33279:138;33335:6;33279:138;;;;;;;;;;;;;;;;;:11;:19;33291:6;33279:19;;;;;;;;;;;;;;;:33;33299:12;:10;:12::i;:::-;33279:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;33208:8;:220::i;:::-;33446:4;33439:11;;33012:446;;;;;:::o;35325:322::-;35419:7;35477;;35466;:18;;35444:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35565:19;35587:10;:8;:10::i;:::-;35565:32;;35615:24;35627:11;35615:7;:11;;:24;;;;:::i;:::-;35608:31;;;35325:322;;;:::o;32012:83::-;32053:5;32078:9;;;;;;;;;;;32071:16;;32012:83;:::o;33466:300::-;33581:4;33603:133;33626:12;:10;:12::i;:::-;33653:7;33675:50;33714:10;33675:11;:25;33687:12;:10;:12::i;:::-;33675:25;;;;;;;;;;;;;;;:34;33701:7;33675:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;33603:8;:133::i;:::-;33754:4;33747:11;;33466:300;;;;:::o;29517:22::-;;;;:::o;34405:421::-;34457:14;34474:12;:10;:12::i;:::-;34457:29;;34520:11;:19;34532:6;34520:19;;;;;;;;;;;;;;;;;;;;;;;;;34519:20;34497:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;34623:15;34654:19;34665:7;34654:10;:19::i;:::-;34622:51;;;;;;;;34702:28;34722:7;34702;:15;34710:6;34702:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34684:7;:15;34692:6;34684:15;;;;;;;;;;;;;;;:46;;;;34751:20;34763:7;34751;;:11;;:20;;;;:::i;:::-;34741:7;:30;;;;34795:23;34810:7;34795:10;;:14;;:23;;;;:::i;:::-;34782:10;:36;;;;34446:380;;34405:421;:::o;29667:26::-;;;;:::o;34834:483::-;34952:7;34996;;34985;:18;;34977:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35055:17;35050:260;;35090:15;35121:19;35132:7;35121:10;:19::i;:::-;35089:51;;;;;;;;35162:7;35155:14;;;;;35050:260;35205:23;35242:19;35253:7;35242:10;:19::i;:::-;35202:59;;;;;;;;35283:15;35276:22;;;34834:483;;;;;:::o;29792:28::-;;;;;;;;;;;;;:::o;29894:33::-;;;;;;;;;;;;:::o;41501:124::-;41566:4;41590:18;:27;41609:7;41590:27;;;;;;;;;;;;;;;;;;;;;;;;;41583:34;;41501:124;;;:::o;29586:28::-;;;;:::o;32206:198::-;32272:7;32296:11;:20;32308:7;32296:20;;;;;;;;;;;;;;;;;;;;;;;;;32292:49;;;32325:7;:16;32333:7;32325:16;;;;;;;;;;;;;;;;32318:23;;;;32292:49;32359:37;32379:7;:16;32387:7;32379:16;;;;;;;;;;;;;;;;32359:19;:37::i;:::-;32352:44;;32206:198;;;;:::o;5454:94::-;5034:12;:10;:12::i;:::-;5023:23;;:7;:5;:7::i;:::-;:23;;;5015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5519:21:::1;5537:1;5519:9;:21::i;:::-;5454:94::o:0;34182:120::-;34250:4;34274:11;:20;34286:7;34274:20;;;;;;;;;;;;;;;;;;;;;;;;;34267:27;;34182:120;;;:::o;4803:87::-;4849:7;4876:6;;;;;;;;;;;4869:13;;4803:87;:::o;31917:::-;31956:13;31989:7;31982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31917:87;:::o;33774:400::-;33894:4;33916:228;33939:12;:10;:12::i;:::-;33966:7;33988:145;34045:15;33988:145;;;;;;;;;;;;;;;;;:11;:25;34000:12;:10;:12::i;:::-;33988:25;;;;;;;;;;;;;;;:34;34014:7;33988:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;33916:8;:228::i;:::-;34162:4;34155:11;;33774:400;;;;:::o;32412:199::-;32517:4;32539:42;32549:12;:10;:12::i;:::-;32563:9;32574:6;32539:9;:42::i;:::-;32599:4;32592:11;;32412:199;;;;:::o;28912:43::-;28946:9;28912:43;:::o;32619:184::-;32736:7;32768:11;:18;32780:5;32768:18;;;;;;;;;;;;;;;:27;32787:7;32768:27;;;;;;;;;;;;;;;;32761:34;;32619:184;;;;:::o;5703:192::-;5034:12;:10;:12::i;:::-;5023:23;;:7;:5;:7::i;:::-;:23;;;5015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5812:1:::1;5792:22;;:8;:22;;::::0;5784:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5868:19;5878:8;5868:9;:19::i;:::-;5703:192:::0;:::o;28868:35::-;28902:1;28868:35;:::o;10026:98::-;10084:7;10115:1;10111;:5;;;;:::i;:::-;10104:12;;10026:98;;;;:::o;3521:::-;3574:7;3601:10;3594:17;;3521:98;:::o;41633:371::-;41777:1;41760:19;;:5;:19;;;41752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41858:1;41839:21;;:7;:21;;;41831:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41942:6;41912:11;:18;41924:5;41912:18;;;;;;;;;;;;;;;:27;41931:7;41912:27;;;;;;;;;;;;;;;:36;;;;41980:7;41964:32;;41973:5;41964:32;;;41989:6;41964:32;;;;;;:::i;:::-;;;;;;;;41633:371;;;:::o;42012:1531::-;42150:1;42134:18;;:4;:18;;;42126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42227:1;42213:16;;:2;:16;;;42205:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42297:1;42288:6;:10;42280:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42639:28;42670:24;42688:4;42670:9;:24::i;:::-;42639:55;;42707:24;42771:29;;42734:20;:66;;42707:93;;42829:19;:53;;;;;42866:16;;;;;;;;;;;42865:17;42829:53;:91;;;;;42907:13;;;;;;;;;;;42899:21;;:4;:21;;;;42829:91;:129;;;;;42937:21;;;;;;;;;;42829:129;42811:318;;;43008:29;;42985:52;;43081:36;43096:20;43081:14;:36::i;:::-;42811:318;43202:12;43217:4;43202:19;;43322:18;:24;43341:4;43322:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43350:18;:22;43369:2;43350:22;;;;;;;;;;;;;;;;;;;;;;;;;43322:50;43318:98;;;43399:5;43389:15;;43318:98;43494:41;43509:4;43515:2;43519:6;43527:7;43494:14;:41::i;:::-;42115:1428;;;42012:1531;;;:::o;11168:240::-;11288:7;11346:1;11341;:6;;11349:12;11333:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11388:1;11384;:5;11377:12;;11168:240;;;;;:::o;38837:164::-;38879:7;38900:15;38917;38936:19;:17;:19::i;:::-;38899:56;;;;38973:20;38985:7;38973;:11;;:20;;;;:::i;:::-;38966:27;;;;38837:164;:::o;8889:98::-;8947:7;8978:1;8974;:5;;;;:::i;:::-;8967:12;;8889:98;;;;:::o;36749:841::-;36849:7;36871;36893;36915;36937;36959;36981;37031:23;37069:12;37096:18;37129:16;37159:20;37171:7;37159:11;:20::i;:::-;37016:163;;;;;;;;37191:15;37208:23;37233:12;37249:136;37275:7;37297:4;37316:10;37341:8;37364:10;:8;:10::i;:::-;37249:11;:136::i;:::-;37190:195;;;;;;37418:7;37440:15;37470:4;37489:15;37519:4;37538:10;37563:8;37396:186;;;;;;;;;;;;;;;;;;;;;36749:841;;;;;;;;;:::o;9270:98::-;9328:7;9359:1;9355;:5;;;;:::i;:::-;9348:12;;9270:98;;;;:::o;5903:173::-;5959:16;5978:6;;;;;;;;;;;5959:25;;6004:8;5995:6;;:17;;;;;;;;;;;;;;;;;;6059:8;6028:40;;6049:8;6028:40;;;;;;;;;;;;5948:128;5903:173;:::o;43551:977::-;30302:4;30283:16;;:23;;;;;;;;;;;;;;;;;;43687:12:::1;43702:27;43727:1;43702:20;:24;;:27;;;;:::i;:::-;43687:42;;43740:17;43760:30;43785:4;43760:20;:24;;:30;;;;:::i;:::-;43740:50;;44068:22;44093:21;44068:46;;44159:22;44176:4;44159:16;:22::i;:::-;44312:18;44333:41;44359:14;44333:21;:25;;:41;;;;:::i;:::-;44312:62;;44424:35;44437:9;44448:10;44424:12;:35::i;:::-;44477:43;44492:4;44498:10;44510:9;44477:43;;;;;;;;:::i;:::-;;;;;;;;43625:903;;;;30348:5:::0;30329:16;;:24;;;;;;;;;;;;;;;;;;43551:977;:::o;45735:838::-;45891:7;45886:28;;45900:14;:12;:14::i;:::-;45886:28;45931:11;:19;45943:6;45931:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;45955:11;:22;45967:9;45955:22;;;;;;;;;;;;;;;;;;;;;;;;;45954:23;45931:46;45927:597;;;45994:48;46016:6;46024:9;46035:6;45994:21;:48::i;:::-;45927:597;;;46065:11;:19;46077:6;46065:19;;;;;;;;;;;;;;;;;;;;;;;;;46064:20;:46;;;;;46088:11;:22;46100:9;46088:22;;;;;;;;;;;;;;;;;;;;;;;;;46064:46;46060:464;;;46127:46;46147:6;46155:9;46166:6;46127:19;:46::i;:::-;46060:464;;;46196:11;:19;46208:6;46196:19;;;;;;;;;;;;;;;;;;;;;;;;;46195:20;:47;;;;;46220:11;:22;46232:9;46220:22;;;;;;;;;;;;;;;;;;;;;;;;;46219:23;46195:47;46191:333;;;46259:44;46277:6;46285:9;46296:6;46259:17;:44::i;:::-;46191:333;;;46325:11;:19;46337:6;46325:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46348:11;:22;46360:9;46348:22;;;;;;;;;;;;;;;;;;;;;;;;;46325:45;46321:203;;;46387:48;46409:6;46417:9;46428:6;46387:21;:48::i;:::-;46321:203;;;46468:44;46486:6;46494:9;46505:6;46468:17;:44::i;:::-;46321:203;46191:333;46060:464;45927:597;46541:7;46536:29;;46550:15;:13;:15::i;:::-;46536:29;45735:838;;;;:::o;39009:605::-;39060:7;39069;39089:15;39107:7;;39089:25;;39125:15;39143:7;;39125:25;;39166:9;39161:338;39185:9;:16;;;;39181:1;:20;39161:338;;;39269:7;39245;:21;39253:9;39263:1;39253:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39245:21;;;;;;;;;;;;;;;;:31;:83;;;;39321:7;39297;:21;39305:9;39315:1;39305:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39297:21;;;;;;;;;;;;;;;;:31;39245:83;39223:146;;;39352:7;;39361;;39344:25;;;;;;;;;39223:146;39394:34;39406:7;:21;39414:9;39424:1;39414:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39406:21;;;;;;;;;;;;;;;;39394:7;:11;;:34;;;;:::i;:::-;39384:44;;39453:34;39465:7;:21;39473:9;39483:1;39473:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39465:21;;;;;;;;;;;;;;;;39453:7;:11;;:34;;;;:::i;:::-;39443:44;;39203:3;;;;;:::i;:::-;;;;39161:338;;;;39523:20;39535:7;;39523;;:11;;:20;;;;:::i;:::-;39513:7;:30;39509:61;;;39553:7;;39562;;39545:25;;;;;;;;39509:61;39589:7;39598;39581:25;;;;;;39009:605;;;:::o;37598:549::-;37699:7;37721;37743;37765;37800:12;37815:24;37831:7;37815:15;:24::i;:::-;37800:39;;37850:18;37871:30;37893:7;37871:21;:30::i;:::-;37850:51;;37912:19;37934:28;37954:7;37934:19;:28::i;:::-;37912:50;;37973:23;37999:74;38051:11;37999:33;38021:10;37999:17;38011:4;37999:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:74;;;;:::i;:::-;37973:100;;38092:15;38109:4;38115:10;38127:11;38084:55;;;;;;;;;;;;37598:549;;;;;:::o;38155:674::-;38381:7;38403;38425;38460:15;38478:24;38490:11;38478:7;:11;;:24;;;;:::i;:::-;38460:42;;38513:12;38528:21;38537:11;38528:4;:8;;:21;;;;:::i;:::-;38513:36;;38560:18;38581:27;38596:11;38581:10;:14;;:27;;;;:::i;:::-;38560:48;;38619:16;38638:25;38651:11;38638:8;:12;;:25;;;;:::i;:::-;38619:44;;38674:23;38700:71;38752:8;38700:33;38722:10;38700:17;38712:4;38700:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:71;;;;:::i;:::-;38674:97;;38790:7;38799:15;38816:4;38782:39;;;;;;;;;;;38155:674;;;;;;;;;:::o;44536:589::-;44662:21;44700:1;44686:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44662:40;;44731:4;44713;44718:1;44713:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44757:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44747:4;44752:1;44747:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44792:62;44809:4;44824:15;;;;;;;;;;;44842:11;44792:8;:62::i;:::-;44893:15;;;;;;;;;;;:66;;;44974:11;45000:1;45044:4;45071;45091:15;44893:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44591:534;44536:589;:::o;45133:521::-;45281:62;45298:4;45313:15;;;;;;;;;;;45331:11;45281:8;:62::i;:::-;45386:15;;;;;;;;;;;:31;;;45425:9;45458:4;45478:11;45504:1;45547;45598:6;45620:15;45386:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45133:521;;:::o;41070:246::-;41131:7;;41113:15;:25;;;;41173:13;;41149:21;:37;;;;41219:11;;41197:19;:33;;;;41253:1;41243:7;:11;;;;41281:1;41265:13;:17;;;;41307:1;41293:11;:15;;;;41070:246::o;48054:753::-;48205:15;48235:23;48273:12;48300:23;48338:12;48365:18;48398:16;48428:19;48439:7;48428:10;:19::i;:::-;48190:257;;;;;;;;;;;;;;48476:28;48496:7;48476;:15;48484:6;48476:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48458:7;:15;48466:6;48458:15;;;;;;;;;;;;;;;:46;;;;48533:28;48553:7;48533;:15;48541:6;48533:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48515:7;:15;48523:6;48515:15;;;;;;;;;;;;;;;:46;;;;48593:39;48616:15;48593:7;:18;48601:9;48593:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48572:7;:18;48580:9;48572:18;;;;;;;;;;;;;;;:60;;;;48643:26;48658:10;48643:14;:26::i;:::-;48680:25;48696:8;48680:15;:25::i;:::-;48716:23;48728:4;48734;48716:11;:23::i;:::-;48772:9;48755:44;;48764:6;48755:44;;;48783:15;48755:44;;;;;;:::i;:::-;;;;;;;;48179:628;;;;;;;48054:753;;;:::o;47281:765::-;47430:15;47460:23;47498:12;47525:23;47563:12;47590:18;47623:16;47653:19;47664:7;47653:10;:19::i;:::-;47415:257;;;;;;;;;;;;;;47701:28;47721:7;47701;:15;47709:6;47701:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47683:7;:15;47691:6;47683:15;;;;;;;;;;;;;;;:46;;;;47761:39;47784:15;47761:7;:18;47769:9;47761:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47740:7;:18;47748:9;47740:18;;;;;;;;;;;;;;;:60;;;;47832:39;47855:15;47832:7;:18;47840:9;47832:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47811:7;:18;47819:9;47811:18;;;;;;;;;;;;;;;:60;;;;47882:26;47897:10;47882:14;:26::i;:::-;47919:25;47935:8;47919:15;:25::i;:::-;47955:23;47967:4;47973;47955:11;:23::i;:::-;48011:9;47994:44;;48003:6;47994:44;;;48022:15;47994:44;;;;;;:::i;:::-;;;;;;;;47404:642;;;;;;;47281:765;;;:::o;46581:692::-;46728:15;46758:23;46796:12;46823:23;46861:12;46888:18;46921:16;46951:19;46962:7;46951:10;:19::i;:::-;46713:257;;;;;;;;;;;;;;46999:28;47019:7;46999;:15;47007:6;46999:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46981:7;:15;46989:6;46981:15;;;;;;;;;;;;;;;:46;;;;47059:39;47082:15;47059:7;:18;47067:9;47059:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47038:7;:18;47046:9;47038:18;;;;;;;;;;;;;;;:60;;;;47109:26;47124:10;47109:14;:26::i;:::-;47146:25;47162:8;47146:15;:25::i;:::-;47182:23;47194:4;47200;47182:11;:23::i;:::-;47238:9;47221:44;;47230:6;47221:44;;;47249:15;47221:44;;;;;;:::i;:::-;;;;;;;;46702:571;;;;;;;46581:692;;;:::o;35657:824::-;35808:15;35838:23;35876:12;35903:23;35941:12;35968:18;36001:16;36031:19;36042:7;36031:10;:19::i;:::-;35793:257;;;;;;;;;;;;;;36079:28;36099:7;36079;:15;36087:6;36079:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36061:7;:15;36069:6;36061:15;;;;;;;;;;;;;;;:46;;;;36136:28;36156:7;36136;:15;36144:6;36136:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36118:7;:15;36126:6;36118:15;;;;;;;;;;;;;;;:46;;;;36196:39;36219:15;36196:7;:18;36204:9;36196:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36175:7;:18;36183:9;36175:18;;;;;;;;;;;;;;;:60;;;;36267:39;36290:15;36267:7;:18;36275:9;36267:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36246:7;:18;36254:9;36246:18;;;;;;;;;;;;;;;:60;;;;36317:26;36332:10;36317:14;:26::i;:::-;36354:25;36370:8;36354:15;:25::i;:::-;36390:23;36402:4;36408;36390:11;:23::i;:::-;36446:9;36429:44;;36438:6;36429:44;;;36457:15;36429:44;;;;;;:::i;:::-;;;;;;;;35782:699;;;;;;;35657:824;;;:::o;41324:169::-;41378:15;;41368:7;:25;;;;41420:21;;41404:13;:37;;;;41466:19;;41452:11;:33;;;;41324:169::o;40518:130::-;40582:7;40609:31;40634:5;40609:20;40621:7;;40609;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40602:38;;40518:130;;;:::o;40656:174::-;40753:7;40785:37;40816:5;40785:26;40797:13;;40785:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40778:44;;40656:174;;;:::o;40838:224::-;40933:7;40989:1;40962:29;;:15;;;;;;;;;;;:29;;;40958:43;;41000:1;40993:8;;;;40958:43;41019:35;41048:5;41019:24;41031:11;;41019:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;41012:42;;40838:224;;;;:::o;9627:98::-;9685:7;9716:1;9712;:5;;;;:::i;:::-;9705:12;;9627:98;;;;:::o;39622:355::-;39685:19;39707:10;:8;:10::i;:::-;39685:32;;39728:18;39749:27;39764:11;39749:10;:14;;:27;;;;:::i;:::-;39728:48;;39812:38;39839:10;39812:7;:22;39828:4;39812:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39787:7;:22;39803:4;39787:22;;;;;;;;;;;;;;;:63;;;;39865:11;:26;39885:4;39865:26;;;;;;;;;;;;;;;;;;;;;;;;;39861:108;;;39931:38;39958:10;39931:7;:22;39947:4;39931:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39906:7;:22;39922:4;39906:22;;;;;;;;;;;;;;;:63;;;;39861:108;39674:303;;39622:355;:::o;39985:525::-;40062:1;40051:8;:12;40047:456;;;40080:19;40102:10;:8;:10::i;:::-;40080:32;;40127:16;40146:25;40159:11;40146:8;:12;;:25;;;;:::i;:::-;40127:44;;40213:38;40242:8;40213:7;:24;40221:15;;;;;;;;;;;40213:24;;;;;;;;;;;;;;;;:28;;:38;;;;:::i;:::-;40186:7;:24;40194:15;;;;;;;;;;;40186:24;;;;;;;;;;;;;;;:65;;;;40270:11;:28;40282:15;;;;;;;;;;;40270:28;;;;;;;;;;;;;;;;;;;;;;;;;40266:156;;;40344:78;40395:8;40344:7;:24;40352:15;;;;;;;;;;;40344:24;;;;;;;;;;;;;;;;:28;;:78;;;;:::i;:::-;40317:7;:24;40325:15;;;;;;;;;;;40317:24;;;;;;;;;;;;;;;:105;;;;40266:156;40465:15;;;;;;;;;;;40442:49;;40451:12;:10;:12::i;:::-;40442:49;;;40482:8;40442:49;;;;;;:::i;:::-;;;;;;;;40065:438;;40047:456;39985:525;:::o;36594:147::-;36672:17;36684:4;36672:7;;:11;;:17;;;;:::i;:::-;36662:7;:27;;;;36713:20;36728:4;36713:10;;:14;;:20;;;;:::i;:::-;36700:10;:33;;;;36594:147;;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:118::-;4863:24;4881:5;4863:24;:::i;:::-;4858:3;4851:37;4776:118;;:::o;4900:222::-;4993:4;5031:2;5020:9;5016:18;5008:26;;5044:71;5112:1;5101:9;5097:17;5088:6;5044:71;:::i;:::-;4900:222;;;;:::o;5128:619::-;5205:6;5213;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5128:619;;;;;:::o;5753:329::-;5812:6;5861:2;5849:9;5840:7;5836:23;5832:32;5829:119;;;5867:79;;:::i;:::-;5829:119;5987:1;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5958:117;5753:329;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:329::-;7312:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7487:1;7512:53;7557:7;7548:6;7537:9;7533:22;7512:53;:::i;:::-;7502:63;;7458:117;7253:329;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:180::-;8116:77;8113:1;8106:88;8213:4;8210:1;8203:15;8237:4;8234:1;8227:15;8254:320;8298:6;8335:1;8329:4;8325:12;8315:22;;8382:1;8376:4;8372:12;8403:18;8393:81;;8459:4;8451:6;8447:17;8437:27;;8393:81;8521:2;8513:6;8510:14;8490:18;8487:38;8484:84;;8540:18;;:::i;:::-;8484:84;8305:269;8254:320;;;:::o;8580:229::-;8720:34;8716:1;8708:6;8704:14;8697:58;8789:12;8784:2;8776:6;8772:15;8765:37;8580:229;:::o;8815:366::-;8957:3;8978:67;9042:2;9037:3;8978:67;:::i;:::-;8971:74;;9054:93;9143:3;9054:93;:::i;:::-;9172:2;9167:3;9163:12;9156:19;;8815:366;;;:::o;9187:419::-;9353:4;9391:2;9380:9;9376:18;9368:26;;9440:9;9434:4;9430:20;9426:1;9415:9;9411:17;9404:47;9468:131;9594:4;9468:131;:::i;:::-;9460:139;;9187:419;;;:::o;9612:231::-;9752:34;9748:1;9740:6;9736:14;9729:58;9821:14;9816:2;9808:6;9804:15;9797:39;9612:231;:::o;9849:366::-;9991:3;10012:67;10076:2;10071:3;10012:67;:::i;:::-;10005:74;;10088:93;10177:3;10088:93;:::i;:::-;10206:2;10201:3;10197:12;10190:19;;9849:366;;;:::o;10221:419::-;10387:4;10425:2;10414:9;10410:18;10402:26;;10474:9;10468:4;10464:20;10460:1;10449:9;10445:17;10438:47;10502:131;10628:4;10502:131;:::i;:::-;10494:139;;10221:419;;;:::o;10646:181::-;10786:33;10782:1;10774:6;10770:14;10763:57;10646:181;:::o;10833:366::-;10975:3;10996:67;11060:2;11055:3;10996:67;:::i;:::-;10989:74;;11072:93;11161:3;11072:93;:::i;:::-;11190:2;11185:3;11181:12;11174:19;;10833:366;;;:::o;11205:419::-;11371:4;11409:2;11398:9;11394:18;11386:26;;11458:9;11452:4;11448:20;11444:1;11433:9;11429:17;11422:47;11486:131;11612:4;11486:131;:::i;:::-;11478:139;;11205:419;;;:::o;11630:182::-;11770:34;11766:1;11758:6;11754:14;11747:58;11630:182;:::o;11818:366::-;11960:3;11981:67;12045:2;12040:3;11981:67;:::i;:::-;11974:74;;12057:93;12146:3;12057:93;:::i;:::-;12175:2;12170:3;12166:12;12159:19;;11818:366;;;:::o;12190:419::-;12356:4;12394:2;12383:9;12379:18;12371:26;;12443:9;12437:4;12433:20;12429:1;12418:9;12414:17;12407:47;12471:131;12597:4;12471:131;:::i;:::-;12463:139;;12190:419;;;:::o;12615:225::-;12755:34;12751:1;12743:6;12739:14;12732:58;12824:8;12819:2;12811:6;12807:15;12800:33;12615:225;:::o;12846:366::-;12988:3;13009:67;13073:2;13068:3;13009:67;:::i;:::-;13002:74;;13085:93;13174:3;13085:93;:::i;:::-;13203:2;13198:3;13194:12;13187:19;;12846:366;;;:::o;13218:419::-;13384:4;13422:2;13411:9;13407:18;13399:26;;13471:9;13465:4;13461:20;13457:1;13446:9;13442:17;13435:47;13499:131;13625:4;13499:131;:::i;:::-;13491:139;;13218:419;;;:::o;13643:180::-;13691:77;13688:1;13681:88;13788:4;13785:1;13778:15;13812:4;13809:1;13802:15;13829:180;13877:77;13874:1;13867:88;13974:4;13971:1;13964:15;13998:4;13995:1;13988:15;14015:185;14055:1;14072:20;14090:1;14072:20;:::i;:::-;14067:25;;14106:20;14124:1;14106:20;:::i;:::-;14101:25;;14145:1;14135:35;;14150:18;;:::i;:::-;14135:35;14192:1;14189;14185:9;14180:14;;14015:185;;;;:::o;14206:223::-;14346:34;14342:1;14334:6;14330:14;14323:58;14415:6;14410:2;14402:6;14398:15;14391:31;14206:223;:::o;14435:366::-;14577:3;14598:67;14662:2;14657:3;14598:67;:::i;:::-;14591:74;;14674:93;14763:3;14674:93;:::i;:::-;14792:2;14787:3;14783:12;14776:19;;14435:366;;;:::o;14807:419::-;14973:4;15011:2;15000:9;14996:18;14988:26;;15060:9;15054:4;15050:20;15046:1;15035:9;15031:17;15024:47;15088:131;15214:4;15088:131;:::i;:::-;15080:139;;14807:419;;;:::o;15232:221::-;15372:34;15368:1;15360:6;15356:14;15349:58;15441:4;15436:2;15428:6;15424:15;15417:29;15232:221;:::o;15459:366::-;15601:3;15622:67;15686:2;15681:3;15622:67;:::i;:::-;15615:74;;15698:93;15787:3;15698:93;:::i;:::-;15816:2;15811:3;15807:12;15800:19;;15459:366;;;:::o;15831:419::-;15997:4;16035:2;16024:9;16020:18;16012:26;;16084:9;16078:4;16074:20;16070:1;16059:9;16055:17;16048:47;16112:131;16238:4;16112:131;:::i;:::-;16104:139;;15831:419;;;:::o;16256:224::-;16396:34;16392:1;16384:6;16380:14;16373:58;16465:7;16460:2;16452:6;16448:15;16441:32;16256:224;:::o;16486:366::-;16628:3;16649:67;16713:2;16708:3;16649:67;:::i;:::-;16642:74;;16725:93;16814:3;16725:93;:::i;:::-;16843:2;16838:3;16834:12;16827:19;;16486:366;;;:::o;16858:419::-;17024:4;17062:2;17051:9;17047:18;17039:26;;17111:9;17105:4;17101:20;17097:1;17086:9;17082:17;17075:47;17139:131;17265:4;17139:131;:::i;:::-;17131:139;;16858:419;;;:::o;17283:222::-;17423:34;17419:1;17411:6;17407:14;17400:58;17492:5;17487:2;17479:6;17475:15;17468:30;17283:222;:::o;17511:366::-;17653:3;17674:67;17738:2;17733:3;17674:67;:::i;:::-;17667:74;;17750:93;17839:3;17750:93;:::i;:::-;17868:2;17863:3;17859:12;17852:19;;17511:366;;;:::o;17883:419::-;18049:4;18087:2;18076:9;18072:18;18064:26;;18136:9;18130:4;18126:20;18122:1;18111:9;18107:17;18100:47;18164:131;18290:4;18164:131;:::i;:::-;18156:139;;17883:419;;;:::o;18308:228::-;18448:34;18444:1;18436:6;18432:14;18425:58;18517:11;18512:2;18504:6;18500:15;18493:36;18308:228;:::o;18542:366::-;18684:3;18705:67;18769:2;18764:3;18705:67;:::i;:::-;18698:74;;18781:93;18870:3;18781:93;:::i;:::-;18899:2;18894:3;18890:12;18883:19;;18542:366;;;:::o;18914:419::-;19080:4;19118:2;19107:9;19103:18;19095:26;;19167:9;19161:4;19157:20;19153:1;19142:9;19138:17;19131:47;19195:131;19321:4;19195:131;:::i;:::-;19187:139;;18914:419;;;:::o;19339:191::-;19379:3;19398:20;19416:1;19398:20;:::i;:::-;19393:25;;19432:20;19450:1;19432:20;:::i;:::-;19427:25;;19475:1;19472;19468:9;19461:16;;19496:3;19493:1;19490:10;19487:36;;;19503:18;;:::i;:::-;19487:36;19339:191;;;;:::o;19536:194::-;19576:4;19596:20;19614:1;19596:20;:::i;:::-;19591:25;;19630:20;19648:1;19630:20;:::i;:::-;19625:25;;19674:1;19671;19667:9;19659:17;;19698:1;19692:4;19689:11;19686:37;;;19703:18;;:::i;:::-;19686:37;19536:194;;;;:::o;19736:442::-;19885:4;19923:2;19912:9;19908:18;19900:26;;19936:71;20004:1;19993:9;19989:17;19980:6;19936:71;:::i;:::-;20017:72;20085:2;20074:9;20070:18;20061:6;20017:72;:::i;:::-;20099;20167:2;20156:9;20152:18;20143:6;20099:72;:::i;:::-;19736:442;;;;;;:::o;20184:180::-;20232:77;20229:1;20222:88;20329:4;20326:1;20319:15;20353:4;20350:1;20343:15;20370:233;20409:3;20432:24;20450:5;20432:24;:::i;:::-;20423:33;;20478:66;20471:5;20468:77;20465:103;;20548:18;;:::i;:::-;20465:103;20595:1;20588:5;20584:13;20577:20;;20370:233;;;:::o;20609:180::-;20657:77;20654:1;20647:88;20754:4;20751:1;20744:15;20778:4;20775:1;20768:15;20795:143;20852:5;20883:6;20877:13;20868:22;;20899:33;20926:5;20899:33;:::i;:::-;20795:143;;;;:::o;20944:351::-;21014:6;21063:2;21051:9;21042:7;21038:23;21034:32;21031:119;;;21069:79;;:::i;:::-;21031:119;21189:1;21214:64;21270:7;21261:6;21250:9;21246:22;21214:64;:::i;:::-;21204:74;;21160:128;20944:351;;;;:::o;21301:85::-;21346:7;21375:5;21364:16;;21301:85;;;:::o;21392:158::-;21450:9;21483:61;21501:42;21510:32;21536:5;21510:32;:::i;:::-;21501:42;:::i;:::-;21483:61;:::i;:::-;21470:74;;21392:158;;;:::o;21556:147::-;21651:45;21690:5;21651:45;:::i;:::-;21646:3;21639:58;21556:147;;:::o;21709:114::-;21776:6;21810:5;21804:12;21794:22;;21709:114;;;:::o;21829:184::-;21928:11;21962:6;21957:3;21950:19;22002:4;21997:3;21993:14;21978:29;;21829:184;;;;:::o;22019:132::-;22086:4;22109:3;22101:11;;22139:4;22134:3;22130:14;22122:22;;22019:132;;;:::o;22157:108::-;22234:24;22252:5;22234:24;:::i;:::-;22229:3;22222:37;22157:108;;:::o;22271:179::-;22340:10;22361:46;22403:3;22395:6;22361:46;:::i;:::-;22439:4;22434:3;22430:14;22416:28;;22271:179;;;;:::o;22456:113::-;22526:4;22558;22553:3;22549:14;22541:22;;22456:113;;;:::o;22605:732::-;22724:3;22753:54;22801:5;22753:54;:::i;:::-;22823:86;22902:6;22897:3;22823:86;:::i;:::-;22816:93;;22933:56;22983:5;22933:56;:::i;:::-;23012:7;23043:1;23028:284;23053:6;23050:1;23047:13;23028:284;;;23129:6;23123:13;23156:63;23215:3;23200:13;23156:63;:::i;:::-;23149:70;;23242:60;23295:6;23242:60;:::i;:::-;23232:70;;23088:224;23075:1;23072;23068:9;23063:14;;23028:284;;;23032:14;23328:3;23321:10;;22729:608;;;22605:732;;;;:::o;23343:831::-;23606:4;23644:3;23633:9;23629:19;23621:27;;23658:71;23726:1;23715:9;23711:17;23702:6;23658:71;:::i;:::-;23739:80;23815:2;23804:9;23800:18;23791:6;23739:80;:::i;:::-;23866:9;23860:4;23856:20;23851:2;23840:9;23836:18;23829:48;23894:108;23997:4;23988:6;23894:108;:::i;:::-;23886:116;;24012:72;24080:2;24069:9;24065:18;24056:6;24012:72;:::i;:::-;24094:73;24162:3;24151:9;24147:19;24138:6;24094:73;:::i;:::-;23343:831;;;;;;;;:::o;24180:807::-;24429:4;24467:3;24456:9;24452:19;24444:27;;24481:71;24549:1;24538:9;24534:17;24525:6;24481:71;:::i;:::-;24562:72;24630:2;24619:9;24615:18;24606:6;24562:72;:::i;:::-;24644:80;24720:2;24709:9;24705:18;24696:6;24644:80;:::i;:::-;24734;24810:2;24799:9;24795:18;24786:6;24734:80;:::i;:::-;24824:73;24892:3;24881:9;24877:19;24868:6;24824:73;:::i;:::-;24907;24975:3;24964:9;24960:19;24951:6;24907:73;:::i;:::-;24180:807;;;;;;;;;:::o;24993:143::-;25050:5;25081:6;25075:13;25066:22;;25097:33;25124:5;25097:33;:::i;:::-;24993:143;;;;:::o;25142:663::-;25230:6;25238;25246;25295:2;25283:9;25274:7;25270:23;25266:32;25263:119;;;25301:79;;:::i;:::-;25263:119;25421:1;25446:64;25502:7;25493:6;25482:9;25478:22;25446:64;:::i;:::-;25436:74;;25392:128;25559:2;25585:64;25641:7;25632:6;25621:9;25617:22;25585:64;:::i;:::-;25575:74;;25530:129;25698:2;25724:64;25780:7;25771:6;25760:9;25756:22;25724:64;:::i;:::-;25714:74;;25669:129;25142:663;;;;;:::o;25811:410::-;25851:7;25874:20;25892:1;25874:20;:::i;:::-;25869:25;;25908:20;25926:1;25908:20;:::i;:::-;25903:25;;25963:1;25960;25956:9;25985:30;26003:11;25985:30;:::i;:::-;25974:41;;26164:1;26155:7;26151:15;26148:1;26145:22;26125:1;26118:9;26098:83;26075:139;;26194:18;;:::i;:::-;26075:139;25859:362;25811:410;;;;:::o

Swarm Source

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