ETH Price: $3,259.42 (+3.76%)
Gas: 5 Gwei

Token

Thicc Frens Token (THICC)
 

Overview

Max Total Supply

10,000,000,000,000 THICC

Holders

59

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
818,962,217.403979554 THICC

Value
$0.00
0x464132D57420c1b1fCc36F7979B1c5126a13A9C5
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:
THICCETH

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-23
*/

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

//  SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (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 generally not needed starting with Solidity 0.8, since 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 subtraction 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;
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/ethTHICC.sol

pragma solidity 0.8.1;







contract THICCETH is IERC20 {
    using SafeMath for uint256;
    using Address for address;

    address constant ThiccFund = 0x8b694C1c3339B77148614A0334D93453873a0148;
    address constant Competitions = 0x29c7D6de798821013f6Bfd9EB82BC81814DCC745;
    address private GameRewards = 0x683dea848582eC23efbfF4bbE9F870C5C238844F;
    address constant Marketing = 0x33663752493958b7A7B19De530bd03582326C484;
    address constant ProjectExpansion = 0xCF3584eD03Fb17637981b77d9a352C793EA8d7Ad;
    address private stakingReward= 0x5eF52D199F2d5cb5Fd5af0e104FD05Dc7E7E0B36;


    // here we store Token holder who have more than one THICC token.
    address[] private TokenHolders;
    // here we store partner contract address.
    address private PartnerContractAddress;
    // here we store the NFT holder address
    address private nftContractAddress;
    // here we store bridge contract address.
    address private ethBridgeContract;

    uint256 constant holderFeePercent = 2;
    uint256 constant nftHolderFeePercent = 2;
    uint256 constant partnerHoldersFeePercent = 5;
    uint256 constant GameRewardPercent = 1;

    address private immutable owner;

    mapping(address => bool) private _isBots;
    mapping(address => bool) private _HolderExist;

    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 constant minimumTokenHolder = 1 * (10**_decimals);
    uint256 private constant MAX = ~uint256(0);
    // total supply is ten trillion
    uint256 constant _tTotal = 10000000000000 * 10**_decimals; 
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string constant _name = "Thicc Frens Token";
    string constant _symbol = "THICC";
    uint8 constant _decimals = 9;

    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    // This _liquidityFee is for normal user
    uint256 private _liquidityFee = 10;
    // This _botliquidityFee is for bot
    uint256 constant _botliquidityFee = 30;

    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    bool tradingOpen = false;

    constructor() {
        owner = _msgSender();

        uint256 rToken = _rTotal / 100;
        uint256 tToken = _tTotal / 100;

        uint256 rTokenOnePercent = rToken * 1;
        uint256 tTokenOnePercent = tToken * 1;

        uint256 rTokenTwoPercent = rToken * 2;
        uint256 tTokenTwoPercent = tToken * 2;

        uint256 rTokenFourPercent = rToken *4 ;
        uint256 tTokenFourPercent = tToken *4 ;

        uint256 rTokenEightPercent = rToken * 8;
        uint256 tTokenEightPercent = tToken * 8;

        uint256 rTokenEightyPercent = rToken * 80;
        uint256 tTokenEightyPercent = tToken * 80;

        _rOwned[_msgSender()] = rTokenEightyPercent;
        emit Transfer(address(0), _msgSender(), tTokenEightyPercent);

         _rOwned[stakingReward] = rTokenEightPercent;
        emit Transfer(address(0),stakingReward, tTokenEightPercent);


        _rOwned[ThiccFund] = rTokenOnePercent;
        emit Transfer(address(0), ThiccFund, tTokenOnePercent);

        _rOwned[Competitions] = rTokenOnePercent;
        emit Transfer(address(0), Competitions, tTokenOnePercent);

        _rOwned[GameRewards] = rTokenFourPercent;
        emit Transfer(address(0), GameRewards, tTokenFourPercent);

        _rOwned[Marketing] = rTokenTwoPercent;
        emit Transfer(address(0), Marketing, tTokenTwoPercent);

        _rOwned[ProjectExpansion] = rTokenFourPercent;
        emit Transfer(address(0), ProjectExpansion, tTokenFourPercent);
        TokenHolders.push(ThiccFund);
        TokenHolders.push(Competitions);
        TokenHolders.push(GameRewards);
        TokenHolders.push(Marketing);
        TokenHolders.push(ProjectExpansion);
        TokenHolders.push(stakingReward);

    }

    function initContract() external onlyOwner {
        // Uniswap V2: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[ThiccFund] = true;
        _isExcludedFromFee[Competitions] = true;
        _isExcludedFromFee[GameRewards] = true;
        _isExcludedFromFee[Marketing] = true;
        _isExcludedFromFee[ProjectExpansion] = true;
        _isExcludedFromFee[stakingReward] = true;
        _isExcludedFromFee[nftContractAddress] = true;
        _isExcludedFromFee[PartnerContractAddress] = true;
        
    }

    function openTrading() external onlyOwner {
        _liquidityFee = _previousLiquidityFee;
        _taxFee = _previousTaxFee;
        tradingOpen = true;
    }
    function getPartnerContract() external view returns(address){
        return PartnerContractAddress;

    }
    function getNFTContract() external view returns(address){
        return nftContractAddress;
        
    }
    function getEthBridgeContract() external view returns(address){
        return ethBridgeContract;
        
    }
    function getStakingReward() external view returns(address){
        return stakingReward;
    }

    function ContractOwner() public view virtual returns (address) {
        return owner;
    }

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

    modifier onlyOwner() {
        require(
            ContractOwner() == _msgSender(),
            "Ownable: caller is not the owner"
        );
        _;
    }

    modifier zeroAddress(address _account) {
        require(_account != address(0), "address can't be zero address");
        _;
    }

    // This function is used to change bridge Contract address
    function addBridgeContract(address _bridgeAddress)
        external
        onlyOwner
        zeroAddress(_bridgeAddress)
    {
        ethBridgeContract = _bridgeAddress;
        _isExcludedFromFee[_bridgeAddress]= true;

    }

    // This function is used to change GameRewards address
    function GameRewardsContract(address _changeGameRewardAddress)
        external
        onlyOwner
        zeroAddress(_changeGameRewardAddress)
    {
        GameRewards = _changeGameRewardAddress;
        _isExcludedFromFee[_changeGameRewardAddress]= true;
    }
    function stakingRewardContract(address _changeStakingAddress) external onlyOwner zeroAddress(_changeStakingAddress){
        stakingReward=_changeStakingAddress;
        _isExcludedFromFee[_changeStakingAddress]= true;
        
             

    }

    // here we add/change partner contract address
    function addPartnerContractAddress(address _partnerContractaddress)
        external
        onlyOwner
        zeroAddress(_partnerContractaddress)
        returns (bool)
    {
        PartnerContractAddress = _partnerContractaddress;
        _isExcludedFromFee[_partnerContractaddress]= true;

        return true;
    }

    // here we add bot address manually
    function BotAddress(address _BotAddress)
        external
        zeroAddress(_BotAddress)
        onlyOwner
        returns (bool)
    {
        _isBots[_BotAddress] = true;
        return true;
    }

    // here we add token holder manually to the TokenHolders
    function addTokenHolders(address _tokenHolders)
        external
        onlyOwner
        zeroAddress(_tokenHolders)
        returns (bool)
    {
        TokenHolders.push(_tokenHolders);
        _HolderExist[_tokenHolders] = true;

        return true;
    }

    // This function is used to change/add the NFT holder address.
    function addNftContractAddress(address _nftContractAddress)
        external
        onlyOwner
        zeroAddress(_nftContractAddress)
        returns (address)
    {
        nftContractAddress = _nftContractAddress;
        return nftContractAddress;
    }

    // This function is used to clean token holder manually
    function cleanOldTokenHolders(uint256 size) external onlyOwner {
        address deleteaddress;
        for (uint256 i = 0; i < size; i++) {
            deleteaddress = TokenHolders[i];
            _HolderExist[deleteaddress] = false;
        }
        uint256 j = 0;
        for (uint256 i = size; i < TokenHolders.length; i++) {
            TokenHolders[j] = TokenHolders[i];
            j++;
        }
        for (uint256 k = 0; k < size; k++) {
            TokenHolders.pop();
        }
    }

    //Removing the holder on demand or only creator can call this function in case he thinks some of the liquidity pool or other address should be removed.
    function _removeHolder(address holderAddress) private returns (bool) {
        uint256 holderindex = TokenHolders.length;
        for (uint256 i = 0; i < TokenHolders.length; i++) {
            if (TokenHolders[i] == holderAddress) {
                holderindex = i;
                break;
            }
        }
        if (holderindex == TokenHolders.length) {
            return false;
        }
        if (TokenHolders.length == 1) {
            TokenHolders.pop();
            _HolderExist[holderAddress] = false;
            return true;
        } else if (holderindex == TokenHolders.length - 1) {
            TokenHolders.pop();
            _HolderExist[holderAddress] = false;
            return true;
        } else {
            for (uint256 i = holderindex; i < TokenHolders.length - 1; i++) {
                TokenHolders[i] = TokenHolders[i + 1];
            }
            TokenHolders.pop();
            _HolderExist[holderAddress] = false;
            return true;
        }
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure 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)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);

        uint256 balanceOfUser = balanceOf(recipient);
        balanceOfUser = balanceOfUser + amount;

        if (
            balanceOfUser >= minimumTokenHolder &&
            !_isBots[recipient] &&
            !_HolderExist[recipient]
        ) {
            TokenHolders.push(recipient);
            _HolderExist[recipient] = true;
        }
        return true;
    }

    function allowance(address _owner, address spender)
        external
        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
    ) external override returns (bool) {
        if (msg.sender != ethBridgeContract) {
            _approve(
                sender,
                _msgSender(),
                _allowances[sender][_msgSender()].sub(
                    amount,
                    "ERC20: transfer amount exceeds allowance"
                )
            );
        }
        _transfer(sender, recipient, amount);

        return true;
    }

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

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

    function _tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(rAmount <= _rTotal, "Amount greater than rTotal");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

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

    function _approve(
        address _owner,
        address spender,
        uint256 amount
    ) private {
        require(_owner != address(0), "Cannot approve zero address");
        require(spender != address(0), "Cannot approve 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");
        bool isBot = false;

        // buy
        if (
            from == uniswapV2Pair &&
            to != address(uniswapV2Router) &&
            !_isExcludedFromFee[to]
        ) {
            require(tradingOpen, "Trading not yet enabled.");
        }

        if (!_isBots[from] && _HolderExist[from]) {
            uint256 beforeTransferBalance = balanceOf(from);
            uint256 remainingTokenBalance = beforeTransferBalance - amount;
            if (remainingTokenBalance < minimumTokenHolder) {
                _removeHolder(from);
            }
        }

        bool takeFee = false;

        //take fee only on swaps
        if (
            (from == uniswapV2Pair || to == uniswapV2Pair) &&
            !(_isExcludedFromFee[from] || _isExcludedFromFee[to])
        ) {
            takeFee = true;
        }

        if (_isBots[from] || _isBots[to]) {
            isBot = true;
        }

        _tokenTransfer(from, to, amount, takeFee, isBot);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee,
        bool isBot
    ) private {
        if (!takeFee) _removeAllFee();

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

        if (!takeFee) _restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        bool isBot
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount, isBot);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);

        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if (isBot) {
            _takeBotLiquidity(tLiquidity);
        } else {
            _takeLiquidity(tLiquidity);
        }

        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

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

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

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

    function _getTValues(uint256 tAmount, bool isBot)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = _calculateTaxFee(tAmount);
        uint256 tLiquidity = _calculateLiquidityFee(tAmount, isBot);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

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

    // here we calculate the actual distribution of 10% and 30% liquidity fee
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 onePercentRate = tLiquidity / 10;
        uint256 tLiquidityHolder = onePercentRate * holderFeePercent;
        uint256 tLiquidityPartnerHolder = onePercentRate *
            partnerHoldersFeePercent;
        uint256 tLiquidityNftHolder = onePercentRate * nftHolderFeePercent;
        uint256 tLiquidityGameAmount = onePercentRate * GameRewardPercent;

        // here we calculate 2% liquidity for token holder
        uint256 currentRate = _getRate();
        uint256 rLiquidityHolder = tLiquidityHolder.mul(currentRate);
        uint256 rLiquidityPerHolder = rLiquidityHolder / TokenHolders.length;
        uint256 tLiquidityPerHolder = tLiquidityHolder / TokenHolders.length;
        // here we calculate 5% liquidity for partner holder
        uint256 rLiquidityPartner = tLiquidityPartnerHolder.mul(currentRate);

        // here we calculate 1% liquidity for staking contract.

        uint256 rLiquidityGame = tLiquidityGameAmount.mul(currentRate);

        // here we calculate 2% liquidity for NFT holder

        uint256 rLiquidityNFT = tLiquidityNftHolder.mul(currentRate);

        // here we transfer 2% to NFT contract address
        _rOwned[nftContractAddress] = _rOwned[nftContractAddress].add(
            rLiquidityNFT
        );

        _tOwned[nftContractAddress] = _tOwned[nftContractAddress].add(
            tLiquidityNftHolder
        );

        // here we transfer 1% to game contract address (buy and sell).
        _rOwned[GameRewards] = _rOwned[GameRewards].add(
            rLiquidityGame
        );

        _tOwned[GameRewards] = _tOwned[GameRewards].add(
            tLiquidityGameAmount
        );

        //  here we transfer 2% to token holders

        for (uint256 i = 0; i < TokenHolders.length; i++) {
            _rOwned[TokenHolders[i]] = _rOwned[TokenHolders[i]].add(
                rLiquidityPerHolder
            );

            _tOwned[TokenHolders[i]] = _tOwned[TokenHolders[i]].add(
                tLiquidityPerHolder
            );
        }
        //  here we transfer 5% to PartnerContractAddress  holders

        _rOwned[PartnerContractAddress] = _rOwned[PartnerContractAddress].add(
            rLiquidityPartner
        );
        _tOwned[PartnerContractAddress] = _tOwned[PartnerContractAddress].add(
            tLiquidityPartnerHolder
        );
    }

    function _takeBotLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquiditybotHolder = tLiquidity.mul(currentRate);
        uint256 rLiquidityPerbotHolder = rLiquiditybotHolder /
            TokenHolders.length;
        uint256 tLiquidityPerbotHolder = tLiquidity / TokenHolders.length;

        for (uint256 i = 0; i < TokenHolders.length; i++) {
            _rOwned[TokenHolders[i]] = _rOwned[TokenHolders[i]].add(
                rLiquidityPerbotHolder
            );

            _tOwned[TokenHolders[i]] = _tOwned[TokenHolders[i]].add(
                tLiquidityPerbotHolder
            );
        }
    }

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

    function _calculateLiquidityFee(uint256 _amount, bool isBot)
        private
        view
        returns (uint256)
    {
        if (isBot) {
            return _amount.mul(_botliquidityFee).div(10**2);
        } else {
            return _amount.mul(_liquidityFee).div(10**2);
        }
    }

    function _removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function _restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_BotAddress","type":"address"}],"name":"BotAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ContractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_changeGameRewardAddress","type":"address"}],"name":"GameRewardsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bridgeAddress","type":"address"}],"name":"addBridgeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContractAddress","type":"address"}],"name":"addNftContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_partnerContractaddress","type":"address"}],"name":"addPartnerContractAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenHolders","type":"address"}],"name":"addTokenHolders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"name":"cleanOldTokenHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEthBridgeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPartnerContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_changeStakingAddress","type":"address"}],"name":"stakingRewardContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

60a060405273683dea848582ec23efbff4bbe9f870c5c238844f6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735ef52d199f2d5cb5fd5af0e104fd05dc7e7e0b36600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000bd919062000c2f565b6509184e72a000620000d0919062000d6c565b600019620000df919062000e1f565b600019620000ee919062000dcd565b600e55601054601155600a6012556012546013556000601560146101000a81548160ff0219169083151502179055503480156200012a57600080fd5b506200013b62000b6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060006064600e5462000184919062000b9c565b9050600060646009600a6200019a919062000c2f565b6509184e72a000620001ad919062000d6c565b620001b9919062000b9c565b90506000600183620001cc919062000d6c565b90506000600183620001df919062000d6c565b90506000600285620001f2919062000d6c565b9050600060028562000205919062000d6c565b9050600060048762000218919062000d6c565b905060006004876200022b919062000d6c565b905060006008896200023e919062000d6c565b9050600060088962000251919062000d6c565b9050600060508b62000264919062000d6c565b9050600060508b62000277919062000d6c565b905081600860006200028e62000b6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002dc62000b6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200033b919062000b7f565b60405180910390a38360086000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516200042b919062000b7f565b60405180910390a38960086000738b694c1c3339b77148614a0334d93453873a014873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550738b694c1c3339b77148614a0334d93453873a014873ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b604051620004ff919062000b7f565b60405180910390a389600860007329c7d6de798821013f6bfd9eb82bc81814dcc74573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507329c7d6de798821013f6bfd9eb82bc81814dcc74573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b604051620005d3919062000b7f565b60405180910390a385600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051620006c0919062000b7f565b60405180910390a387600860007333663752493958b7a7b19de530bd03582326c48473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507333663752493958b7a7b19de530bd03582326c48473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405162000794919062000b7f565b60405180910390a3856008600073cf3584ed03fb17637981b77d9a352c793ea8d7ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073cf3584ed03fb17637981b77d9a352c793ea8d7ad73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405162000868919062000b7f565b60405180910390a36002738b694c1c3339b77148614a0334d93453873a01489080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060027329c7d6de798821013f6bfd9eb82bc81814dcc7459080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060027333663752493958b7a7b19de530bd03582326c4849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600273cf3584ed03fb17637981b77d9a352c793ea8d7ad9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050505062000ec2565b600033905090565b62000b798162000e08565b82525050565b600060208201905062000b96600083018462000b6e565b92915050565b600062000ba98262000e08565b915062000bb68362000e08565b92508262000bc95762000bc862000e86565b5b828204905092915050565b6000808291508390505b600185111562000c265780860481111562000bfe5762000bfd62000e57565b5b600185161562000c0e5780820291505b808102905062000c1e8562000eb5565b945062000bde565b94509492505050565b600062000c3c8262000e08565b915062000c498362000e12565b925062000c787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c80565b905092915050565b60008262000c92576001905062000d65565b8162000ca2576000905062000d65565b816001811462000cbb576002811462000cc65762000cfc565b600191505062000d65565b60ff84111562000cdb5762000cda62000e57565b5b8360020a91508482111562000cf55762000cf462000e57565b5b5062000d65565b5060208310610133831016604e8410600b841016171562000d365782820a90508381111562000d305762000d2f62000e57565b5b62000d65565b62000d45848484600162000bd4565b9250905081840481111562000d5f5762000d5e62000e57565b5b81810290505b9392505050565b600062000d798262000e08565b915062000d868362000e08565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dc25762000dc162000e57565b5b828202905092915050565b600062000dda8262000e08565b915062000de78362000e08565b92508282101562000dfd5762000dfc62000e57565b5b828203905092915050565b6000819050919050565b600060ff82169050919050565b600062000e2c8262000e08565b915062000e398362000e08565b92508262000e4c5762000e4b62000e86565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b60805160601c615f5d62000ee8600039600081816113980152611bab0152615f5d6000f3fe6080604052600436106101c65760003560e01c8063699aeaa7116100f757806395d89b4111610095578063d4b8a0d311610064578063d4b8a0d314610685578063dd62ed3e146106b0578063ea2f0b37146106ed578063eda2d42414610716576101cd565b806395d89b41146105c9578063a457c2d7146105f4578063a9059cbb14610631578063c9567bf91461066e576101cd565b806377468d06116100d157806377468d061461050f5780638203f5fe1461054c57806385faaa0114610563578063949a62ed1461058c576101cd565b8063699aeaa71461047e57806370a08231146104a957806375f3dfb5146104e6576101cd565b8063313ce5671161016457806352390c021161013e57806352390c02146103c457806358c3b776146103ed5780635a63fbc9146104165780635e17ae4814610441576101cd565b8063313ce56714610333578063395093511461035e578063437823ec1461039b576101cd565b806318160ddd116101a057806318160ddd1461026357806323b872dd1461028e5780632b1f4ad6146102cb5780632f4e6c8f146102f6576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630c6c6d4b1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e7610741565b6040516101f49190615762565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f91906154ee565b61077e565b6040516102319190615747565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061552a565b61079c565b005b34801561026f57600080fd5b50610278610aa9565b60405161028591906158a4565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b0919061549f565b610acf565b6040516102c29190615747565b60405180910390f35b3480156102d757600080fd5b506102e0610bfe565b6040516102ed9190615703565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190615411565b610c28565b60405161032a9190615747565b60405180910390f35b34801561033f57600080fd5b50610348610ddc565b60405161035591906158bf565b60405180910390f35b34801561036a57600080fd5b50610385600480360381019061038091906154ee565b610de5565b6040516103929190615747565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190615411565b610e98565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190615411565b610f6f565b005b3480156103f957600080fd5b50610414600480360381019061040f9190615411565b61120a565b005b34801561042257600080fd5b5061042b611394565b6040516104389190615703565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190615411565b6113bc565b6040516104759190615703565b60405180910390f35b34801561048a57600080fd5b50610493611517565b6040516104a09190615703565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190615411565b611541565b6040516104dd91906158a4565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190615411565b61162c565b005b34801561051b57600080fd5b5061053660048036038101906105319190615411565b6117b5565b6040516105439190615747565b60405180910390f35b34801561055857600080fd5b50610561611906565b005b34801561056f57600080fd5b5061058a60048036038101906105859190615411565b61200d565b005b34801561059857600080fd5b506105b360048036038101906105ae9190615411565b612197565b6040516105c09190615747565b60405180910390f35b3480156105d557600080fd5b506105de612329565b6040516105eb9190615762565b60405180910390f35b34801561060057600080fd5b5061061b600480360381019061061691906154ee565b612366565b6040516106289190615747565b60405180910390f35b34801561063d57600080fd5b50610658600480360381019061065391906154ee565b612433565b6040516106659190615747565b60405180910390f35b34801561067a57600080fd5b506106836125f7565b005b34801561069157600080fd5b5061069a6126a2565b6040516106a79190615703565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190615463565b6126cc565b6040516106e491906158a4565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190615411565b612753565b005b34801561072257600080fd5b5061072b61282a565b6040516107389190615703565b60405180910390f35b60606040518060400160405280601181526020017f5468696363204672656e7320546f6b656e000000000000000000000000000000815250905090565b600061079261078b612854565b848461285c565b6001905092915050565b6107a4612854565b73ffffffffffffffffffffffffffffffffffffffff166107c2611394565b73ffffffffffffffffffffffffffffffffffffffff1614610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f90615824565b60405180910390fd5b600080600090505b828110156108fa5760028181548110610862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108f290615c04565b915050610820565b506000808390505b600280549050811015610a175760028181548110610949577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600283815481106109ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508180610a0190615c04565b9250508080610a0f90615c04565b915050610902565b5060005b83811015610aa3576002805480610a5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558080610a9b90615c04565b915050610a1b565b50505050565b60006009600a610ab991906159d0565b6509184e72a000610aca9190615aee565b905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be857610be784610b32612854565b610be285604051806060016040528060288152602001615edb60289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b98612854565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a279092919063ffffffff16565b61285c565b5b610bf3848484612a7c565b600190509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c32612854565b73ffffffffffffffffffffffffffffffffffffffff16610c50611394565b73ffffffffffffffffffffffffffffffffffffffff1614610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90615824565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e906157e4565b60405180910390fd5b6002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050919050565b60006009905090565b6000610e8e610df2612854565b84610e8985600a6000610e03612854565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b61285c565b6001905092915050565b610ea0612854565b73ffffffffffffffffffffffffffffffffffffffff16610ebe611394565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90615824565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f77612854565b73ffffffffffffffffffffffffffffffffffffffff16610f95611394565b73ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290615824565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f906157c4565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561114c57611108600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301f565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611212612854565b73ffffffffffffffffffffffffffffffffffffffff16611230611394565b73ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90615824565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906157e4565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60006113c6612854565b73ffffffffffffffffffffffffffffffffffffffff166113e4611394565b73ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190615824565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a2906157e4565b60405180910390fd5b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115dc57600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611627565b611624600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301f565b90505b919050565b611634612854565b73ffffffffffffffffffffffffffffffffffffffff16611652611394565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90615824565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611710906157e4565b60405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906157e4565b60405180910390fd5b611830612854565b73ffffffffffffffffffffffffffffffffffffffff1661184e611394565b73ffffffffffffffffffffffffffffffffffffffff16146118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90615824565b60405180910390fd5b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050919050565b61190e612854565b73ffffffffffffffffffffffffffffffffffffffff1661192c611394565b73ffffffffffffffffffffffffffffffffffffffff1614611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990615824565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e157600080fd5b505afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061543a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7b57600080fd5b505afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab3919061543a565b6040518363ffffffff1660e01b8152600401611ad092919061571e565b602060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b22919061543a565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000738b694c1c3339b77148614a0334d93453873a014873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60007329c7d6de798821013f6bfd9eb82bc81814dcc74573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60007333663752493958b7a7b19de530bd03582326c48473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600073cf3584ed03fb17637981b77d9a352c793ea8d7ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612015612854565b73ffffffffffffffffffffffffffffffffffffffff16612033611394565b73ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090615824565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f1906157e4565b60405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006121a1612854565b73ffffffffffffffffffffffffffffffffffffffff166121bf611394565b73ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90615824565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d906157e4565b60405180910390fd5b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050919050565b60606040518060400160405280600581526020017f5448494343000000000000000000000000000000000000000000000000000000815250905090565b6000612429612373612854565b8461242485604051806060016040528060258152602001615f0360259139600a600061239d612854565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a279092919063ffffffff16565b61285c565b6001905092915050565b6000612447612440612854565b8484612a7c565b600061245284611541565b9050828161246091906158f6565b90506009600a61247091906159d0565b600161247c9190615aee565b81101580156124d55750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561252b5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ec576002849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600191505092915050565b6125ff612854565b73ffffffffffffffffffffffffffffffffffffffff1661261d611394565b73ffffffffffffffffffffffffffffffffffffffff1614612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a90615824565b60405180910390fd5b6013546012819055506011546010819055506001601560146101000a81548160ff021916908315150217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275b612854565b73ffffffffffffffffffffffffffffffffffffffff16612779611394565b73ffffffffffffffffffffffffffffffffffffffff16146127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690615824565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906157a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612933906157a4565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1a91906158a4565b60405180910390a3505050565b6000838311158290612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669190615762565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390615864565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5390615784565b60405180910390fd5b60008111612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9690615844565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c4c5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca25750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf757601560149054906101000a900460ff16612cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ced90615884565b60405180910390fd5b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d9a5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612deb576000612daa85611541565b905060008382612dba9190615b48565b90506009600a612dca91906159d0565b6001612dd69190615aee565b811015612de857612de68661308d565b505b50505b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612e965750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612f405750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f3e5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612f4a57600190505b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612feb5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff557600191505b613002858585848661352e565b5050505050565b6000818361301791906158f6565b905092915050565b6000600e54821115613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615804565b60405180910390fd5b600061307061378a565b905061308581846137b590919063ffffffff16565b915050919050565b600080600280549050905060005b60028054905081101561315b578373ffffffffffffffffffffffffffffffffffffffff16600282815481106130f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131485780915061315b565b808061315390615c04565b91505061309b565b50600280549050811415613173576000915050613529565b600160028054905014156132505760028054806131b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050613529565b60016002805490506132629190615b48565b8114156133385760028054806132a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050613529565b60008190505b60016002805490506133509190615b48565b81101561345d57600260018261336691906158f6565b8154811061339d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028281548110613402577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061345590615c04565b91505061333e565b506002805480613496577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019150505b919050565b8161353c5761353b6137cb565b5b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135df5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135f5576135f08585858461380e565b613775565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136985750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136ae576136a985858584613a70565b613774565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137505750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137665761376185858584613cd2565b613773565b61377285858584613fc9565b5b5b5b81613783576137826141ab565b5b5050505050565b60008060006137976141bf565b915091506137ae81836137b590919063ffffffff16565b9250505090565b600081836137c3919061594c565b905092915050565b60006010541480156137df57506000601254145b156137e95761380c565b601054601181905550601254601381905550600060108190555060006012819055505b565b600080600080600080613821888861457a565b95509550955095509550955061387f88600960008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061391486600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139a985600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139f5816145ee565b6139ff8483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a5c91906158a4565b60405180910390a350505050505050505050565b600080600080600080613a83888861457a565b955095509550955095509550613ae186600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7683600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0b85600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c57816145ee565b613c618483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cbe91906158a4565b60405180910390a350505050505050505050565b600080600080600080613ce5888861457a565b955095509550955095509550613d4388600960008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dd886600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6d83600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0285600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e816145ee565b613f588483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb591906158a4565b60405180910390a350505050505050505050565b600080600080600080613fdc888861457a565b95509550955095509550955061403a86600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140cf85600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086156141265761412181614f0e565b614130565b61412f816145ee565b5b61413a8483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161419791906158a4565b60405180910390a350505050505050505050565b601154601081905550601354601281905550565b6000806000600e54905060006009600a6141d991906159d0565b6509184e72a0006141ea9190615aee565b905060005b600d80549050811015614505578260086000600d848154811061423b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061434f57508160096000600d84815481106142e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561438257600e546009600a61436591906159d0565b6509184e72a0006143769190615aee565b94509450505050614576565b61443860086000600d84815481106143c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846145d890919063ffffffff16565b92506144f060096000600d848154811061447b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836145d890919063ffffffff16565b915080806144fd90615c04565b9150506141ef565b506145396009600a61451791906159d0565b6509184e72a0006145289190615aee565b600e546137b590919063ffffffff16565b82101561456d57600e546009600a61455191906159d0565b6509184e72a0006145629190615aee565b935093505050614576565b81819350935050505b9091565b60008060008060008060008060006145928b8b615240565b92509250925060008060006145b08e86866145ab61378a565b61529b565b9250925092508282828888889b509b509b509b509b509b505050505050509295509295509295565b600081836145e69190615b48565b905092915050565b6000600a826145fd919061594c565b9050600060028261460e9190615aee565b9050600060058361461f9190615aee565b905060006002846146309190615aee565b905060006001856146419190615aee565b9050600061464d61378a565b90506000614664828761532490919063ffffffff16565b9050600060028054905082614679919061594c565b905060006002805490508861468e919061594c565b905060006146a5858961532490919063ffffffff16565b905060006146bc868861532490919063ffffffff16565b905060006146d3878a61532490919063ffffffff16565b90506147498160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148228960096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148fa82600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149d188600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b600280549050811015614d1257614afb866008600060028581548110614a87577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b6008600060028481548110614b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c58856009600060028581548110614be4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b6009600060028481548110614c96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080614d0a90615c04565b915050614a38565b50614d878360086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e608a60096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050505050505050565b614ee982600e546145d890919063ffffffff16565b600e81905550614f0481600f5461300990919063ffffffff16565b600f819055505050565b6000614f1861378a565b90506000614f2f828461532490919063ffffffff16565b9050600060028054905082614f44919061594c565b9050600060028054905085614f59919061594c565b905060005b60028054905081101561523857615021836008600060028581548110614fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860006002848154811061505f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061517e82600960006002858154811061510a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60096000600284815481106151bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061523090615c04565b915050614f5e565b505050505050565b60008060008061524f8661533a565b9050600061525d878761536b565b9050600061528682615278858b6145d890919063ffffffff16565b6145d890919063ffffffff16565b90508083839550955095505050509250925092565b6000806000806152b4858961532490919063ffffffff16565b905060006152cb868961532490919063ffffffff16565b905060006152e2878961532490919063ffffffff16565b9050600061530b826152fd85876145d890919063ffffffff16565b6145d890919063ffffffff16565b9050838184965096509650505050509450945094915050565b600081836153329190615aee565b905092915050565b600061536460646153566010548561532490919063ffffffff16565b6137b590919063ffffffff16565b9050919050565b600081156153a15761539a606461538c601e8661532490919063ffffffff16565b6137b590919063ffffffff16565b90506153cc565b6153c960646153bb6012548661532490919063ffffffff16565b6137b590919063ffffffff16565b90505b92915050565b6000813590506153e181615eac565b92915050565b6000815190506153f681615eac565b92915050565b60008135905061540b81615ec3565b92915050565b60006020828403121561542357600080fd5b6000615431848285016153d2565b91505092915050565b60006020828403121561544c57600080fd5b600061545a848285016153e7565b91505092915050565b6000806040838503121561547657600080fd5b6000615484858286016153d2565b9250506020615495858286016153d2565b9150509250929050565b6000806000606084860312156154b457600080fd5b60006154c2868287016153d2565b93505060206154d3868287016153d2565b92505060406154e4868287016153fc565b9150509250925092565b6000806040838503121561550157600080fd5b600061550f858286016153d2565b9250506020615520858286016153fc565b9150509250929050565b60006020828403121561553c57600080fd5b600061554a848285016153fc565b91505092915050565b61555c81615b7c565b82525050565b61556b81615b8e565b82525050565b600061557c826158da565b61558681856158e5565b9350615596818560208601615bd1565b61559f81615cab565b840191505092915050565b60006155b76023836158e5565b91506155c282615cc9565b604082019050919050565b60006155da601b836158e5565b91506155e582615d18565b602082019050919050565b60006155fd601b836158e5565b915061560882615d41565b602082019050919050565b6000615620601d836158e5565b915061562b82615d6a565b602082019050919050565b6000615643601a836158e5565b915061564e82615d93565b602082019050919050565b60006156666020836158e5565b915061567182615dbc565b602082019050919050565b60006156896029836158e5565b915061569482615de5565b604082019050919050565b60006156ac6025836158e5565b91506156b782615e34565b604082019050919050565b60006156cf6018836158e5565b91506156da82615e83565b602082019050919050565b6156ee81615bba565b82525050565b6156fd81615bc4565b82525050565b60006020820190506157186000830184615553565b92915050565b60006040820190506157336000830185615553565b6157406020830184615553565b9392505050565b600060208201905061575c6000830184615562565b92915050565b6000602082019050818103600083015261577c8184615571565b905092915050565b6000602082019050818103600083015261579d816155aa565b9050919050565b600060208201905081810360008301526157bd816155cd565b9050919050565b600060208201905081810360008301526157dd816155f0565b9050919050565b600060208201905081810360008301526157fd81615613565b9050919050565b6000602082019050818103600083015261581d81615636565b9050919050565b6000602082019050818103600083015261583d81615659565b9050919050565b6000602082019050818103600083015261585d8161567c565b9050919050565b6000602082019050818103600083015261587d8161569f565b9050919050565b6000602082019050818103600083015261589d816156c2565b9050919050565b60006020820190506158b960008301846156e5565b92915050565b60006020820190506158d460008301846156f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061590182615bba565b915061590c83615bba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561594157615940615c4d565b5b828201905092915050565b600061595782615bba565b915061596283615bba565b92508261597257615971615c7c565b5b828204905092915050565b6000808291508390505b60018511156159c7578086048111156159a3576159a2615c4d565b5b60018516156159b25780820291505b80810290506159c085615cbc565b9450615987565b94509492505050565b60006159db82615bba565b91506159e683615bc4565b9250615a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615a1b565b905092915050565b600082615a2b5760019050615ae7565b81615a395760009050615ae7565b8160018114615a4f5760028114615a5957615a88565b6001915050615ae7565b60ff841115615a6b57615a6a615c4d565b5b8360020a915084821115615a8257615a81615c4d565b5b50615ae7565b5060208310610133831016604e8410600b8410161715615abd5782820a905083811115615ab857615ab7615c4d565b5b615ae7565b615aca848484600161597d565b92509050818404811115615ae157615ae0615c4d565b5b81810290505b9392505050565b6000615af982615bba565b9150615b0483615bba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615b3d57615b3c615c4d565b5b828202905092915050565b6000615b5382615bba565b9150615b5e83615bba565b925082821015615b7157615b70615c4d565b5b828203905092915050565b6000615b8782615b9a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015615bef578082015181840152602081019050615bd4565b83811115615bfe576000848401525b50505050565b6000615c0f82615bba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615c4257615c41615c4d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420617070726f7665207a65726f20616464726573730000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f616464726573732063616e2774206265207a65726f2061646472657373000000600082015250565b7f416d6f756e742067726561746572207468616e2072546f74616c000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b615eb581615b7c565b8114615ec057600080fd5b50565b615ecc81615bba565b8114615ed757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bbdde622a2243dcfc78f964cd16a0ab858ef315cd7c30a2613fa7c279c39ce1564736f6c63430008010033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c8063699aeaa7116100f757806395d89b4111610095578063d4b8a0d311610064578063d4b8a0d314610685578063dd62ed3e146106b0578063ea2f0b37146106ed578063eda2d42414610716576101cd565b806395d89b41146105c9578063a457c2d7146105f4578063a9059cbb14610631578063c9567bf91461066e576101cd565b806377468d06116100d157806377468d061461050f5780638203f5fe1461054c57806385faaa0114610563578063949a62ed1461058c576101cd565b8063699aeaa71461047e57806370a08231146104a957806375f3dfb5146104e6576101cd565b8063313ce5671161016457806352390c021161013e57806352390c02146103c457806358c3b776146103ed5780635a63fbc9146104165780635e17ae4814610441576101cd565b8063313ce56714610333578063395093511461035e578063437823ec1461039b576101cd565b806318160ddd116101a057806318160ddd1461026357806323b872dd1461028e5780632b1f4ad6146102cb5780632f4e6c8f146102f6576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630c6c6d4b1461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e7610741565b6040516101f49190615762565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f91906154ee565b61077e565b6040516102319190615747565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061552a565b61079c565b005b34801561026f57600080fd5b50610278610aa9565b60405161028591906158a4565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b0919061549f565b610acf565b6040516102c29190615747565b60405180910390f35b3480156102d757600080fd5b506102e0610bfe565b6040516102ed9190615703565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190615411565b610c28565b60405161032a9190615747565b60405180910390f35b34801561033f57600080fd5b50610348610ddc565b60405161035591906158bf565b60405180910390f35b34801561036a57600080fd5b50610385600480360381019061038091906154ee565b610de5565b6040516103929190615747565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190615411565b610e98565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190615411565b610f6f565b005b3480156103f957600080fd5b50610414600480360381019061040f9190615411565b61120a565b005b34801561042257600080fd5b5061042b611394565b6040516104389190615703565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190615411565b6113bc565b6040516104759190615703565b60405180910390f35b34801561048a57600080fd5b50610493611517565b6040516104a09190615703565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190615411565b611541565b6040516104dd91906158a4565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190615411565b61162c565b005b34801561051b57600080fd5b5061053660048036038101906105319190615411565b6117b5565b6040516105439190615747565b60405180910390f35b34801561055857600080fd5b50610561611906565b005b34801561056f57600080fd5b5061058a60048036038101906105859190615411565b61200d565b005b34801561059857600080fd5b506105b360048036038101906105ae9190615411565b612197565b6040516105c09190615747565b60405180910390f35b3480156105d557600080fd5b506105de612329565b6040516105eb9190615762565b60405180910390f35b34801561060057600080fd5b5061061b600480360381019061061691906154ee565b612366565b6040516106289190615747565b60405180910390f35b34801561063d57600080fd5b50610658600480360381019061065391906154ee565b612433565b6040516106659190615747565b60405180910390f35b34801561067a57600080fd5b506106836125f7565b005b34801561069157600080fd5b5061069a6126a2565b6040516106a79190615703565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190615463565b6126cc565b6040516106e491906158a4565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190615411565b612753565b005b34801561072257600080fd5b5061072b61282a565b6040516107389190615703565b60405180910390f35b60606040518060400160405280601181526020017f5468696363204672656e7320546f6b656e000000000000000000000000000000815250905090565b600061079261078b612854565b848461285c565b6001905092915050565b6107a4612854565b73ffffffffffffffffffffffffffffffffffffffff166107c2611394565b73ffffffffffffffffffffffffffffffffffffffff1614610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f90615824565b60405180910390fd5b600080600090505b828110156108fa5760028181548110610862577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108f290615c04565b915050610820565b506000808390505b600280549050811015610a175760028181548110610949577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600283815481106109ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508180610a0190615c04565b9250508080610a0f90615c04565b915050610902565b5060005b83811015610aa3576002805480610a5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558080610a9b90615c04565b915050610a1b565b50505050565b60006009600a610ab991906159d0565b6509184e72a000610aca9190615aee565b905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be857610be784610b32612854565b610be285604051806060016040528060288152602001615edb60289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b98612854565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a279092919063ffffffff16565b61285c565b5b610bf3848484612a7c565b600190509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c32612854565b73ffffffffffffffffffffffffffffffffffffffff16610c50611394565b73ffffffffffffffffffffffffffffffffffffffff1614610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90615824565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e906157e4565b60405180910390fd5b6002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050919050565b60006009905090565b6000610e8e610df2612854565b84610e8985600a6000610e03612854565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b61285c565b6001905092915050565b610ea0612854565b73ffffffffffffffffffffffffffffffffffffffff16610ebe611394565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90615824565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f77612854565b73ffffffffffffffffffffffffffffffffffffffff16610f95611394565b73ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290615824565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f906157c4565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561114c57611108600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301f565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611212612854565b73ffffffffffffffffffffffffffffffffffffffff16611230611394565b73ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90615824565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906157e4565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f0000000000000000000000003fc9d279c54983b6a696b5aa3a319e150ff34238905090565b60006113c6612854565b73ffffffffffffffffffffffffffffffffffffffff166113e4611394565b73ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190615824565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a2906157e4565b60405180910390fd5b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115dc57600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611627565b611624600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301f565b90505b919050565b611634612854565b73ffffffffffffffffffffffffffffffffffffffff16611652611394565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90615824565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611710906157e4565b60405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906157e4565b60405180910390fd5b611830612854565b73ffffffffffffffffffffffffffffffffffffffff1661184e611394565b73ffffffffffffffffffffffffffffffffffffffff16146118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90615824565b60405180910390fd5b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050919050565b61190e612854565b73ffffffffffffffffffffffffffffffffffffffff1661192c611394565b73ffffffffffffffffffffffffffffffffffffffff1614611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990615824565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e157600080fd5b505afa1580156119f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a19919061543a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7b57600080fd5b505afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab3919061543a565b6040518363ffffffff1660e01b8152600401611ad092919061571e565b602060405180830381600087803b158015611aea57600080fd5b505af1158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b22919061543a565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60007f0000000000000000000000003fc9d279c54983b6a696b5aa3a319e150ff3423873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000738b694c1c3339b77148614a0334d93453873a014873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60007329c7d6de798821013f6bfd9eb82bc81814dcc74573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60007333663752493958b7a7b19de530bd03582326c48473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600073cf3584ed03fb17637981b77d9a352c793ea8d7ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612015612854565b73ffffffffffffffffffffffffffffffffffffffff16612033611394565b73ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090615824565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f1906157e4565b60405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006121a1612854565b73ffffffffffffffffffffffffffffffffffffffff166121bf611394565b73ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90615824565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d906157e4565b60405180910390fd5b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050919050565b60606040518060400160405280600581526020017f5448494343000000000000000000000000000000000000000000000000000000815250905090565b6000612429612373612854565b8461242485604051806060016040528060258152602001615f0360259139600a600061239d612854565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a279092919063ffffffff16565b61285c565b6001905092915050565b6000612447612440612854565b8484612a7c565b600061245284611541565b9050828161246091906158f6565b90506009600a61247091906159d0565b600161247c9190615aee565b81101580156124d55750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561252b5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ec576002849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600191505092915050565b6125ff612854565b73ffffffffffffffffffffffffffffffffffffffff1661261d611394565b73ffffffffffffffffffffffffffffffffffffffff1614612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a90615824565b60405180910390fd5b6013546012819055506011546010819055506001601560146101000a81548160ff021916908315150217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275b612854565b73ffffffffffffffffffffffffffffffffffffffff16612779611394565b73ffffffffffffffffffffffffffffffffffffffff16146127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690615824565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906157a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612933906157a4565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1a91906158a4565b60405180910390a3505050565b6000838311158290612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669190615762565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390615864565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5390615784565b60405180910390fd5b60008111612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9690615844565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c4c5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca25750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf757601560149054906101000a900460ff16612cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ced90615884565b60405180910390fd5b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d9a5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612deb576000612daa85611541565b905060008382612dba9190615b48565b90506009600a612dca91906159d0565b6001612dd69190615aee565b811015612de857612de68661308d565b505b50505b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612e965750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612f405750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f3e5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612f4a57600190505b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612feb5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff557600191505b613002858585848661352e565b5050505050565b6000818361301791906158f6565b905092915050565b6000600e54821115613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615804565b60405180910390fd5b600061307061378a565b905061308581846137b590919063ffffffff16565b915050919050565b600080600280549050905060005b60028054905081101561315b578373ffffffffffffffffffffffffffffffffffffffff16600282815481106130f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131485780915061315b565b808061315390615c04565b91505061309b565b50600280549050811415613173576000915050613529565b600160028054905014156132505760028054806131b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050613529565b60016002805490506132629190615b48565b8114156133385760028054806132a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001915050613529565b60008190505b60016002805490506133509190615b48565b81101561345d57600260018261336691906158f6565b8154811061339d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028281548110613402577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061345590615c04565b91505061333e565b506002805480613496577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019150505b919050565b8161353c5761353b6137cb565b5b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135df5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135f5576135f08585858461380e565b613775565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136985750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136ae576136a985858584613a70565b613774565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137505750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137665761376185858584613cd2565b613773565b61377285858584613fc9565b5b5b5b81613783576137826141ab565b5b5050505050565b60008060006137976141bf565b915091506137ae81836137b590919063ffffffff16565b9250505090565b600081836137c3919061594c565b905092915050565b60006010541480156137df57506000601254145b156137e95761380c565b601054601181905550601254601381905550600060108190555060006012819055505b565b600080600080600080613821888861457a565b95509550955095509550955061387f88600960008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061391486600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139a985600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139f5816145ee565b6139ff8483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a5c91906158a4565b60405180910390a350505050505050505050565b600080600080600080613a83888861457a565b955095509550955095509550613ae186600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7683600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0b85600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c57816145ee565b613c618483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cbe91906158a4565b60405180910390a350505050505050505050565b600080600080600080613ce5888861457a565b955095509550955095509550613d4388600960008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dd886600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6d83600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0285600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e816145ee565b613f588483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fb591906158a4565b60405180910390a350505050505050505050565b600080600080600080613fdc888861457a565b95509550955095509550955061403a86600860008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145d890919063ffffffff16565b600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140cf85600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086156141265761412181614f0e565b614130565b61412f816145ee565b5b61413a8483614ed4565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161419791906158a4565b60405180910390a350505050505050505050565b601154601081905550601354601281905550565b6000806000600e54905060006009600a6141d991906159d0565b6509184e72a0006141ea9190615aee565b905060005b600d80549050811015614505578260086000600d848154811061423b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061434f57508160096000600d84815481106142e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561438257600e546009600a61436591906159d0565b6509184e72a0006143769190615aee565b94509450505050614576565b61443860086000600d84815481106143c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846145d890919063ffffffff16565b92506144f060096000600d848154811061447b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836145d890919063ffffffff16565b915080806144fd90615c04565b9150506141ef565b506145396009600a61451791906159d0565b6509184e72a0006145289190615aee565b600e546137b590919063ffffffff16565b82101561456d57600e546009600a61455191906159d0565b6509184e72a0006145629190615aee565b935093505050614576565b81819350935050505b9091565b60008060008060008060008060006145928b8b615240565b92509250925060008060006145b08e86866145ab61378a565b61529b565b9250925092508282828888889b509b509b509b509b509b505050505050509295509295509295565b600081836145e69190615b48565b905092915050565b6000600a826145fd919061594c565b9050600060028261460e9190615aee565b9050600060058361461f9190615aee565b905060006002846146309190615aee565b905060006001856146419190615aee565b9050600061464d61378a565b90506000614664828761532490919063ffffffff16565b9050600060028054905082614679919061594c565b905060006002805490508861468e919061594c565b905060006146a5858961532490919063ffffffff16565b905060006146bc868861532490919063ffffffff16565b905060006146d3878a61532490919063ffffffff16565b90506147498160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148228960096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148fa82600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149d188600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b600280549050811015614d1257614afb866008600060028581548110614a87577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b6008600060028481548110614b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c58856009600060028581548110614be4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b6009600060028481548110614c96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080614d0a90615c04565b915050614a38565b50614d878360086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e608a60096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050505050505050565b614ee982600e546145d890919063ffffffff16565b600e81905550614f0481600f5461300990919063ffffffff16565b600f819055505050565b6000614f1861378a565b90506000614f2f828461532490919063ffffffff16565b9050600060028054905082614f44919061594c565b9050600060028054905085614f59919061594c565b905060005b60028054905081101561523857615021836008600060028581548110614fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b600860006002848154811061505f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061517e82600960006002858154811061510a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300990919063ffffffff16565b60096000600284815481106151bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061523090615c04565b915050614f5e565b505050505050565b60008060008061524f8661533a565b9050600061525d878761536b565b9050600061528682615278858b6145d890919063ffffffff16565b6145d890919063ffffffff16565b90508083839550955095505050509250925092565b6000806000806152b4858961532490919063ffffffff16565b905060006152cb868961532490919063ffffffff16565b905060006152e2878961532490919063ffffffff16565b9050600061530b826152fd85876145d890919063ffffffff16565b6145d890919063ffffffff16565b9050838184965096509650505050509450945094915050565b600081836153329190615aee565b905092915050565b600061536460646153566010548561532490919063ffffffff16565b6137b590919063ffffffff16565b9050919050565b600081156153a15761539a606461538c601e8661532490919063ffffffff16565b6137b590919063ffffffff16565b90506153cc565b6153c960646153bb6012548661532490919063ffffffff16565b6137b590919063ffffffff16565b90505b92915050565b6000813590506153e181615eac565b92915050565b6000815190506153f681615eac565b92915050565b60008135905061540b81615ec3565b92915050565b60006020828403121561542357600080fd5b6000615431848285016153d2565b91505092915050565b60006020828403121561544c57600080fd5b600061545a848285016153e7565b91505092915050565b6000806040838503121561547657600080fd5b6000615484858286016153d2565b9250506020615495858286016153d2565b9150509250929050565b6000806000606084860312156154b457600080fd5b60006154c2868287016153d2565b93505060206154d3868287016153d2565b92505060406154e4868287016153fc565b9150509250925092565b6000806040838503121561550157600080fd5b600061550f858286016153d2565b9250506020615520858286016153fc565b9150509250929050565b60006020828403121561553c57600080fd5b600061554a848285016153fc565b91505092915050565b61555c81615b7c565b82525050565b61556b81615b8e565b82525050565b600061557c826158da565b61558681856158e5565b9350615596818560208601615bd1565b61559f81615cab565b840191505092915050565b60006155b76023836158e5565b91506155c282615cc9565b604082019050919050565b60006155da601b836158e5565b91506155e582615d18565b602082019050919050565b60006155fd601b836158e5565b915061560882615d41565b602082019050919050565b6000615620601d836158e5565b915061562b82615d6a565b602082019050919050565b6000615643601a836158e5565b915061564e82615d93565b602082019050919050565b60006156666020836158e5565b915061567182615dbc565b602082019050919050565b60006156896029836158e5565b915061569482615de5565b604082019050919050565b60006156ac6025836158e5565b91506156b782615e34565b604082019050919050565b60006156cf6018836158e5565b91506156da82615e83565b602082019050919050565b6156ee81615bba565b82525050565b6156fd81615bc4565b82525050565b60006020820190506157186000830184615553565b92915050565b60006040820190506157336000830185615553565b6157406020830184615553565b9392505050565b600060208201905061575c6000830184615562565b92915050565b6000602082019050818103600083015261577c8184615571565b905092915050565b6000602082019050818103600083015261579d816155aa565b9050919050565b600060208201905081810360008301526157bd816155cd565b9050919050565b600060208201905081810360008301526157dd816155f0565b9050919050565b600060208201905081810360008301526157fd81615613565b9050919050565b6000602082019050818103600083015261581d81615636565b9050919050565b6000602082019050818103600083015261583d81615659565b9050919050565b6000602082019050818103600083015261585d8161567c565b9050919050565b6000602082019050818103600083015261587d8161569f565b9050919050565b6000602082019050818103600083015261589d816156c2565b9050919050565b60006020820190506158b960008301846156e5565b92915050565b60006020820190506158d460008301846156f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061590182615bba565b915061590c83615bba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561594157615940615c4d565b5b828201905092915050565b600061595782615bba565b915061596283615bba565b92508261597257615971615c7c565b5b828204905092915050565b6000808291508390505b60018511156159c7578086048111156159a3576159a2615c4d565b5b60018516156159b25780820291505b80810290506159c085615cbc565b9450615987565b94509492505050565b60006159db82615bba565b91506159e683615bc4565b9250615a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615a1b565b905092915050565b600082615a2b5760019050615ae7565b81615a395760009050615ae7565b8160018114615a4f5760028114615a5957615a88565b6001915050615ae7565b60ff841115615a6b57615a6a615c4d565b5b8360020a915084821115615a8257615a81615c4d565b5b50615ae7565b5060208310610133831016604e8410600b8410161715615abd5782820a905083811115615ab857615ab7615c4d565b5b615ae7565b615aca848484600161597d565b92509050818404811115615ae157615ae0615c4d565b5b81810290505b9392505050565b6000615af982615bba565b9150615b0483615bba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615b3d57615b3c615c4d565b5b828202905092915050565b6000615b5382615bba565b9150615b5e83615bba565b925082821015615b7157615b70615c4d565b5b828203905092915050565b6000615b8782615b9a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015615bef578082015181840152602081019050615bd4565b83811115615bfe576000848401525b50505050565b6000615c0f82615bba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615c4257615c41615c4d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420617070726f7665207a65726f20616464726573730000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f616464726573732063616e2774206265207a65726f2061646472657373000000600082015250565b7f416d6f756e742067726561746572207468616e2072546f74616c000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b615eb581615b7c565b8114615ec057600080fd5b50565b615ecc81615bba565b8114615ed757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bbdde622a2243dcfc78f964cd16a0ab858ef315cd7c30a2613fa7c279c39ce1564736f6c63430008010033

Deployed Bytecode Sourcemap

26904:26408:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37271:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38631:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35562:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37554:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38832:541;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32399:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34881:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37461:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39381:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52982:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40380:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33328:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32741:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35227:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32515:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37659:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33632:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34602:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:957;;;;;;;;;;;;;:::i;:::-;;33908:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34222:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37364:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39691:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37866:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32114:163;;;;;;;;;;;;;:::i;:::-;;32283:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38435:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53103:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32636:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37271:85;37310:13;37343:5;;;;;;;;;;;;;;;;;37336:12;;37271:85;:::o;38631:193::-;38733:4;38755:39;38764:12;:10;:12::i;:::-;38778:7;38787:6;38755:8;:39::i;:::-;38812:4;38805:11;;38631:193;;;;:::o;35562:511::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;35636:21:::1;35673:9:::0;35685:1:::1;35673:13;;35668:143;35692:4;35688:1;:8;35668:143;;;35734:12;35747:1;35734:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35718:31;;35794:5;35764:12;:27;35777:13;35764:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35698:3;;;;;:::i;:::-;;;;35668:143;;;;35821:9;35850::::0;35862:4:::1;35850:16;;35845:131;35872:12;:19;;;;35868:1;:23;35845:131;;;35931:12;35944:1;35931:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35913:12;35926:1;35913:15;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;35961:3;;;;;:::i;:::-;;;;35893;;;;;:::i;:::-;;;;35845:131;;;;35991:9;35986:80;36010:4;36006:1;:8;35986:80;;;36036:12;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36016:3;;;;;:::i;:::-;;;;35986:80;;;;33105:1;;35562:511:::0;:::o;37554:97::-;37609:7;28942:1;28713:2;:13;;;;:::i;:::-;28696:14;:30;;;;:::i;:::-;37629:14;;37554:97;:::o;38832:541::-;38966:4;39001:17;;;;;;;;;;;38987:31;;:10;:31;;;38983:312;;39035:248;39062:6;39087:12;:10;:12::i;:::-;39118:150;39178:6;39118:150;;;;;;;;;;;;;;;;;:11;:19;39130:6;39118:19;;;;;;;;;;;;;;;:33;39138:12;:10;:12::i;:::-;39118:33;;;;;;;;;;;;;;;;:37;;:150;;;;;:::i;:::-;39035:8;:248::i;:::-;38983:312;39305:36;39315:6;39323:9;39334:6;39305:9;:36::i;:::-;39361:4;39354:11;;38832:541;;;;;:::o;32399:110::-;32447:7;32473:18;;;;;;;;;;;32466:25;;32399:110;:::o;34881:270::-;35020:4;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;34987:13:::1;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35042:12:::2;35060:13;35042:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35115:4;35085:12;:27;35098:13;35085:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35139:4;35132:11;;33105:1:::1;34881:270:::0;;;:::o;37461:85::-;37504:5;28942:1;37522:16;;37461:85;:::o;39381:302::-;39498:4;39520:133;39543:12;:10;:12::i;:::-;39570:7;39592:50;39631:10;39592:11;:25;39604:12;:10;:12::i;:::-;39592:25;;;;;;;;;;;;;;;:34;39618:7;39592:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;39520:8;:133::i;:::-;39671:4;39664:11;;39381:302;;;;:::o;52982:113::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;53083:4:::1;53053:18;:27;53072:7;53053:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;52982:113:::0;:::o;40380:335::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40463:11:::1;:20;40475:7;40463:20;;;;;;;;;;;;;;;;;;;;;;;;;40462:21;40454:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40549:1;40530:7;:16;40538:7;40530:16;;;;;;;;;;;;;;;;:20;40526:110;;;40586:38;40607:7;:16;40615:7;40607:16;;;;;;;;;;;;;;;;40586:20;:38::i;:::-;40567:7;:16;40575:7;40567:16;;;;;;;;;;;;;;;:57;;;;40526:110;40669:4;40646:11;:20;40658:7;40646:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;40684:9;40699:7;40684:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40380:335:::0;:::o;33328:236::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;33437:14:::1;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33489:14:::2;33469:17;;:34;;;;;;;;;;;;;;;;;;33550:4;33514:18;:34;33533:14;33514:34;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;33105:1:::1;33328:236:::0;:::o;32741:94::-;32795:7;32822:5;32815:12;;32741:94;:::o;35227:266::-;35384:7;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;35345:19:::1;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35430:19:::2;35409:18;;:40;;;;;;;;;;;;;;;;;;35467:18;;;;;;;;;;;35460:25;;33105:1:::1;35227:266:::0;;;:::o;32515:115::-;32569:7;32595:17;;;;;;;;;;;32588:24;;32515:115;:::o;37659:199::-;37725:7;37749:11;:20;37761:7;37749:20;;;;;;;;;;;;;;;;;;;;;;;;;37745:49;;;37778:7;:16;37786:7;37778:16;;;;;;;;;;;;;;;;37771:23;;;;37745:49;37812:38;37833:7;:16;37841:7;37833:16;;;;;;;;;;;;;;;;37812:20;:38::i;:::-;37805:45;;37659:199;;;;:::o;33632:270::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;33753:24:::1;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33809:24:::2;33795:11;::::0;:38:::2;;;;;;;;;;;;;;;;;;33890:4;33844:18;:44;33863:24;33844:44;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;33105:1:::1;33632:270:::0;:::o;34602:209::-;34732:4;34682:11;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33022:12:::1;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;34777:4:::2;34754:7;:20;34762:11;34754:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34799:4;34792:11;;34602:209:::0;;;;:::o;31149:957::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;31270:35:::1;31341:42;31270:124;;31439:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31421:70;;;31500:4;31507:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31421:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31405:13;;:126;;;;;;;;;;;;;;;;;;31562:16;31544:15;;:34;;;;;;;;;;;;;;;;;;31619:4;31591:18;:25;31610:5;31591:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;31670:4;31634:18;:33;31661:4;31634:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;31717:4;31685:18;:29;27035:42;31685:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31767:4;31732:18;:32;27116:42;31732:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31816:4;31782:18;:31;31801:11:::0;::::1;;;;;;;;;;31782:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31863:4;31831:18;:29;27273:42;31831:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31917:4;31878:18;:36;27358:42;31878:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;31968:4;31932:18;:33;31951:13;;;;;;;;;;;31932:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;32024:4;31983:18;:38;32002:18;;;;;;;;;;;31983:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;32084:4;32039:18;:42;32058:22;;;;;;;;;;;32039:42;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;33105:1;31149:957::o:0;33908:254::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:21:::1;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34048:21:::2;34034:13;;:35;;;;;;;;;;;;;;;;;;34123:4;34080:18;:41;34099:21;34080:41;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;33105:1:::1;33908:254:::0;:::o;34222:331::-;34391:4;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;34348:23:::1;33200:1;33180:22;;:8;:22;;;;33172:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34438:23:::2;34413:22;;:48;;;;;;;;;;;;;;;;;;34517:4;34472:18;:43;34491:23;34472:43;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;34541:4;34534:11;;33105:1:::1;34222:331:::0;;;:::o;37364:89::-;37405:13;37438:7;;;;;;;;;;;;;;;;;37431:14;;37364:89;:::o;39691:402::-;39813:4;39835:228;39858:12;:10;:12::i;:::-;39885:7;39907:145;39964:15;39907:145;;;;;;;;;;;;;;;;;:11;:25;39919:12;:10;:12::i;:::-;39907:25;;;;;;;;;;;;;;;:34;39933:7;39907:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;39835:8;:228::i;:::-;40081:4;40074:11;;39691:402;;;;:::o;37866:561::-;37973:4;37995:42;38005:12;:10;:12::i;:::-;38019:9;38030:6;37995:9;:42::i;:::-;38050:21;38074:20;38084:9;38074;:20::i;:::-;38050:44;;38137:6;38121:13;:22;;;;:::i;:::-;38105:38;;28942:1;28562:2;:13;;;;:::i;:::-;28557:1;:19;;;;:::i;:::-;38174:13;:35;;:71;;;;;38227:7;:18;38235:9;38227:18;;;;;;;;;;;;;;;;;;;;;;;;;38226:19;38174:71;:112;;;;;38263:12;:23;38276:9;38263:23;;;;;;;;;;;;;;;;;;;;;;;;;38262:24;38174:112;38156:242;;;38313:12;38331:9;38313:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38382:4;38356:12;:23;38369:9;38356:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38156:242;38415:4;38408:11;;;37866:561;;;;:::o;32114:163::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;32183:21:::1;;32167:13;:37;;;;32225:15;;32215:7;:25;;;;32265:4;32251:11;;:18;;;;;;;;;;;;;;;;;;32114:163::o:0;32283:110::-;32335:7;32361:22;;;;;;;;;;;32354:29;;32283:110;:::o;38435:188::-;38555:7;38587:11;:19;38599:6;38587:19;;;;;;;;;;;;;;;:28;38607:7;38587:28;;;;;;;;;;;;;;;;38580:35;;38435:188;;;;:::o;53103:112::-;33022:12;:10;:12::i;:::-;33003:31;;:15;:13;:15::i;:::-;:31;;;32981:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;53202:5:::1;53172:18;:27;53191:7;53172:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;53103:112:::0;:::o;32636:97::-;32686:7;32712:13;;;;;;;;;;;32705:20;;32636:97;:::o;32843:98::-;32896:7;32923:10;32916:17;;32843:98;:::o;40723:359::-;40869:1;40851:20;;:6;:20;;;;40843:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40941:1;40922:21;;:7;:21;;;;40914:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41019:6;40988:11;:19;41000:6;40988:19;;;;;;;;;;;;;;;:28;41008:7;40988:28;;;;;;;;;;;;;;;:37;;;;41058:7;41041:33;;41050:6;41041:33;;;41067:6;41041:33;;;;;;:::i;:::-;;;;;;;;40723:359;;;:::o;22066:240::-;22186:7;22244:1;22239;:6;;22247:12;22231:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22286:1;22282;:5;22275:12;;22066:240;;;;;:::o;41090:1343::-;41228:1;41212:18;;:4;:18;;;;41204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41305:1;41291:16;;:2;:16;;;;41283:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41375:1;41366:6;:10;41358:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41433:10;41506:13;;;;;;;;;;;41498:21;;:4;:21;;;:68;;;;;41550:15;;;;;;;;;;;41536:30;;:2;:30;;;;41498:68;:108;;;;;41584:18;:22;41603:2;41584:22;;;;;;;;;;;;;;;;;;;;;;;;;41583:23;41498:108;41480:213;;;41641:11;;;;;;;;;;;41633:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41480:213;41710:7;:13;41718:4;41710:13;;;;;;;;;;;;;;;;;;;;;;;;;41709:14;:36;;;;;41727:12;:18;41740:4;41727:18;;;;;;;;;;;;;;;;;;;;;;;;;41709:36;41705:309;;;41762:29;41794:15;41804:4;41794:9;:15::i;:::-;41762:47;;41824:29;41880:6;41856:21;:30;;;;:::i;:::-;41824:62;;28942:1;28562:2;:13;;;;:::i;:::-;28557:1;:19;;;;:::i;:::-;41905:21;:42;41901:102;;;41968:19;41982:4;41968:13;:19::i;:::-;;41901:102;41705:309;;;42026:12;42120:13;;;;;;;;;;;42112:21;;:4;:21;;;:44;;;;42143:13;;;;;;;;;;;42137:19;;:2;:19;;;42112:44;42111:116;;;;;42176:18;:24;42195:4;42176:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;42204:18;:22;42223:2;42204:22;;;;;;;;;;;;;;;;;;;;;;;;;42176:50;42174:53;42111:116;42093:187;;;42264:4;42254:14;;42093:187;42296:7;:13;42304:4;42296:13;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;42313:7;:11;42321:2;42313:11;;;;;;;;;;;;;;;;;;;;;;;;;42296:28;42292:73;;;42349:4;42341:12;;42292:73;42377:48;42392:4;42398:2;42402:6;42410:7;42419:5;42377:14;:48::i;:::-;41090:1343;;;;;:::o;19787:98::-;19845:7;19876:1;19872;:5;;;;:::i;:::-;19865:12;;19787:98;;;;:::o;40101:271::-;40197:7;40241;;40230;:18;;40222:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;40290:19;40312:10;:8;:10::i;:::-;40290:32;;40340:24;40352:11;40340:7;:11;;:24;;;;:::i;:::-;40333:31;;;40101:271;;;:::o;36238:1025::-;36301:4;36318:19;36340:12;:19;;;;36318:41;;36375:9;36370:188;36394:12;:19;;;;36390:1;:23;36370:188;;;36458:13;36439:32;;:12;36452:1;36439:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;36435:112;;;36506:1;36492:15;;36526:5;;36435:112;36415:3;;;;;:::i;:::-;;;;36370:188;;;;36587:12;:19;;;;36572:11;:34;36568:79;;;36630:5;36623:12;;;;;36568:79;36684:1;36661:12;:19;;;;:24;36657:599;;;36702:12;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36765:5;36735:12;:27;36748:13;36735:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36792:4;36785:11;;;;;36657:599;36855:1;36833:12;:19;;;;:23;;;;:::i;:::-;36818:11;:38;36814:442;;;36873:12;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36936:5;36906:12;:27;36919:13;36906:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36963:4;36956:11;;;;;36814:442;37005:9;37017:11;37005:23;;37000:136;37056:1;37034:12;:19;;;;:23;;;;:::i;:::-;37030:1;:27;37000:136;;;37101:12;37118:1;37114;:5;;;;:::i;:::-;37101:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37083:12;37096:1;37083:15;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;37059:3;;;;;:::i;:::-;;;;37000:136;;;;37150:12;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37213:5;37183:12;:27;37196:13;37183:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37240:4;37233:11;;;36238:1025;;;;:::o;42441:759::-;42618:7;42613:29;;42627:15;:13;:15::i;:::-;42613:29;42659:11;:19;42671:6;42659:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42683:11;:22;42695:9;42683:22;;;;;;;;;;;;;;;;;;;;;;;;;42682:23;42659:46;42655:495;;;42722:55;42744:6;42752:9;42763:6;42771:5;42722:21;:55::i;:::-;42655:495;;;42800:11;:19;42812:6;42800:19;;;;;;;;;;;;;;;;;;;;;;;;;42799:20;:46;;;;;42823:11;:22;42835:9;42823:22;;;;;;;;;;;;;;;;;;;;;;;;;42799:46;42795:355;;;42862:53;42882:6;42890:9;42901:6;42909:5;42862:19;:53::i;:::-;42795:355;;;42937:11;:19;42949:6;42937:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42960:11;:22;42972:9;42960:22;;;;;;;;;;;;;;;;;;;;;;;;;42937:45;42933:217;;;42999:55;43021:6;43029:9;43040:6;43048:5;42999:21;:55::i;:::-;42933:217;;;43087:51;43105:6;43113:9;43124:6;43132:5;43087:17;:51::i;:::-;42933:217;42795:355;42655:495;43167:7;43162:30;;43176:16;:14;:16::i;:::-;43162:30;42441:759;;;;;:::o;48150:164::-;48192:7;48213:15;48230;48249:19;:17;:19::i;:::-;48212:56;;;;48286:20;48298:7;48286;:11;;:20;;;;:::i;:::-;48279:27;;;;48150:164;:::o;20924:98::-;20982:7;21013:1;21009;:5;;;;:::i;:::-;21002:12;;20924:98;;;;:::o;52604:236::-;52663:1;52652:7;;:12;:34;;;;;52685:1;52668:13;;:18;52652:34;52648:47;;;52688:7;;52648:47;52725:7;;52707:15;:25;;;;52767:13;;52743:21;:37;;;;52803:1;52793:7;:11;;;;52831:1;52815:13;:17;;;;52604:236;:::o;44708:714::-;44880:15;44910:23;44948:12;44975:23;45013:12;45040:18;45072:26;45083:7;45092:5;45072:10;:26::i;:::-;44865:233;;;;;;;;;;;;45127:28;45147:7;45127;:15;45135:6;45127:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45109:7;:15;45117:6;45109:15;;;;;;;;;;;;;;;:46;;;;45184:28;45204:7;45184;:15;45192:6;45184:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45166:7;:15;45174:6;45166:15;;;;;;;;;;;;;;;:46;;;;45244:39;45267:15;45244:7;:18;45252:9;45244:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45223:7;:18;45231:9;45223:18;;;;;;;;;;;;;;;:60;;;;45294:26;45309:10;45294:14;:26::i;:::-;45331:23;45343:4;45349;45331:11;:23::i;:::-;45387:9;45370:44;;45379:6;45370:44;;;45398:15;45370:44;;;;;;:::i;:::-;;;;;;;;44708:714;;;;;;;;;;:::o;43974:726::-;44144:15;44174:23;44212:12;44239:23;44277:12;44304:18;44336:26;44347:7;44356:5;44336:10;:26::i;:::-;44129:233;;;;;;;;;;;;44391:28;44411:7;44391;:15;44399:6;44391:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44373:7;:15;44381:6;44373:15;;;;;;;;;;;;;;;:46;;;;44451:39;44474:15;44451:7;:18;44459:9;44451:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44430:7;:18;44438:9;44430:18;;;;;;;;;;;;;;;:60;;;;44522:39;44545:15;44522:7;:18;44530:9;44522:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44501:7;:18;44509:9;44501:18;;;;;;;;;;;;;;;:60;;;;44572:26;44587:10;44572:14;:26::i;:::-;44609:23;44621:4;44627;44609:11;:23::i;:::-;44665:9;44648:44;;44657:6;44648:44;;;44676:15;44648:44;;;;;;:::i;:::-;;;;;;;;43974:726;;;;;;;;;;:::o;45430:785::-;45602:15;45632:23;45670:12;45697:23;45735:12;45762:18;45794:26;45805:7;45814:5;45794:10;:26::i;:::-;45587:233;;;;;;;;;;;;45849:28;45869:7;45849;:15;45857:6;45849:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45831:7;:15;45839:6;45831:15;;;;;;;;;;;;;;;:46;;;;45906:28;45926:7;45906;:15;45914:6;45906:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45888:7;:15;45896:6;45888:15;;;;;;;;;;;;;;;:46;;;;45966:39;45989:15;45966:7;:18;45974:9;45966:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45945:7;:18;45953:9;45945:18;;;;;;;;;;;;;;;:60;;;;46037:39;46060:15;46037:7;:18;46045:9;46037:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46016:7;:18;46024:9;46016:18;;;;;;;;;;;;;;;:60;;;;46087:26;46102:10;46087:14;:26::i;:::-;46124:23;46136:4;46142;46124:11;:23::i;:::-;46180:9;46163:44;;46172:6;46163:44;;;46191:15;46163:44;;;;;;:::i;:::-;;;;;;;;45430:785;;;;;;;;;;:::o;43208:758::-;43376:15;43406:23;43444:12;43471:23;43509:12;43536:18;43568:26;43579:7;43588:5;43568:10;:26::i;:::-;43361:233;;;;;;;;;;;;43623:28;43643:7;43623;:15;43631:6;43623:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43605:7;:15;43613:6;43605:15;;;;;;;;;;;;;;;:46;;;;43685:39;43708:15;43685:7;:18;43693:9;43685:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43664:7;:18;43672:9;43664:18;;;;;;;;;;;;;;;:60;;;;43741:5;43737:126;;;43763:29;43781:10;43763:17;:29::i;:::-;43737:126;;;43825:26;43840:10;43825:14;:26::i;:::-;43737:126;43875:23;43887:4;43893;43875:11;:23::i;:::-;43931:9;43914:44;;43923:6;43914:44;;;43942:15;43914:44;;;;;;:::i;:::-;;;;;;;;43208:758;;;;;;;;;;:::o;52848:126::-;52903:15;;52893:7;:25;;;;52945:21;;52929:13;:37;;;;52848:126::o;48322:605::-;48373:7;48382;48402:15;48420:7;;48402:25;;48438:15;28942:1;28713:2;:13;;;;:::i;:::-;28696:14;:30;;;;:::i;:::-;48438:25;;48479:9;48474:338;48498:9;:16;;;;48494:1;:20;48474:338;;;48582:7;48558;:21;48566:9;48576:1;48566:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48558:21;;;;;;;;;;;;;;;;:31;:83;;;;48634:7;48610;:21;48618:9;48628:1;48618:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48610:21;;;;;;;;;;;;;;;;:31;48558:83;48536:146;;;48665:7;;28942:1;28713:2;:13;;;;:::i;:::-;28696:14;:30;;;;:::i;:::-;48657:25;;;;;;;;;48536:146;48707:34;48719:7;:21;48727:9;48737:1;48727:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48719:21;;;;;;;;;;;;;;;;48707:7;:11;;:34;;;;:::i;:::-;48697:44;;48766:34;48778:7;:21;48786:9;48796:1;48786:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48778:21;;;;;;;;;;;;;;;;48766:7;:11;;:34;;;;:::i;:::-;48756:44;;48516:3;;;;;:::i;:::-;;;;48474:338;;;;48836:20;28942:1;28713:2;:13;;;;:::i;:::-;28696:14;:30;;;;:::i;:::-;48836:7;;:11;;:20;;;;:::i;:::-;48826:7;:30;48822:61;;;48866:7;;28942:1;28713:2;:13;;;;:::i;:::-;28696:14;:30;;;;:::i;:::-;48858:25;;;;;;;;48822:61;48902:7;48911;48894:25;;;;;;48322:605;;;:::o;46378:761::-;46490:7;46512;46534;46556;46578;46600;46650:23;46688:12;46715:18;46747:27;46759:7;46768:5;46747:11;:27::i;:::-;46635:139;;;;;;46786:15;46803:23;46828:12;46844:113;46870:7;46892:4;46911:10;46936;:8;:10::i;:::-;46844:11;:113::i;:::-;46785:172;;;;;;46990:7;47012:15;47042:4;47061:15;47091:4;47110:10;46968:163;;;;;;;;;;;;;;;;;;46378:761;;;;;;;;:::o;20168:98::-;20226:7;20257:1;20253;:5;;;;:::i;:::-;20246:12;;20168:98;;;;:::o;49014:2447::-;49077:22;49115:2;49102:10;:15;;;;:::i;:::-;49077:40;;49128:24;27903:1;49155:14;:33;;;;:::i;:::-;49128:60;;49199:31;28002:1;49233:14;:54;;;;:::i;:::-;49199:88;;49298:27;27950:1;49328:14;:36;;;;:::i;:::-;49298:66;;49375:28;28047:1;49406:14;:34;;;;:::i;:::-;49375:65;;49513:19;49535:10;:8;:10::i;:::-;49513:32;;49556:24;49583:33;49604:11;49583:16;:20;;:33;;;;:::i;:::-;49556:60;;49627:27;49676:12;:19;;;;49657:16;:38;;;;:::i;:::-;49627:68;;49706:27;49755:12;:19;;;;49736:16;:38;;;;:::i;:::-;49706:68;;49847:25;49875:40;49903:11;49875:23;:27;;:40;;;;:::i;:::-;49847:68;;49995:22;50020:37;50045:11;50020:20;:24;;:37;;;;:::i;:::-;49995:62;;50130:21;50154:36;50178:11;50154:19;:23;;:36;;;;:::i;:::-;50130:60;;50289:70;50335:13;50289:7;:27;50297:18;;;;;;;;;;;50289:27;;;;;;;;;;;;;;;;:31;;:70;;;;:::i;:::-;50259:7;:27;50267:18;;;;;;;;;;;50259:27;;;;;;;;;;;;;;;:100;;;;50402:76;50448:19;50402:7;:27;50410:18;;;;;;;;;;;50402:27;;;;;;;;;;;;;;;;:31;;:76;;;;:::i;:::-;50372:7;:27;50380:18;;;;;;;;;;;50372:27;;;;;;;;;;;;;;;:106;;;;50587:64;50626:14;50587:7;:20;50595:11;;;;;;;;;;;50587:20;;;;;;;;;;;;;;;;:24;;:64;;;;:::i;:::-;50564:7;:20;50572:11;;;;;;;;;;;50564:20;;;;;;;;;;;;;;;:87;;;;50687:70;50726:20;50687:7;:20;50695:11;;;;;;;;;;;50687:20;;;;;;;;;;;;;;;;:24;;:70;;;;:::i;:::-;50664:7;:20;50672:11;;;;;;;;;;;50664:20;;;;;;;;;;;;;;;:93;;;;50827:9;50822:310;50846:12;:19;;;;50842:1;:23;50822:310;;;50914:81;50961:19;50914:7;:24;50922:12;50935:1;50922:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50914:24;;;;;;;;;;;;;;;;:28;;:81;;;;:::i;:::-;50887:7;:24;50895:12;50908:1;50895:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50887:24;;;;;;;;;;;;;;;:108;;;;51039:81;51086:19;51039:7;:24;51047:12;51060:1;51047:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51039:24;;;;;;;;;;;;;;;;:28;;:81;;;;:::i;:::-;51012:7;:24;51020:12;51033:1;51020:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51012:24;;;;;;;;;;;;;;;:108;;;;50867:3;;;;;:::i;:::-;;;;50822:310;;;;51246:78;51296:17;51246:7;:31;51254:22;;;;;;;;;;;51246:31;;;;;;;;;;;;;;;;:35;;:78;;;;:::i;:::-;51212:7;:31;51220:22;;;;;;;;;;;51212:31;;;;;;;;;;;;;;;:112;;;;51369:84;51419:23;51369:7;:31;51377:22;;;;;;;;;;;51369:31;;;;;;;;;;;;;;;;:35;;:84;;;;:::i;:::-;51335:7;:31;51343:22;;;;;;;;;;;51335:31;;;;;;;;;;;;;;;:118;;;;49014:2447;;;;;;;;;;;;;:::o;46223:147::-;46301:17;46313:4;46301:7;;:11;;:17;;;;:::i;:::-;46291:7;:27;;;;46342:20;46357:4;46342:10;;:14;;:20;;;;:::i;:::-;46329:10;:33;;;;46223:147;;:::o;51469:676::-;51535:19;51557:10;:8;:10::i;:::-;51535:32;;51578:27;51608;51623:11;51608:10;:14;;:27;;;;:::i;:::-;51578:57;;51646:30;51714:12;:19;;;;51679;:54;;;;:::i;:::-;51646:87;;51744:30;51790:12;:19;;;;51777:10;:32;;;;:::i;:::-;51744:65;;51827:9;51822:316;51846:12;:19;;;;51842:1;:23;51822:316;;;51914:84;51961:22;51914:7;:24;51922:12;51935:1;51922:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51914:24;;;;;;;;;;;;;;;;:28;;:84;;;;:::i;:::-;51887:7;:24;51895:12;51908:1;51895:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51887:24;;;;;;;;;;;;;;;:111;;;;52042:84;52089:22;52042:7;:24;52050:12;52063:1;52050:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52042:24;;;;;;;;;;;;;;;;:28;;:84;;;;:::i;:::-;52015:7;:24;52023:12;52036:1;52023:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52015:24;;;;;;;;;;;;;;;:111;;;;51867:3;;;;;:::i;:::-;;;;51822:316;;;;51469:676;;;;;:::o;47147:433::-;47260:7;47282;47304;47339:12;47354:25;47371:7;47354:16;:25::i;:::-;47339:40;;47390:18;47411:38;47434:7;47443:5;47411:22;:38::i;:::-;47390:59;;47460:23;47486:33;47508:10;47486:17;47498:4;47486:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;47460:59;;47538:15;47555:4;47561:10;47530:42;;;;;;;;;47147:433;;;;;:::o;47588:554::-;47787:7;47809;47831;47866:15;47884:24;47896:11;47884:7;:11;;:24;;;;:::i;:::-;47866:42;;47919:12;47934:21;47943:11;47934:4;:8;;:21;;;;:::i;:::-;47919:36;;47966:18;47987:27;48002:11;47987:10;:14;;:27;;;;:::i;:::-;47966:48;;48025:23;48051:33;48073:10;48051:17;48063:4;48051:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;48025:59;;48103:7;48112:15;48129:4;48095:39;;;;;;;;;;47588:554;;;;;;;;:::o;20525:98::-;20583:7;20614:1;20610;:5;;;;:::i;:::-;20603:12;;20525:98;;;;:::o;52153:131::-;52218:7;52245:31;52270:5;52245:20;52257:7;;52245;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;52238:38;;52153:131;;;:::o;52292:304::-;52402:7;52431:5;52427:162;;;52460:40;52494:5;52460:29;29196:2;52460:7;:11;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;52453:47;;;;52427:162;52540:37;52571:5;52540:26;52552:13;;52540:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;52533:44;;52292:304;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:139::-;;385:6;372:20;363:29;;401:33;428:5;401:33;:::i;:::-;353:87;;;;:::o;446:262::-;;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;613:1;638:53;683:7;674:6;663:9;659:22;638:53;:::i;:::-;628:63;;584:117;512:196;;;;:::o;714:284::-;;833:2;821:9;812:7;808:23;804:32;801:2;;;849:1;846;839:12;801:2;892:1;917:64;973:7;964:6;953:9;949:22;917:64;:::i;:::-;907:74;;863:128;791:207;;;;:::o;1004:407::-;;;1129:2;1117:9;1108:7;1104:23;1100:32;1097:2;;;1145:1;1142;1135:12;1097:2;1188:1;1213:53;1258:7;1249:6;1238:9;1234:22;1213:53;:::i;:::-;1203:63;;1159:117;1315:2;1341:53;1386:7;1377:6;1366:9;1362:22;1341:53;:::i;:::-;1331:63;;1286:118;1087:324;;;;;:::o;1417:552::-;;;;1559:2;1547:9;1538:7;1534:23;1530:32;1527:2;;;1575:1;1572;1565:12;1527:2;1618:1;1643:53;1688:7;1679:6;1668:9;1664:22;1643:53;:::i;:::-;1633:63;;1589:117;1745:2;1771:53;1816:7;1807:6;1796:9;1792:22;1771:53;:::i;:::-;1761:63;;1716:118;1873:2;1899:53;1944:7;1935:6;1924:9;1920:22;1899:53;:::i;:::-;1889:63;;1844:118;1517:452;;;;;:::o;1975:407::-;;;2100:2;2088:9;2079:7;2075:23;2071:32;2068:2;;;2116:1;2113;2106:12;2068:2;2159:1;2184:53;2229:7;2220:6;2209:9;2205:22;2184:53;:::i;:::-;2174:63;;2130:117;2286:2;2312:53;2357:7;2348:6;2337:9;2333:22;2312:53;:::i;:::-;2302:63;;2257:118;2058:324;;;;;:::o;2388:262::-;;2496:2;2484:9;2475:7;2471:23;2467:32;2464:2;;;2512:1;2509;2502:12;2464:2;2555:1;2580:53;2625:7;2616:6;2605:9;2601:22;2580:53;:::i;:::-;2570:63;;2526:117;2454:196;;;;:::o;2656:118::-;2743:24;2761:5;2743:24;:::i;:::-;2738:3;2731:37;2721:53;;:::o;2780:109::-;2861:21;2876:5;2861:21;:::i;:::-;2856:3;2849:34;2839:50;;:::o;2895:364::-;;3011:39;3044:5;3011:39;:::i;:::-;3066:71;3130:6;3125:3;3066:71;:::i;:::-;3059:78;;3146:52;3191:6;3186:3;3179:4;3172:5;3168:16;3146:52;:::i;:::-;3223:29;3245:6;3223:29;:::i;:::-;3218:3;3214:39;3207:46;;2987:272;;;;;:::o;3265:366::-;;3428:67;3492:2;3487:3;3428:67;:::i;:::-;3421:74;;3504:93;3593:3;3504:93;:::i;:::-;3622:2;3617:3;3613:12;3606:19;;3411:220;;;:::o;3637:366::-;;3800:67;3864:2;3859:3;3800:67;:::i;:::-;3793:74;;3876:93;3965:3;3876:93;:::i;:::-;3994:2;3989:3;3985:12;3978:19;;3783:220;;;:::o;4009:366::-;;4172:67;4236:2;4231:3;4172:67;:::i;:::-;4165:74;;4248:93;4337:3;4248:93;:::i;:::-;4366:2;4361:3;4357:12;4350:19;;4155:220;;;:::o;4381:366::-;;4544:67;4608:2;4603:3;4544:67;:::i;:::-;4537:74;;4620:93;4709:3;4620:93;:::i;:::-;4738:2;4733:3;4729:12;4722:19;;4527:220;;;:::o;4753:366::-;;4916:67;4980:2;4975:3;4916:67;:::i;:::-;4909:74;;4992:93;5081:3;4992:93;:::i;:::-;5110:2;5105:3;5101:12;5094:19;;4899:220;;;:::o;5125:366::-;;5288:67;5352:2;5347:3;5288:67;:::i;:::-;5281:74;;5364:93;5453:3;5364:93;:::i;:::-;5482:2;5477:3;5473:12;5466:19;;5271:220;;;:::o;5497:366::-;;5660:67;5724:2;5719:3;5660:67;:::i;:::-;5653:74;;5736:93;5825:3;5736:93;:::i;:::-;5854:2;5849:3;5845:12;5838:19;;5643:220;;;:::o;5869:366::-;;6032:67;6096:2;6091:3;6032:67;:::i;:::-;6025:74;;6108:93;6197:3;6108:93;:::i;:::-;6226:2;6221:3;6217:12;6210:19;;6015:220;;;:::o;6241:366::-;;6404:67;6468:2;6463:3;6404:67;:::i;:::-;6397:74;;6480:93;6569:3;6480:93;:::i;:::-;6598:2;6593:3;6589:12;6582:19;;6387:220;;;:::o;6613:118::-;6700:24;6718:5;6700:24;:::i;:::-;6695:3;6688:37;6678:53;;:::o;6737:112::-;6820:22;6836:5;6820:22;:::i;:::-;6815:3;6808:35;6798:51;;:::o;6855:222::-;;6986:2;6975:9;6971:18;6963:26;;6999:71;7067:1;7056:9;7052:17;7043:6;6999:71;:::i;:::-;6953:124;;;;:::o;7083:332::-;;7242:2;7231:9;7227:18;7219:26;;7255:71;7323:1;7312:9;7308:17;7299:6;7255:71;:::i;:::-;7336:72;7404:2;7393:9;7389:18;7380:6;7336:72;:::i;:::-;7209:206;;;;;:::o;7421:210::-;;7546:2;7535:9;7531:18;7523:26;;7559:65;7621:1;7610:9;7606:17;7597:6;7559:65;:::i;:::-;7513:118;;;;:::o;7637:313::-;;7788:2;7777:9;7773:18;7765:26;;7837:9;7831:4;7827:20;7823:1;7812:9;7808:17;7801:47;7865:78;7938:4;7929:6;7865:78;:::i;:::-;7857:86;;7755:195;;;;:::o;7956:419::-;;8160:2;8149:9;8145:18;8137:26;;8209:9;8203:4;8199:20;8195:1;8184:9;8180:17;8173:47;8237:131;8363:4;8237:131;:::i;:::-;8229:139;;8127:248;;;:::o;8381:419::-;;8585:2;8574:9;8570:18;8562:26;;8634:9;8628:4;8624:20;8620:1;8609:9;8605:17;8598:47;8662:131;8788:4;8662:131;:::i;:::-;8654:139;;8552:248;;;:::o;8806:419::-;;9010:2;8999:9;8995:18;8987:26;;9059:9;9053:4;9049:20;9045:1;9034:9;9030:17;9023:47;9087:131;9213:4;9087:131;:::i;:::-;9079:139;;8977:248;;;:::o;9231:419::-;;9435:2;9424:9;9420:18;9412:26;;9484:9;9478:4;9474:20;9470:1;9459:9;9455:17;9448:47;9512:131;9638:4;9512:131;:::i;:::-;9504:139;;9402:248;;;:::o;9656:419::-;;9860:2;9849:9;9845:18;9837:26;;9909:9;9903:4;9899:20;9895:1;9884:9;9880:17;9873:47;9937:131;10063:4;9937:131;:::i;:::-;9929:139;;9827:248;;;:::o;10081:419::-;;10285:2;10274:9;10270:18;10262:26;;10334:9;10328:4;10324:20;10320:1;10309:9;10305:17;10298:47;10362:131;10488:4;10362:131;:::i;:::-;10354:139;;10252:248;;;:::o;10506:419::-;;10710:2;10699:9;10695:18;10687:26;;10759:9;10753:4;10749:20;10745:1;10734:9;10730:17;10723:47;10787:131;10913:4;10787:131;:::i;:::-;10779:139;;10677:248;;;:::o;10931:419::-;;11135:2;11124:9;11120:18;11112:26;;11184:9;11178:4;11174:20;11170:1;11159:9;11155:17;11148:47;11212:131;11338:4;11212:131;:::i;:::-;11204:139;;11102:248;;;:::o;11356:419::-;;11560:2;11549:9;11545:18;11537:26;;11609:9;11603:4;11599:20;11595:1;11584:9;11580:17;11573:47;11637:131;11763:4;11637:131;:::i;:::-;11629:139;;11527:248;;;:::o;11781:222::-;;11912:2;11901:9;11897:18;11889:26;;11925:71;11993:1;11982:9;11978:17;11969:6;11925:71;:::i;:::-;11879:124;;;;:::o;12009:214::-;;12136:2;12125:9;12121:18;12113:26;;12149:67;12213:1;12202:9;12198:17;12189:6;12149:67;:::i;:::-;12103:120;;;;:::o;12229:99::-;;12315:5;12309:12;12299:22;;12288:40;;;:::o;12334:169::-;;12452:6;12447:3;12440:19;12492:4;12487:3;12483:14;12468:29;;12430:73;;;;:::o;12509:305::-;;12568:20;12586:1;12568:20;:::i;:::-;12563:25;;12602:20;12620:1;12602:20;:::i;:::-;12597:25;;12756:1;12688:66;12684:74;12681:1;12678:81;12675:2;;;12762:18;;:::i;:::-;12675:2;12806:1;12803;12799:9;12792:16;;12553:261;;;;:::o;12820:185::-;;12877:20;12895:1;12877:20;:::i;:::-;12872:25;;12911:20;12929:1;12911:20;:::i;:::-;12906:25;;12950:1;12940:2;;12955:18;;:::i;:::-;12940:2;12997:1;12994;12990:9;12985:14;;12862:143;;;;:::o;13011:848::-;;;13103:6;13094:15;;13127:5;13118:14;;13141:712;13162:1;13152:8;13149:15;13141:712;;;13257:4;13252:3;13248:14;13242:4;13239:24;13236:2;;;13266:18;;:::i;:::-;13236:2;13316:1;13306:8;13302:16;13299:2;;;13731:4;13724:5;13720:16;13711:25;;13299:2;13781:4;13775;13771:15;13763:23;;13811:32;13834:8;13811:32;:::i;:::-;13799:44;;13141:712;;;13084:775;;;;;;;:::o;13865:281::-;;13947:23;13965:4;13947:23;:::i;:::-;13939:31;;13991:25;14007:8;13991:25;:::i;:::-;13979:37;;14035:104;14072:66;14062:8;14056:4;14035:104;:::i;:::-;14026:113;;13929:217;;;;:::o;14152:1073::-;;14397:8;14387:2;;14418:1;14409:10;;14420:5;;14387:2;14446:4;14436:2;;14463:1;14454:10;;14465:5;;14436:2;14532:4;14580:1;14575:27;;;;14616:1;14611:191;;;;14525:277;;14575:27;14593:1;14584:10;;14595:5;;;14611:191;14656:3;14646:8;14643:17;14640:2;;;14663:18;;:::i;:::-;14640:2;14712:8;14709:1;14705:16;14696:25;;14747:3;14740:5;14737:14;14734:2;;;14754:18;;:::i;:::-;14734:2;14787:5;;;14525:277;;14911:2;14901:8;14898:16;14892:3;14886:4;14883:13;14879:36;14861:2;14851:8;14848:16;14843:2;14837:4;14834:12;14830:35;14814:111;14811:2;;;14967:8;14961:4;14957:19;14948:28;;15002:3;14995:5;14992:14;14989:2;;;15009:18;;:::i;:::-;14989:2;15042:5;;14811:2;15082:42;15120:3;15110:8;15104:4;15101:1;15082:42;:::i;:::-;15067:57;;;;15156:4;15151:3;15147:14;15140:5;15137:25;15134:2;;;15165:18;;:::i;:::-;15134:2;15214:4;15207:5;15203:16;15194:25;;14212:1013;;;;;;:::o;15231:348::-;;15294:20;15312:1;15294:20;:::i;:::-;15289:25;;15328:20;15346:1;15328:20;:::i;:::-;15323:25;;15516:1;15448:66;15444:74;15441:1;15438:81;15433:1;15426:9;15419:17;15415:105;15412:2;;;15523:18;;:::i;:::-;15412:2;15571:1;15568;15564:9;15553:20;;15279:300;;;;:::o;15585:191::-;;15645:20;15663:1;15645:20;:::i;:::-;15640:25;;15679:20;15697:1;15679:20;:::i;:::-;15674:25;;15718:1;15715;15712:8;15709:2;;;15723:18;;:::i;:::-;15709:2;15768:1;15765;15761:9;15753:17;;15630:146;;;;:::o;15782:96::-;;15848:24;15866:5;15848:24;:::i;:::-;15837:35;;15827:51;;;:::o;15884:90::-;;15961:5;15954:13;15947:21;15936:32;;15926:48;;;:::o;15980:126::-;;16057:42;16050:5;16046:54;16035:65;;16025:81;;;:::o;16112:77::-;;16178:5;16167:16;;16157:32;;;:::o;16195:86::-;;16270:4;16263:5;16259:16;16248:27;;16238:43;;;:::o;16287:307::-;16355:1;16365:113;16379:6;16376:1;16373:13;16365:113;;;16464:1;16459:3;16455:11;16449:18;16445:1;16440:3;16436:11;16429:39;16401:2;16398:1;16394:10;16389:15;;16365:113;;;16496:6;16493:1;16490:13;16487:2;;;16576:1;16567:6;16562:3;16558:16;16551:27;16487:2;16336:258;;;;:::o;16600:233::-;;16662:24;16680:5;16662:24;:::i;:::-;16653:33;;16708:66;16701:5;16698:77;16695:2;;;16778:18;;:::i;:::-;16695:2;16825:1;16818:5;16814:13;16807:20;;16643:190;;;:::o;16839:180::-;16887:77;16884:1;16877:88;16984:4;16981:1;16974:15;17008:4;17005:1;16998:15;17025:180;17073:77;17070:1;17063:88;17170:4;17167:1;17160:15;17194:4;17191:1;17184:15;17211:102;;17303:2;17299:7;17294:2;17287:5;17283:14;17279:28;17269:38;;17259:54;;;:::o;17319:102::-;;17408:5;17405:1;17401:13;17380:34;;17370:51;;;:::o;17427:222::-;17567:34;17563:1;17555:6;17551:14;17544:58;17636:5;17631:2;17623:6;17619:15;17612:30;17533:116;:::o;17655:177::-;17795:29;17791:1;17783:6;17779:14;17772:53;17761:71;:::o;17838:177::-;17978:29;17974:1;17966:6;17962:14;17955:53;17944:71;:::o;18021:179::-;18161:31;18157:1;18149:6;18145:14;18138:55;18127:73;:::o;18206:176::-;18346:28;18342:1;18334:6;18330:14;18323:52;18312:70;:::o;18388:182::-;18528:34;18524:1;18516:6;18512:14;18505:58;18494:76;:::o;18576:228::-;18716:34;18712:1;18704:6;18700:14;18693:58;18785:11;18780:2;18772:6;18768:15;18761:36;18682:122;:::o;18810:224::-;18950:34;18946:1;18938:6;18934:14;18927:58;19019:7;19014:2;19006:6;19002:15;18995:32;18916:118;:::o;19040:174::-;19180:26;19176:1;19168:6;19164:14;19157:50;19146:68;:::o;19220:122::-;19293:24;19311:5;19293:24;:::i;:::-;19286:5;19283:35;19273:2;;19332:1;19329;19322:12;19273:2;19263:79;:::o;19348:122::-;19421:24;19439:5;19421:24;:::i;:::-;19414:5;19411:35;19401:2;;19460:1;19457;19450:12;19401:2;19391:79;:::o

Swarm Source

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