S Price: $0.552886 (+3.57%)

Token

Equalizer Diamonds TEST (Test DIAMONDS)

Overview

Max Total Supply

10,000,000 Test DIAMONDS

Holders

5

Total Transfers

-

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
DIAMONDS

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-01-31
*/

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

// SPDX-License-Identifier: Unlicensed
// Inspired by https://reflect.finance/
pragma solidity 0.8.0;



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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

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

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

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

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

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

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

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

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    struct Fees {
        uint256 reflectFee;
        uint256 rebalanceFee;
        uint256 burnFee;
    }

    address private DiamondsAddress;
    address private immutable LCX; 

    IUniswapV2Router02 public immutable UniswapV2Router;
    // IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    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;

    address private constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e16;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Equalizer Diamonds TEST";
    string private constant _symbol = "Test DIAMONDS";
    uint8 private constant _decimals = 9;

    uint256 private _reflectionFee = 70;
    uint256 private _rebalancingFee = 0;
    uint256 private _burningFee = 60;

    event RebalanceAndBurn(uint256, uint256, uint256);
    event SetDiamondsAddress(address);
    event ApproveDiamondsAddress(address, address, uint256);
    event ExcludeAccount(address);
    event IncludeAccount(address);
    event ChangeReflectionFee(uint256);
    event ChangeReBalancingFee(uint256);
    event ChangeBurnFee(uint256);
    event ExcludeFromFee(address);
    event IncludeInFee(address);

    constructor(address _lcxAddress, address _uniswapV2Address) {
        require(_lcxAddress != address(0), "Address should not be zero address");
        require(_uniswapV2Address != address(0), "Address should not be zero address");
        LCX = _lcxAddress;
        UniswapV2Router = IUniswapV2Router02(_uniswapV2Address);
        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_uniswapV2Address] = true;
        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

    function setDiamondsAddress(address _diamonds) external onlyOwner {
        require(_diamonds != address(0), "Address should not be zero address");
        DiamondsAddress = address(_diamonds);
        emit SetDiamondsAddress(_diamonds);
    }

    function approveDiamondSC() external onlyOwner returns (bool) {
        _approve(msg.sender, DiamondsAddress, _tTotal);
        emit ApproveDiamondsAddress(msg.sender, DiamondsAddress, _tTotal);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue)
        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 isExcluded(address account) external view returns (bool) {
        return _isExcluded[account];
    }

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

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

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

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

    function excludeAccount(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);
        emit ExcludeAccount(account);
    }

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 currentReflectionFee = _reflectionFee;
        uint256 currentRebalancingFee = _rebalancingFee;
        uint256 currentBurningFee = _burningFee;
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            _reflectionFee = 0;
            _rebalancingFee = 0;
            _burningFee = 0;
        }

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

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            _reflectionFee = currentReflectionFee;
            _rebalancingFee = currentRebalancingFee;
            _burningFee = currentBurningFee;
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

    function _reBalanceFee(uint256 rRebalanceFee, uint256 tRebalanceFee)
        private
    {
        _rOwned[address(this)] = _rOwned[address(this)].add(rRebalanceFee);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tRebalanceFee);
    }

    function _burnFee(uint256 rBurnFee, uint256 tBurnFee) private {
        _rOwned[address(this)] = _rOwned[address(this)].add(rBurnFee);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tBurnFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            Fees memory,
            uint256,
            Fees memory
        )
    {
        (uint256 tTransferAmount, Fees memory tFees) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees
        ) = _getRValues(tAmount, tFees, currentRate);
        return (rAmount, rTransferAmount, rFees, tTransferAmount, tFees);
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (uint256, Fees memory)
    {
        Fees memory tFees;
        tFees.reflectFee = tAmount.mul(_reflectionFee).div(1000);
        tFees.rebalanceFee = tAmount.mul(_rebalancingFee).div(1000);
        tFees.burnFee = tAmount.mul(_burningFee).div(1000);
        uint256 tTransferAmount = tAmount
            .sub(tFees.reflectFee)
            .sub(tFees.rebalanceFee)
            .sub(tFees.burnFee);
        return (tTransferAmount, tFees);
    }

    function _getRValues(
        uint256 tAmount,
        Fees memory tFees,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            Fees memory
        )
    {
        Fees memory rFees;
        uint256 rAmount = tAmount.mul(currentRate);
        rFees.reflectFee = tFees.reflectFee.mul(currentRate);
        rFees.rebalanceFee = tFees.rebalanceFee.mul(currentRate);
        rFees.burnFee = tFees.burnFee.mul(currentRate);
        uint256 rTransferAmount = rAmount
            .sub(rFees.reflectFee)
            .sub(rFees.rebalanceFee)
            .sub(rFees.burnFee);
        return (rAmount, rTransferAmount, rFees);
    }

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

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

    function reflectionFee() external view returns (uint256) {
        return _reflectionFee;
    }

    function changeReflectionFee(uint256 _newFee)
        external
        onlyOwner
        returns (bool)
    {
        _reflectionFee = _newFee;
        emit ChangeReflectionFee(_newFee);
        return true;
    }

    function rebalancingFee() external view returns (uint256) {
        return _rebalancingFee;
    }

    function changeReBalancingFee(uint256 _newFee)
        external
        onlyOwner
        returns (bool)
    {
        _rebalancingFee = _newFee;
        emit ChangeReBalancingFee(_newFee);
        return true;
    }

    function burningFee() external view returns (uint256) {
        return _burningFee;
    }

    function changeBurnFee(uint256 _newFee) external onlyOwner returns (bool) {
        _burningFee = _newFee;
        emit ChangeBurnFee(_newFee);
        return true;
    }

    function excludeFromFee(address account) external onlyOwner returns (bool) {
        require(account != address(0), "ERC20: account is the zero address");
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
        return true;
    }

    function includeInFee(address account) external onlyOwner returns (bool) {
        require(account != address(0), "ERC20: account is the zero address");
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
        return true;
    }

    function rebalanceAndBurn() external nonReentrant returns (bool) {
        uint256 balanceInContract = balanceOf(address(this));
        uint256 rebalanceAmount = balanceInContract.mul(
            _rebalancingFee).div(_rebalancingFee.add(_burningFee));
        uint256 burnAmount = balanceInContract.mul(
            _burningFee).div(_rebalancingFee.add(_burningFee));
        emit RebalanceAndBurn(balanceInContract, rebalanceAmount, burnAmount);
        _swap(rebalanceAmount);
        _burn(burnAmount);
        return true;
    }

    function _swap(uint256 rebalanceAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = LCX;
        _approve(address(this), address(UniswapV2Router), rebalanceAmount);
        UniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            rebalanceAmount,
            0, // Accept any amount
            path,
            owner(),
            block.timestamp
        );
    }

    function _burn(uint256 burnAmount) internal {
        _transfer(address(this), deadWallet, burnAmount);
        emit Transfer(address(this), deadWallet, burnAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lcxAddress","type":"address"},{"internalType":"address","name":"_uniswapV2Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ApproveDiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReBalancingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReflectionFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RebalanceAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"SetDiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveDiamondSC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burningFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReBalancingFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReflectionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceAndBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_diamonds","type":"address"}],"name":"setDiamondsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052662386f26fc100006000196200001b91906200066b565b6000196200002a9190620005f2565b6009556046600b556000600c55603c600d553480156200004957600080fd5b50604051620056d4380380620056d483398181016040528101906200006f9190620004e8565b6200008f62000083620003dc60201b60201c565b620003e460201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010090620005a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017390620005a2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506009546003600062000201620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000255620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000366620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef662386f26fc10000604051620003cc9190620005c4565b60405180910390a350506200071b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620004e28162000701565b92915050565b60008060408385031215620004fc57600080fd5b60006200050c85828601620004d1565b92505060206200051f85828601620004d1565b9150509250929050565b600062000538602283620005e1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6200059c8162000661565b82525050565b60006020820190508181036000830152620005bd8162000529565b9050919050565b6000602082019050620005db600083018462000591565b92915050565b600082825260208201905092915050565b6000620005ff8262000661565b91506200060c8362000661565b925082821015620006225762000621620006a3565b5b828203905092915050565b60006200063a8262000641565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620006788262000661565b9150620006858362000661565b925082620006985762000697620006d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200070c816200062d565b81146200071857600080fd5b50565b60805160601c60a05160601c614f7f620007556000396000818161084a01528181612b800152612ba701526000612ae70152614f7f6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a600480360381019061021591906140e7565b6106ce565b005b610224610848565b60405161023191906148b3565b60405180910390f35b61024261086c565b60405161024f91906148ce565b60405180910390f35b610272600480360381019061026d91906140ab565b6108a9565b60405161027f9190614898565b60405180910390f35b6102906108c7565b60405161029d9190614b10565b60405180910390f35b6102ae6108d1565b6040516102bb9190614b10565b60405180910390f35b6102de60048036038101906102d9919061405c565b6108e0565b6040516102eb9190614898565b60405180910390f35b61030e600480360381019061030991906140e7565b6109b9565b60405161031b9190614898565b60405180910390f35b61033e60048036038101906103399190613ff7565b610a7e565b005b61035a600480360381019061035591906140e7565b610be5565b6040516103679190614b10565b60405180910390f35b610378610c53565b6040516103859190614bbc565b60405180910390f35b6103a860048036038101906103a391906140ab565b610c5c565b6040516103b59190614898565b60405180910390f35b6103d860048036038101906103d391906140e7565b610d0f565b6040516103e59190614898565b60405180910390f35b61040860048036038101906104039190613ff7565b610dd4565b6040516104159190614898565b60405180910390f35b61043860048036038101906104339190614110565b610f5a565b6040516104459190614b10565b60405180910390f35b61046860048036038101906104639190613ff7565b610fe1565b6040516104759190614b10565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d9190614898565b60405180910390f35b6104ae611291565b6040516104bb9190614898565b60405180910390f35b6104cc6113ae565b6040516104d99190614b10565b60405180910390f35b6104ea6113b8565b6040516104f79190614846565b60405180910390f35b6105086113e1565b6040516105159190614b10565b60405180910390f35b6105266113eb565b60405161053391906148ce565b60405180910390f35b610556600480360381019061055191906140ab565b611428565b6040516105639190614898565b60405180910390f35b610586600480360381019061058191906140ab565b6114f5565b6040516105939190614898565b60405180910390f35b6105b660048036038101906105b19190613ff7565b611513565b6040516105c39190614898565b60405180910390f35b6105e660048036038101906105e19190614020565b611569565b6040516105f39190614b10565b60405180910390f35b61061660048036038101906106119190613ff7565b6115f0565b6040516106239190614898565b60405180910390f35b61064660048036038101906106419190613ff7565b611776565b005b610662600480360381019061065d9190613ff7565b611a48565b005b61067e60048036038101906106799190613ff7565b611b40565b005b610688611f45565b6040516106959190614b10565b60405180910390f35b6106b860048036038101906106b391906140e7565b611f4f565b6040516106c59190614898565b60405180910390f35b60006106d8612014565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614af0565b60405180910390fd5b60006107728361201c565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208190919063ffffffff16565b60098190555061083d83600a546120cb90919063ffffffff16565b600a81905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606040518060400160405280601781526020017f457175616c697a6572204469616d6f6e64732054455354000000000000000000815250905090565b60006108bd6108b6612014565b8484612129565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122f4565b6109ae846108f9612014565b6109a985604051806060016040528060288152602001614efd60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f612014565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e49092919063ffffffff16565b612129565b600190509392505050565b60006109c3612014565b73ffffffffffffffffffffffffffffffffffffffff166109e16113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a50565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614b10565b60405180910390a160019050919050565b610a86612014565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614970565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda9190614846565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390614910565b60405180910390fd5b6000610c36612848565b9050610c4b818461287390919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c69612014565b84610d008560056000610c7a612014565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b612129565b6001905092915050565b6000610d19612014565b73ffffffffffffffffffffffffffffffffffffffff16610d376113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a50565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614b10565b60405180910390a160019050919050565b6000610dde612014565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990614a10565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f499190614846565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149f0565b60405180910390fd5b81610fc5576000610fb68461201c565b50505050905080915050610fdb565b6000610fd08461201c565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d4612014565b73ffffffffffffffffffffffffffffffffffffffff166110f26113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a50565b60405180910390fd5b61115260006128bd565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614ad0565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120cb90919063ffffffff16565b6111e2600c548561298190919063ffffffff16565b61287390919063ffffffff16565b9050600061123161120e600d54600c546120cb90919063ffffffff16565b611223600d548661298190919063ffffffff16565b61287390919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b85565b60405180910390a1611277826129fc565b61128081612c44565b600193505050506001808190555090565b600061129b612014565b73ffffffffffffffffffffffffffffffffffffffff166112b96113b8565b73ffffffffffffffffffffffffffffffffffffffff161461130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690614a50565b60405180910390fd5b61134333600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612129565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc1000060405161139f93929190614861565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600d81526020017f54657374204449414d4f4e445300000000000000000000000000000000000000815250905090565b60006114eb611435612014565b846114e685604051806060016040528060258152602001614f25602591396005600061145f612014565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e49092919063ffffffff16565b612129565b6001905092915050565b6000611509611502612014565b84846122f4565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006115fa612014565b73ffffffffffffffffffffffffffffffffffffffff166116186113b8565b73ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614a10565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e826040516117659190614846565b60405180910390a160019050919050565b61177e612014565b73ffffffffffffffffffffffffffffffffffffffff1661179c6113b8565b73ffffffffffffffffffffffffffffffffffffffff16146117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990614a50565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906149b0565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119535761190f600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a3d9190614846565b60405180910390a150565b611a50612014565b73ffffffffffffffffffffffffffffffffffffffff16611a6e6113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abb90614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90614930565b60405180910390fd5b611b3d816128bd565b50565b611b48612014565b73ffffffffffffffffffffffffffffffffffffffff16611b666113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614a50565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906149d0565b60405180910390fd5b60005b600880549050811015611f0a578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611ca9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ef75760086001600880549050611d049190614d0d565b81548110611d3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ebd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f0a565b8080611f0290614dff565b915050611c4b565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f3a9190614846565b60405180910390a150565b6000600c54905090565b6000611f59612014565b73ffffffffffffffffffffffffffffffffffffffff16611f776113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490614a50565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f826040516120039190614b10565b60405180910390a160019050919050565b600033905090565b600080612027613f97565b6000612031613f97565b60008061203d88612cbb565b91509150600061204b612848565b9050600080600061205d8c8686612db7565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e4565b905092915050565b60008082846120da9190614c2c565b90508381101561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614990565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614ab0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090614950565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122e79190614b10565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614a90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb906148f0565b60405180910390fd5b60008111612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e90614a70565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124cd5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124eb576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258e5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a35761259e868686612e9d565b612720565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126465750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561265b5761265686868661311c565b61271f565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126fd5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127125761270d86868661339b565b61271e565b61271d8686866136af565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c15750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127dc5782600b8190555081600c8190555080600d819055505b505050505050565b600083831115829061282c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282391906148ce565b60405180910390fd5b506000838561283b9190614d0d565b9050809150509392505050565b6000806000612855613899565b9150915061286c818361287390919063ffffffff16565b9250505090565b60006128b583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bf8565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561299457600090506129f6565b600082846129a29190614cb3565b90508284826129b19190614c82565b146129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890614a30565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff811115612a3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a6d5781602001602082028036833780820191505090505b5090503081600081518110612aab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612b40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ba5307f000000000000000000000000000000000000000000000000000000000000000084612129565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612bed6113b8565b426040518663ffffffff1660e01b8152600401612c0e959493929190614b2b565b600060405180830381600087803b158015612c2857600080fd5b505af1158015612c3c573d6000803e3d6000fd5b505050505050565b612c513061dead836122f4565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cb09190614b10565b60405180910390a350565b6000612cc5613f97565b612ccd613f97565b612cf66103e8612ce8600b548761298190919063ffffffff16565b61287390919063ffffffff16565b816000018181525050612d286103e8612d1a600c548761298190919063ffffffff16565b61287390919063ffffffff16565b816020018181525050612d5a6103e8612d4c600d548761298190919063ffffffff16565b61287390919063ffffffff16565b8160400181815250506000612da88260400151612d9a8460200151612d8c86600001518a61208190919063ffffffff16565b61208190919063ffffffff16565b61208190919063ffffffff16565b90508082935093505050915091565b600080612dc2613f97565b612dca613f97565b6000612ddf868961298190919063ffffffff16565b9050612df886886000015161298190919063ffffffff16565b826000018181525050612e1886886020015161298190919063ffffffff16565b826020018181525050612e3886886040015161298190919063ffffffff16565b8260400181815250506000612e868360400151612e788560200151612e6a87600001518761208190919063ffffffff16565b61208190919063ffffffff16565b61208190919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612eae8661201c565b94509450945094509450612f0a86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f9f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303484600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061308983600001518260000151613c5b565b61309b83602001518260200151613c95565b6130ad83604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161310a9190614b10565b60405180910390a35050505050505050565b600080600080600061312d8661201c565b9450945094509450945061318985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061321e82600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b384600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330883600001518260000151613c5b565b61331a83602001518260200151613c95565b61332c83604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133899190614b10565b60405180910390a35050505050505050565b60008060008060006133ac8661201c565b9450945094509450945061340886600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061349d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353282600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135c784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361c83600001518260000151613c5b565b61362e83602001518260200151613c95565b61364083604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161369d9190614b10565b60405180910390a35050505050505050565b60008060008060006136c08661201c565b9450945094509450945061371c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b184600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380683600001518260000151613c5b565b61381883602001518260200151613c95565b61382a83604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138879190614b10565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613bb1578260036000600884815481106138fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a1257508160046000600884815481106139aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a2e57600954662386f26fc1000094509450505050613bf4565b613ae46003600060088481548110613a6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208190919063ffffffff16565b9250613b9c6004600060088481548110613b27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208190919063ffffffff16565b91508080613ba990614dff565b9150506138b2565b50613bce662386f26fc1000060095461287390919063ffffffff16565b821015613beb57600954662386f26fc10000935093505050613bf4565b81819350935050505b9091565b60008083118290613c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3691906148ce565b60405180910390fd5b5060008385613c4e9190614c82565b9050809150509392505050565b613c708260095461208190919063ffffffff16565b600981905550613c8b81600a546120cb90919063ffffffff16565b600a819055505050565b613ce782600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e1257613dce81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e6882600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f9357613f4f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613fc781614eb7565b92915050565b600081359050613fdc81614ece565b92915050565b600081359050613ff181614ee5565b92915050565b60006020828403121561400957600080fd5b600061401784828501613fb8565b91505092915050565b6000806040838503121561403357600080fd5b600061404185828601613fb8565b925050602061405285828601613fb8565b9150509250929050565b60008060006060848603121561407157600080fd5b600061407f86828701613fb8565b935050602061409086828701613fb8565b92505060406140a186828701613fe2565b9150509250925092565b600080604083850312156140be57600080fd5b60006140cc85828601613fb8565b92505060206140dd85828601613fe2565b9150509250929050565b6000602082840312156140f957600080fd5b600061410784828501613fe2565b91505092915050565b6000806040838503121561412357600080fd5b600061413185828601613fe2565b925050602061414285828601613fcd565b9150509250929050565b60006141588383614164565b60208301905092915050565b61416d81614d41565b82525050565b61417c81614d41565b82525050565b600061418d82614be7565b6141978185614c0a565b93506141a283614bd7565b8060005b838110156141d35781516141ba888261414c565b97506141c583614bfd565b9250506001810190506141a6565b5085935050505092915050565b6141e981614d53565b82525050565b6141f881614d96565b82525050565b61420781614dba565b82525050565b600061421882614bf2565b6142228185614c1b565b9350614232818560208601614dcc565b61423b81614ea6565b840191505092915050565b6000614253602383614c1b565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142b9602a83614c1b565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b600061431f602683614c1b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614385602283614c1b565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143eb602283614c1b565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614451601b83614c1b565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614491601b83614c1b565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006144d1601783614c1b565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000614511601f83614c1b565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614551602283614c1b565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145b7602183614c1b565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061461d602083614c1b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061465d602983614c1b565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006146c3602583614c1b565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614729602483614c1b565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061478f601f83614c1b565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006147cf602c83614c1b565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61483181614d7f565b82525050565b61484081614d89565b82525050565b600060208201905061485b6000830184614173565b92915050565b60006060820190506148766000830186614173565b6148836020830185614173565b6148906040830184614828565b949350505050565b60006020820190506148ad60008301846141e0565b92915050565b60006020820190506148c860008301846141ef565b92915050565b600060208201905081810360008301526148e8818461420d565b905092915050565b6000602082019050818103600083015261490981614246565b9050919050565b60006020820190508181036000830152614929816142ac565b9050919050565b6000602082019050818103600083015261494981614312565b9050919050565b6000602082019050818103600083015261496981614378565b9050919050565b60006020820190508181036000830152614989816143de565b9050919050565b600060208201905081810360008301526149a981614444565b9050919050565b600060208201905081810360008301526149c981614484565b9050919050565b600060208201905081810360008301526149e9816144c4565b9050919050565b60006020820190508181036000830152614a0981614504565b9050919050565b60006020820190508181036000830152614a2981614544565b9050919050565b60006020820190508181036000830152614a49816145aa565b9050919050565b60006020820190508181036000830152614a6981614610565b9050919050565b60006020820190508181036000830152614a8981614650565b9050919050565b60006020820190508181036000830152614aa9816146b6565b9050919050565b60006020820190508181036000830152614ac98161471c565b9050919050565b60006020820190508181036000830152614ae981614782565b9050919050565b60006020820190508181036000830152614b09816147c2565b9050919050565b6000602082019050614b256000830184614828565b92915050565b600060a082019050614b406000830188614828565b614b4d60208301876141fe565b8181036040830152614b5f8186614182565b9050614b6e6060830185614173565b614b7b6080830184614828565b9695505050505050565b6000606082019050614b9a6000830186614828565b614ba76020830185614828565b614bb46040830184614828565b949350505050565b6000602082019050614bd16000830184614837565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c3782614d7f565b9150614c4283614d7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7757614c76614e48565b5b828201905092915050565b6000614c8d82614d7f565b9150614c9883614d7f565b925082614ca857614ca7614e77565b5b828204905092915050565b6000614cbe82614d7f565b9150614cc983614d7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0257614d01614e48565b5b828202905092915050565b6000614d1882614d7f565b9150614d2383614d7f565b925082821015614d3657614d35614e48565b5b828203905092915050565b6000614d4c82614d5f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614da182614da8565b9050919050565b6000614db382614d5f565b9050919050565b6000614dc582614d7f565b9050919050565b60005b83811015614dea578082015181840152602081019050614dcf565b83811115614df9576000848401525b50505050565b6000614e0a82614d7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e3d57614e3c614e48565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614ec081614d41565b8114614ecb57600080fd5b50565b614ed781614d53565b8114614ee257600080fd5b50565b614eee81614d7f565b8114614ef957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205389c142c58c073df8f89a394c4307185a9afdbe866a5da5721d5c4bc890648c64736f6c63430008000033000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a600480360381019061021591906140e7565b6106ce565b005b610224610848565b60405161023191906148b3565b60405180910390f35b61024261086c565b60405161024f91906148ce565b60405180910390f35b610272600480360381019061026d91906140ab565b6108a9565b60405161027f9190614898565b60405180910390f35b6102906108c7565b60405161029d9190614b10565b60405180910390f35b6102ae6108d1565b6040516102bb9190614b10565b60405180910390f35b6102de60048036038101906102d9919061405c565b6108e0565b6040516102eb9190614898565b60405180910390f35b61030e600480360381019061030991906140e7565b6109b9565b60405161031b9190614898565b60405180910390f35b61033e60048036038101906103399190613ff7565b610a7e565b005b61035a600480360381019061035591906140e7565b610be5565b6040516103679190614b10565b60405180910390f35b610378610c53565b6040516103859190614bbc565b60405180910390f35b6103a860048036038101906103a391906140ab565b610c5c565b6040516103b59190614898565b60405180910390f35b6103d860048036038101906103d391906140e7565b610d0f565b6040516103e59190614898565b60405180910390f35b61040860048036038101906104039190613ff7565b610dd4565b6040516104159190614898565b60405180910390f35b61043860048036038101906104339190614110565b610f5a565b6040516104459190614b10565b60405180910390f35b61046860048036038101906104639190613ff7565b610fe1565b6040516104759190614b10565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d9190614898565b60405180910390f35b6104ae611291565b6040516104bb9190614898565b60405180910390f35b6104cc6113ae565b6040516104d99190614b10565b60405180910390f35b6104ea6113b8565b6040516104f79190614846565b60405180910390f35b6105086113e1565b6040516105159190614b10565b60405180910390f35b6105266113eb565b60405161053391906148ce565b60405180910390f35b610556600480360381019061055191906140ab565b611428565b6040516105639190614898565b60405180910390f35b610586600480360381019061058191906140ab565b6114f5565b6040516105939190614898565b60405180910390f35b6105b660048036038101906105b19190613ff7565b611513565b6040516105c39190614898565b60405180910390f35b6105e660048036038101906105e19190614020565b611569565b6040516105f39190614b10565b60405180910390f35b61061660048036038101906106119190613ff7565b6115f0565b6040516106239190614898565b60405180910390f35b61064660048036038101906106419190613ff7565b611776565b005b610662600480360381019061065d9190613ff7565b611a48565b005b61067e60048036038101906106799190613ff7565b611b40565b005b610688611f45565b6040516106959190614b10565b60405180910390f35b6106b860048036038101906106b391906140e7565b611f4f565b6040516106c59190614898565b60405180910390f35b60006106d8612014565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614af0565b60405180910390fd5b60006107728361201c565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208190919063ffffffff16565b60098190555061083d83600a546120cb90919063ffffffff16565b600a81905550505050565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad81565b60606040518060400160405280601781526020017f457175616c697a6572204469616d6f6e64732054455354000000000000000000815250905090565b60006108bd6108b6612014565b8484612129565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122f4565b6109ae846108f9612014565b6109a985604051806060016040528060288152602001614efd60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f612014565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e49092919063ffffffff16565b612129565b600190509392505050565b60006109c3612014565b73ffffffffffffffffffffffffffffffffffffffff166109e16113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a50565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614b10565b60405180910390a160019050919050565b610a86612014565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614970565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda9190614846565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390614910565b60405180910390fd5b6000610c36612848565b9050610c4b818461287390919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c69612014565b84610d008560056000610c7a612014565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b612129565b6001905092915050565b6000610d19612014565b73ffffffffffffffffffffffffffffffffffffffff16610d376113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a50565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614b10565b60405180910390a160019050919050565b6000610dde612014565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113b8565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990614a10565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f499190614846565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149f0565b60405180910390fd5b81610fc5576000610fb68461201c565b50505050905080915050610fdb565b6000610fd08461201c565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d4612014565b73ffffffffffffffffffffffffffffffffffffffff166110f26113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a50565b60405180910390fd5b61115260006128bd565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614ad0565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120cb90919063ffffffff16565b6111e2600c548561298190919063ffffffff16565b61287390919063ffffffff16565b9050600061123161120e600d54600c546120cb90919063ffffffff16565b611223600d548661298190919063ffffffff16565b61287390919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b85565b60405180910390a1611277826129fc565b61128081612c44565b600193505050506001808190555090565b600061129b612014565b73ffffffffffffffffffffffffffffffffffffffff166112b96113b8565b73ffffffffffffffffffffffffffffffffffffffff161461130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690614a50565b60405180910390fd5b61134333600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612129565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc1000060405161139f93929190614861565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600d81526020017f54657374204449414d4f4e445300000000000000000000000000000000000000815250905090565b60006114eb611435612014565b846114e685604051806060016040528060258152602001614f25602591396005600061145f612014565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e49092919063ffffffff16565b612129565b6001905092915050565b6000611509611502612014565b84846122f4565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006115fa612014565b73ffffffffffffffffffffffffffffffffffffffff166116186113b8565b73ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590614a10565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e826040516117659190614846565b60405180910390a160019050919050565b61177e612014565b73ffffffffffffffffffffffffffffffffffffffff1661179c6113b8565b73ffffffffffffffffffffffffffffffffffffffff16146117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990614a50565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906149b0565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156119535761190f600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a3d9190614846565b60405180910390a150565b611a50612014565b73ffffffffffffffffffffffffffffffffffffffff16611a6e6113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abb90614a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90614930565b60405180910390fd5b611b3d816128bd565b50565b611b48612014565b73ffffffffffffffffffffffffffffffffffffffff16611b666113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614a50565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906149d0565b60405180910390fd5b60005b600880549050811015611f0a578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611ca9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ef75760086001600880549050611d049190614d0d565b81548110611d3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ebd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f0a565b8080611f0290614dff565b915050611c4b565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f3a9190614846565b60405180910390a150565b6000600c54905090565b6000611f59612014565b73ffffffffffffffffffffffffffffffffffffffff16611f776113b8565b73ffffffffffffffffffffffffffffffffffffffff1614611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490614a50565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f826040516120039190614b10565b60405180910390a160019050919050565b600033905090565b600080612027613f97565b6000612031613f97565b60008061203d88612cbb565b91509150600061204b612848565b9050600080600061205d8c8686612db7565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120c383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e4565b905092915050565b60008082846120da9190614c2c565b90508381101561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614990565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614ab0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090614950565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122e79190614b10565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614a90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb906148f0565b60405180910390fd5b60008111612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e90614a70565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124cd5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124eb576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258e5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a35761259e868686612e9d565b612720565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126465750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561265b5761265686868661311c565b61271f565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126fd5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127125761270d86868661339b565b61271e565b61271d8686866136af565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c15750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127dc5782600b8190555081600c8190555080600d819055505b505050505050565b600083831115829061282c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282391906148ce565b60405180910390fd5b506000838561283b9190614d0d565b9050809150509392505050565b6000806000612855613899565b9150915061286c818361287390919063ffffffff16565b9250505090565b60006128b583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bf8565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561299457600090506129f6565b600082846129a29190614cb3565b90508284826129b19190614c82565b146129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890614a30565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff811115612a3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a6d5781602001602082028036833780820191505090505b5090503081600081518110612aab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612b40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ba5307f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad84612129565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612bed6113b8565b426040518663ffffffff1660e01b8152600401612c0e959493929190614b2b565b600060405180830381600087803b158015612c2857600080fd5b505af1158015612c3c573d6000803e3d6000fd5b505050505050565b612c513061dead836122f4565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cb09190614b10565b60405180910390a350565b6000612cc5613f97565b612ccd613f97565b612cf66103e8612ce8600b548761298190919063ffffffff16565b61287390919063ffffffff16565b816000018181525050612d286103e8612d1a600c548761298190919063ffffffff16565b61287390919063ffffffff16565b816020018181525050612d5a6103e8612d4c600d548761298190919063ffffffff16565b61287390919063ffffffff16565b8160400181815250506000612da88260400151612d9a8460200151612d8c86600001518a61208190919063ffffffff16565b61208190919063ffffffff16565b61208190919063ffffffff16565b90508082935093505050915091565b600080612dc2613f97565b612dca613f97565b6000612ddf868961298190919063ffffffff16565b9050612df886886000015161298190919063ffffffff16565b826000018181525050612e1886886020015161298190919063ffffffff16565b826020018181525050612e3886886040015161298190919063ffffffff16565b8260400181815250506000612e868360400151612e788560200151612e6a87600001518761208190919063ffffffff16565b61208190919063ffffffff16565b61208190919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612eae8661201c565b94509450945094509450612f0a86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f9f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303484600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061308983600001518260000151613c5b565b61309b83602001518260200151613c95565b6130ad83604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161310a9190614b10565b60405180910390a35050505050505050565b600080600080600061312d8661201c565b9450945094509450945061318985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061321e82600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b384600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330883600001518260000151613c5b565b61331a83602001518260200151613c95565b61332c83604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133899190614b10565b60405180910390a35050505050505050565b60008060008060006133ac8661201c565b9450945094509450945061340886600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061349d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353282600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135c784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361c83600001518260000151613c5b565b61362e83602001518260200151613c95565b61364083604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161369d9190614b10565b60405180910390a35050505050505050565b60008060008060006136c08661201c565b9450945094509450945061371c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b184600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380683600001518260000151613c5b565b61381883602001518260200151613c95565b61382a83604001518260400151613e16565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138879190614b10565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613bb1578260036000600884815481106138fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a1257508160046000600884815481106139aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a2e57600954662386f26fc1000094509450505050613bf4565b613ae46003600060088481548110613a6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208190919063ffffffff16565b9250613b9c6004600060088481548110613b27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208190919063ffffffff16565b91508080613ba990614dff565b9150506138b2565b50613bce662386f26fc1000060095461287390919063ffffffff16565b821015613beb57600954662386f26fc10000935093505050613bf4565b81819350935050505b9091565b60008083118290613c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3691906148ce565b60405180910390fd5b5060008385613c4e9190614c82565b9050809150509392505050565b613c708260095461208190919063ffffffff16565b600981905550613c8b81600a546120cb90919063ffffffff16565b600a819055505050565b613ce782600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e1257613dce81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e6882600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f9357613f4f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cb90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613fc781614eb7565b92915050565b600081359050613fdc81614ece565b92915050565b600081359050613ff181614ee5565b92915050565b60006020828403121561400957600080fd5b600061401784828501613fb8565b91505092915050565b6000806040838503121561403357600080fd5b600061404185828601613fb8565b925050602061405285828601613fb8565b9150509250929050565b60008060006060848603121561407157600080fd5b600061407f86828701613fb8565b935050602061409086828701613fb8565b92505060406140a186828701613fe2565b9150509250925092565b600080604083850312156140be57600080fd5b60006140cc85828601613fb8565b92505060206140dd85828601613fe2565b9150509250929050565b6000602082840312156140f957600080fd5b600061410784828501613fe2565b91505092915050565b6000806040838503121561412357600080fd5b600061413185828601613fe2565b925050602061414285828601613fcd565b9150509250929050565b60006141588383614164565b60208301905092915050565b61416d81614d41565b82525050565b61417c81614d41565b82525050565b600061418d82614be7565b6141978185614c0a565b93506141a283614bd7565b8060005b838110156141d35781516141ba888261414c565b97506141c583614bfd565b9250506001810190506141a6565b5085935050505092915050565b6141e981614d53565b82525050565b6141f881614d96565b82525050565b61420781614dba565b82525050565b600061421882614bf2565b6142228185614c1b565b9350614232818560208601614dcc565b61423b81614ea6565b840191505092915050565b6000614253602383614c1b565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142b9602a83614c1b565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b600061431f602683614c1b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614385602283614c1b565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143eb602283614c1b565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614451601b83614c1b565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614491601b83614c1b565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006144d1601783614c1b565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000614511601f83614c1b565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614551602283614c1b565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145b7602183614c1b565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061461d602083614c1b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061465d602983614c1b565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006146c3602583614c1b565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614729602483614c1b565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061478f601f83614c1b565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006147cf602c83614c1b565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61483181614d7f565b82525050565b61484081614d89565b82525050565b600060208201905061485b6000830184614173565b92915050565b60006060820190506148766000830186614173565b6148836020830185614173565b6148906040830184614828565b949350505050565b60006020820190506148ad60008301846141e0565b92915050565b60006020820190506148c860008301846141ef565b92915050565b600060208201905081810360008301526148e8818461420d565b905092915050565b6000602082019050818103600083015261490981614246565b9050919050565b60006020820190508181036000830152614929816142ac565b9050919050565b6000602082019050818103600083015261494981614312565b9050919050565b6000602082019050818103600083015261496981614378565b9050919050565b60006020820190508181036000830152614989816143de565b9050919050565b600060208201905081810360008301526149a981614444565b9050919050565b600060208201905081810360008301526149c981614484565b9050919050565b600060208201905081810360008301526149e9816144c4565b9050919050565b60006020820190508181036000830152614a0981614504565b9050919050565b60006020820190508181036000830152614a2981614544565b9050919050565b60006020820190508181036000830152614a49816145aa565b9050919050565b60006020820190508181036000830152614a6981614610565b9050919050565b60006020820190508181036000830152614a8981614650565b9050919050565b60006020820190508181036000830152614aa9816146b6565b9050919050565b60006020820190508181036000830152614ac98161471c565b9050919050565b60006020820190508181036000830152614ae981614782565b9050919050565b60006020820190508181036000830152614b09816147c2565b9050919050565b6000602082019050614b256000830184614828565b92915050565b600060a082019050614b406000830188614828565b614b4d60208301876141fe565b8181036040830152614b5f8186614182565b9050614b6e6060830185614173565b614b7b6080830184614828565b9695505050505050565b6000606082019050614b9a6000830186614828565b614ba76020830185614828565b614bb46040830184614828565b949350505050565b6000602082019050614bd16000830184614837565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c3782614d7f565b9150614c4283614d7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7757614c76614e48565b5b828201905092915050565b6000614c8d82614d7f565b9150614c9883614d7f565b925082614ca857614ca7614e77565b5b828204905092915050565b6000614cbe82614d7f565b9150614cc983614d7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0257614d01614e48565b5b828202905092915050565b6000614d1882614d7f565b9150614d2383614d7f565b925082821015614d3657614d35614e48565b5b828203905092915050565b6000614d4c82614d5f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614da182614da8565b9050919050565b6000614db382614d5f565b9050919050565b6000614dc582614d7f565b9050919050565b60005b83811015614dea578082015181840152602081019050614dcf565b83811115614df9576000848401525b50505050565b6000614e0a82614d7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e3d57614e3c614e48565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614ec081614d41565b8114614ecb57600080fd5b50565b614ed781614d53565b8114614ee257600080fd5b50565b614eee81614d7f565b8114614ef957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205389c142c58c073df8f89a394c4307185a9afdbe866a5da5721d5c4bc890648c64736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad

-----Decoded View---------------
Arg [0] : _lcxAddress (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
Arg [1] : _uniswapV2Address (address): 0xcC6169aA1E879d3a4227536671F85afdb2d23fAD

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Arg [1] : 000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad


Deployed Bytecode Sourcemap

23223:18622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28655:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23551:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25571:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26571:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28558:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25854:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27262:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39238:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26774:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29567:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25761:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27718:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39574:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40087:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29082:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25959:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14142:103;;;:::i;:::-;;40636:544;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27029:225;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39133:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13491:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39806:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25664:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28028:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26165:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28438:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26377:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40363:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29897:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14400:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30275:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39467:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39905:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28655:419;28709:14;28726:12;:10;:12::i;:::-;28709:29;;28772:11;:19;28784:6;28772:19;;;;;;;;;;;;;;;;;;;;;;;;;28771:20;28749:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;28875:15;28902:19;28913:7;28902:10;:19::i;:::-;28874:47;;;;;;28950:28;28970:7;28950;:15;28958:6;28950:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28932:7;:15;28940:6;28932:15;;;;;;;;;;;;;;;:46;;;;28999:20;29011:7;28999;;:11;;:20;;;;:::i;:::-;28989:7;:30;;;;29043:23;29058:7;29043:10;;:14;;:23;;;;:::i;:::-;29030:10;:36;;;;28655:419;;;:::o;23551:51::-;;;:::o;25571:85::-;25610:13;25643:5;;;;;;;;;;;;;;;;;25636:12;;25571:85;:::o;26571:195::-;26675:4;26697:39;26706:12;:10;:12::i;:::-;26720:7;26729:6;26697:8;:39::i;:::-;26754:4;26747:11;;26571:195;;;;:::o;28558:89::-;28602:7;28629:10;;28622:17;;28558:89;:::o;25854:97::-;25909:7;24175:4;25929:14;;25854:97;:::o;27262:448::-;27396:4;27413:36;27423:6;27431:9;27442:6;27413:9;:36::i;:::-;27460:220;27483:6;27504:12;:10;:12::i;:::-;27531:138;27587:6;27531:138;;;;;;;;;;;;;;;;;:11;:19;27543:6;27531:19;;;;;;;;;;;;;;;:33;27551:12;:10;:12::i;:::-;27531:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27460:8;:220::i;:::-;27698:4;27691:11;;27262:448;;;;;:::o;39238:221::-;39339:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39378:7:::1;39361:14;:24;;;;39401:28;39421:7;39401:28;;;;;;:::i;:::-;;;;;;;;39447:4;39440:11;;39238:221:::0;;;:::o;26774:247::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26880:1:::1;26859:23;;:9;:23;;;;26851:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26958:9;26932:15;;:36;;;;;;;;;;;;;;;;;;26984:29;27003:9;26984:29;;;;;;:::i;:::-;;;;;;;;26774:247:::0;:::o;29567:322::-;29661:7;29719;;29708;:18;;29686:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29807:19;29829:10;:8;:10::i;:::-;29807:32;;29857:24;29869:11;29857:7;:11;;:24;;;;:::i;:::-;29850:31;;;29567:322;;;:::o;25761:85::-;25804:5;24432:1;25822:16;;25761:85;:::o;27718:302::-;27835:4;27857:133;27880:12;:10;:12::i;:::-;27907:7;27929:50;27968:10;27929:11;:25;27941:12;:10;:12::i;:::-;27929:25;;;;;;;;;;;;;;;:34;27955:7;27929:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27857:8;:133::i;:::-;28008:4;28001:11;;27718:302;;;;:::o;39574:224::-;39676:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39716:7:::1;39698:15;:25;;;;39739:29;39760:7;39739:29;;;;;;:::i;:::-;;;;;;;;39786:4;39779:11;;39574:224:::0;;;:::o;40087:268::-;40156:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40200:1:::1;40181:21;;:7;:21;;;;40173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40282:4;40252:18;:27;40271:7;40252:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40302:23;40317:7;40302:23;;;;;;:::i;:::-;;;;;;;;40343:4;40336:11;;40087:268:::0;;;:::o;29082:477::-;29202:7;24175:4;29235:7;:18;;29227:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29305:17;29300:252;;29340:15;29367:19;29378:7;29367:10;:19::i;:::-;29339:47;;;;;;29408:7;29401:14;;;;;29300:252;29451:23;29484:19;29495:7;29484:10;:19::i;:::-;29448:55;;;;;;29525:15;29518:22;;;29082:477;;;;;:::o;25959:198::-;26025:7;26049:11;:20;26061:7;26049:20;;;;;;;;;;;;;;;;;;;;;;;;;26045:49;;;26078:7;:16;26086:7;26078:16;;;;;;;;;;;;;;;;26071:23;;;;26045:49;26112:37;26132:7;:16;26140:7;26132:16;;;;;;;;;;;;;;;;26112:19;:37::i;:::-;26105:44;;25959:198;;;;:::o;14142:103::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14207:30:::1;14234:1;14207:18;:30::i;:::-;14142:103::o:0;40636:544::-;40695:4;16610:1;17208:7;;:19;;17200:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16610:1;17341:7;:18;;;;40712:25:::1;40740:24;40758:4;40740:9;:24::i;:::-;40712:52;;40775:23;40801:90;40858:32;40878:11;;40858:15;;:19;;:32;;;;:::i;:::-;40801:52;40837:15;;40801:17;:21;;:52;;;;:::i;:::-;:56;;:90;;;;:::i;:::-;40775:116;;40902:18;40923:86;40976:32;40996:11;;40976:15;;:19;;:32;;;;:::i;:::-;40923:48;40959:11;;40923:17;:21;;:48;;;;:::i;:::-;:52;;:86;;;;:::i;:::-;40902:107;;41025:64;41042:17;41061:15;41078:10;41025:64;;;;;;;;:::i;:::-;;;;;;;;41100:22;41106:15;41100:5;:22::i;:::-;41133:17;41139:10;41133:5;:17::i;:::-;41168:4;41161:11;;;;;16566:1:::0;17520:7;:22;;;;40636:544;:::o;27029:225::-;27085:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27102:46:::1;27111:10;27123:15;;;;;;;;;;;24175:4;27102:8;:46::i;:::-;27164:60;27187:10;27199:15;;;;;;;;;;;24175:4;27164:60;;;;;;;;:::i;:::-;;;;;;;;27242:4;27235:11;;27029:225:::0;:::o;39133:97::-;39181:7;39208:14;;39201:21;;39133:97;:::o;13491:87::-;13537:7;13564:6;;;;;;;;;;;13557:13;;13491:87;:::o;39806:91::-;39851:7;39878:11;;39871:18;;39806:91;:::o;25664:89::-;25705:13;25738:7;;;;;;;;;;;;;;;;;25731:14;;25664:89;:::o;28028:402::-;28150:4;28172:228;28195:12;:10;:12::i;:::-;28222:7;28244:145;28301:15;28244:145;;;;;;;;;;;;;;;;;:11;:25;28256:12;:10;:12::i;:::-;28244:25;;;;;;;;;;;;;;;:34;28270:7;28244:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;28172:8;:228::i;:::-;28418:4;28411:11;;28028:402;;;;:::o;26165:204::-;26272:4;26297:42;26307:12;:10;:12::i;:::-;26321:9;26332:6;26297:9;:42::i;:::-;26357:4;26350:11;;26165:204;;;;:::o;28438:112::-;28498:4;28522:11;:20;28534:7;28522:20;;;;;;;;;;;;;;;;;;;;;;;;;28515:27;;28438:112;;;:::o;26377:186::-;26496:7;26528:11;:18;26540:5;26528:18;;;;;;;;;;;;;;;:27;26547:7;26528:27;;;;;;;;;;;;;;;;26521:34;;26377:186;;;;:::o;40363:265::-;40430:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40474:1:::1;40455:21;;:7;:21;;;;40447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40556:5;40526:18;:27;40545:7;40526:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40577:21;40590:7;40577:21;;;;;;:::i;:::-;;;;;;;;40616:4;40609:11;;40363:265:::0;;;:::o;29897:370::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29977:11:::1;:20;29989:7;29977:20;;;;;;;;;;;;;;;;;;;;;;;;;29976:21;29968:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30063:1;30044:7;:16;30052:7;30044:16;;;;;;;;;;;;;;;;:20;30040:109;;;30100:37;30120:7;:16;30128:7;30120:16;;;;;;;;;;;;;;;;30100:19;:37::i;:::-;30081:7;:16;30089:7;30081:16;;;;;;;;;;;;;;;:56;;;;30040:109;30182:4;30159:11;:20;30171:7;30159:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30197:9;30212:7;30197:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30236;30251:7;30236:23;;;;;;:::i;:::-;;;;;;;;29897:370:::0;:::o;14400:201::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14509:1:::1;14489:22;;:8;:22;;;;14481:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14565:28;14584:8;14565:18;:28::i;:::-;14400:201:::0;:::o;30275:511::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30354:11:::1;:20;30366:7;30354:20;;;;;;;;;;;;;;;;;;;;;;;;;30346:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30418:9;30413:327;30437:9;:16;;;;30433:1;:20;30413:327;;;30495:7;30479:23;;:9;30489:1;30479:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30475:254;;;30538:9;30567:1;30548:9;:16;;;;:20;;;;:::i;:::-;30538:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30523:9;30533:1;30523:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30607:1;30588:7;:16;30596:7;30588:16;;;;;;;;;;;;;;;:20;;;;30650:5;30627:11;:20;30639:7;30627:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30674:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30708:5;;30475:254;30455:3;;;;;:::i;:::-;;;;30413:327;;;;30755:23;30770:7;30755:23;;;;;;:::i;:::-;;;;;;;;30275:511:::0;:::o;39467:99::-;39516:7;39543:15;;39536:22;;39467:99;:::o;39905:174::-;39973:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40004:7:::1;39990:11;:21;;;;40027:22;40041:7;40027:22;;;;;;:::i;:::-;;;;;;;;40067:4;40060:11;;39905:174:::0;;;:::o;5040:98::-;5093:7;5120:10;5113:17;;5040:98;:::o;36469:589::-;36569:7;36591;36613:11;;:::i;:::-;36639:7;36661:11;;:::i;:::-;36701:23;36726:17;36747:20;36759:7;36747:11;:20::i;:::-;36700:67;;;;36778:19;36800:10;:8;:10::i;:::-;36778:32;;36836:15;36866:23;36904:17;36935:40;36947:7;36956:5;36963:11;36935;:40::i;:::-;36821:154;;;;;;36994:7;37003:15;37020:5;37027:15;37044:5;36986:64;;;;;;;;;;;;;;;;36469:589;;;;;;;:::o;909:136::-;967:7;994:43;998:1;1001;994:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;987:50;;909:136;;;;:::o;445:181::-;503:7;523:9;539:1;535;:5;;;;:::i;:::-;523:17;;564:1;559;:6;;551:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;617:1;610:8;;;445:181;;;;:::o;30794:371::-;30938:1;30921:19;;:5;:19;;;;30913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31019:1;31000:21;;:7;:21;;;;30992:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31103:6;31073:11;:18;31085:5;31073:18;;;;;;;;;;;;;;;:27;31092:7;31073:27;;;;;;;;;;;;;;;:36;;;;31141:7;31125:32;;31134:5;31125:32;;;31150:6;31125:32;;;;;;:::i;:::-;;;;;;;;30794:371;;;:::o;31173:1426::-;31322:1;31304:20;;:6;:20;;;;31296:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31406:1;31385:23;;:9;:23;;;;31377:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31476:1;31467:6;:10;31459:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31534:28;31565:14;;31534:45;;31590:29;31622:15;;31590:47;;31648:25;31676:11;;31648:39;;31702:18;:26;31721:6;31702:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;31732:18;:29;31751:9;31732:29;;;;;;;;;;;;;;;;;;;;;;;;;31702:59;31698:174;;;31795:1;31778:14;:18;;;;31829:1;31811:15;:19;;;;31859:1;31845:11;:15;;;;31698:174;31888:11;:19;31900:6;31888:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31912:11;:22;31924:9;31912:22;;;;;;;;;;;;;;;;;;;;;;;;;31911:23;31888:46;31884:467;;;31951:48;31973:6;31981:9;31992:6;31951:21;:48::i;:::-;31884:467;;;32022:11;:19;32034:6;32022:19;;;;;;;;;;;;;;;;;;;;;;;;;32021:20;:46;;;;;32045:11;:22;32057:9;32045:22;;;;;;;;;;;;;;;;;;;;;;;;;32021:46;32017:334;;;32084:46;32104:6;32112:9;32123:6;32084:19;:46::i;:::-;32017:334;;;32152:11;:19;32164:6;32152:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32175:11;:22;32187:9;32175:22;;;;;;;;;;;;;;;;;;;;;;;;;32152:45;32148:203;;;32214:48;32236:6;32244:9;32255:6;32214:21;:48::i;:::-;32148:203;;;32295:44;32313:6;32321:9;32332:6;32295:17;:44::i;:::-;32148:203;32017:334;31884:467;32367:18;:26;32386:6;32367:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;32397:18;:29;32416:9;32397:29;;;;;;;;;;;;;;;;;;;;;;;;;32367:59;32363:229;;;32460:20;32443:14;:37;;;;32513:21;32495:15;:39;;;;32563:17;32549:11;:31;;;;32363:229;31173:1426;;;;;;:::o;1348:226::-;1468:7;1501:1;1496;:6;;1504:12;1488:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1528:9;1544:1;1540;:5;;;;:::i;:::-;1528:17;;1565:1;1558:8;;;1348:226;;;;;:::o;38348:164::-;38390:7;38411:15;38428;38447:19;:17;:19::i;:::-;38410:56;;;;38484:20;38496:7;38484;:11;;:20;;;;:::i;:::-;38477:27;;;;38348:164;:::o;2780:132::-;2838:7;2865:39;2869:1;2872;2865:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2858:46;;2780:132;;;;:::o;14761:191::-;14835:16;14854:6;;;;;;;;;;;14835:25;;14880:8;14871:6;;:17;;;;;;;;;;;;;;;;;;14935:8;14904:40;;14925:8;14904:40;;;;;;;;;;;;14761:191;;:::o;1833:471::-;1891:7;2141:1;2136;:6;2132:47;;;2166:1;2159:8;;;;2132:47;2191:9;2207:1;2203;:5;;;;:::i;:::-;2191:17;;2236:1;2231;2227;:5;;;;:::i;:::-;:10;2219:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2295:1;2288:8;;;1833:471;;;;;:::o;41188:472::-;41248:21;41286:1;41272:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41248:40;;41317:4;41299;41304:1;41299:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41343:3;41333:4;41338:1;41333:7;;;;;;;;;;;;;;;;;;;;;:13;;;;;;;;;;;41357:66;41374:4;41389:15;41407;41357:8;:66::i;:::-;41434:15;:69;;;41518:15;41548:1;41585:4;41604:7;:5;:7::i;:::-;41626:15;41434:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41188:472;;:::o;41668:174::-;41723:48;41741:4;24040:42;41760:10;41723:9;:48::i;:::-;24040:42;41787:47;;41804:4;41787:47;;;41823:10;41787:47;;;;;;:::i;:::-;;;;;;;;41668:174;:::o;37066:541::-;37153:7;37162:11;;:::i;:::-;37191:17;;:::i;:::-;37238:37;37270:4;37238:27;37250:14;;37238:7;:11;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;37219:5;:16;;:56;;;;;37307:38;37340:4;37307:28;37319:15;;37307:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;37286:5;:18;;:59;;;;;37372:34;37401:4;37372:24;37384:11;;37372:7;:11;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;37356:5;:13;;:50;;;;;37417:23;37443:114;37543:5;:13;;;37443:81;37505:5;:18;;;37443:43;37469:5;:16;;;37443:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;37417:140;;37576:15;37593:5;37568:31;;;;;;37066:541;;;:::o;37615:725::-;37790:7;37812;37834:11;;:::i;:::-;37873:17;;:::i;:::-;37901:15;37919:24;37931:11;37919:7;:11;;:24;;;;:::i;:::-;37901:42;;37973:33;37994:11;37973:5;:16;;;:20;;:33;;;;:::i;:::-;37954:5;:16;;:52;;;;;38038:35;38061:11;38038:5;:18;;;:22;;:35;;;;:::i;:::-;38017:5;:18;;:56;;;;;38100:30;38118:11;38100:5;:13;;;:17;;:30;;;;:::i;:::-;38084:5;:13;;:46;;;;;38141:23;38167:114;38267:5;:13;;;38167:81;38229:5;:18;;;38167:43;38193:5;:16;;;38167:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;38141:140;;38300:7;38309:15;38326:5;38292:40;;;;;;;;;37615:725;;;;;;;:::o;34100:763::-;34251:15;34281:23;34319:17;34351:23;34389:17;34420:19;34431:7;34420:10;:19::i;:::-;34236:203;;;;;;;;;;34468:28;34488:7;34468;:15;34476:6;34468:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34450:7;:15;34458:6;34450:15;;;;;;;;;;;;;;;:46;;;;34525:28;34545:7;34525;:15;34533:6;34525:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34507:7;:15;34515:6;34507:15;;;;;;;;;;;;;;;:46;;;;34585:39;34608:15;34585:7;:18;34593:9;34585:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34564:7;:18;34572:9;34564:18;;;;;;;;;;;;;;;:60;;;;34635:47;34647:5;:16;;;34665:5;:16;;;34635:11;:47::i;:::-;34693:53;34707:5;:18;;;34727:5;:18;;;34693:13;:53::i;:::-;34757:38;34766:5;:13;;;34781:5;:13;;;34757:8;:38::i;:::-;34828:9;34811:44;;34820:6;34811:44;;;34839:15;34811:44;;;;;;:::i;:::-;;;;;;;;34100:763;;;;;;;;:::o;33317:775::-;33466:15;33496:23;33534:17;33566:23;33604:17;33635:19;33646:7;33635:10;:19::i;:::-;33451:203;;;;;;;;;;33683:28;33703:7;33683;:15;33691:6;33683:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33665:7;:15;33673:6;33665:15;;;;;;;;;;;;;;;:46;;;;33743:39;33766:15;33743:7;:18;33751:9;33743:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33722:7;:18;33730:9;33722:18;;;;;;;;;;;;;;;:60;;;;33814:39;33837:15;33814:7;:18;33822:9;33814:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33793:7;:18;33801:9;33793:18;;;;;;;;;;;;;;;:60;;;;33864:47;33876:5;:16;;;33894:5;:16;;;33864:11;:47::i;:::-;33922:53;33936:5;:18;;;33956:5;:18;;;33922:13;:53::i;:::-;33986:38;33995:5;:13;;;34010:5;:13;;;33986:8;:38::i;:::-;34057:9;34040:44;;34049:6;34040:44;;;34068:15;34040:44;;;;;;:::i;:::-;;;;;;;;33317:775;;;;;;;;:::o;34871:834::-;35022:15;35052:23;35090:17;35122:23;35160:17;35191:19;35202:7;35191:10;:19::i;:::-;35007:203;;;;;;;;;;35239:28;35259:7;35239;:15;35247:6;35239:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35221:7;:15;35229:6;35221:15;;;;;;;;;;;;;;;:46;;;;35296:28;35316:7;35296;:15;35304:6;35296:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35278:7;:15;35286:6;35278:15;;;;;;;;;;;;;;;:46;;;;35356:39;35379:15;35356:7;:18;35364:9;35356:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35335:7;:18;35343:9;35335:18;;;;;;;;;;;;;;;:60;;;;35427:39;35450:15;35427:7;:18;35435:9;35427:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35406:7;:18;35414:9;35406:18;;;;;;;;;;;;;;;:60;;;;35477:47;35489:5;:16;;;35507:5;:16;;;35477:11;:47::i;:::-;35535:53;35549:5;:18;;;35569:5;:18;;;35535:13;:53::i;:::-;35599:38;35608:5;:13;;;35623:5;:13;;;35599:8;:38::i;:::-;35670:9;35653:44;;35662:6;35653:44;;;35681:15;35653:44;;;;;;:::i;:::-;;;;;;;;34871:834;;;;;;;;:::o;32607:702::-;32754:15;32784:23;32822:17;32854:23;32892:17;32923:19;32934:7;32923:10;:19::i;:::-;32739:203;;;;;;;;;;32971:28;32991:7;32971;:15;32979:6;32971:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32953:7;:15;32961:6;32953:15;;;;;;;;;;;;;;;:46;;;;33031:39;33054:15;33031:7;:18;33039:9;33031:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33010:7;:18;33018:9;33010:18;;;;;;;;;;;;;;;:60;;;;33081:47;33093:5;:16;;;33111:5;:16;;;33081:11;:47::i;:::-;33139:53;33153:5;:18;;;33173:5;:18;;;33139:13;:53::i;:::-;33203:38;33212:5;:13;;;33227:5;:13;;;33203:8;:38::i;:::-;33274:9;33257:44;;33266:6;33257:44;;;33285:15;33257:44;;;;;;:::i;:::-;;;;;;;;32607:702;;;;;;;;:::o;38520:605::-;38571:7;38580;38600:15;38618:7;;38600:25;;38636:15;24175:4;38636:25;;38677:9;38672:338;38696:9;:16;;;;38692:1;:20;38672:338;;;38780:7;38756;:21;38764:9;38774:1;38764:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38756:21;;;;;;;;;;;;;;;;:31;:83;;;;38832:7;38808;:21;38816:9;38826:1;38816:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38808:21;;;;;;;;;;;;;;;;:31;38756:83;38734:146;;;38863:7;;24175:4;38855:25;;;;;;;;;38734:146;38905:34;38917:7;:21;38925:9;38935:1;38925:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38917:21;;;;;;;;;;;;;;;;38905:7;:11;;:34;;;;:::i;:::-;38895:44;;38964:34;38976:7;:21;38984:9;38994:1;38984:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38976:21;;;;;;;;;;;;;;;;38964:7;:11;;:34;;;;:::i;:::-;38954:44;;38714:3;;;;;:::i;:::-;;;;38672:338;;;;39034:20;24175:4;39034:7;;:11;;:20;;;;:::i;:::-;39024:7;:30;39020:61;;;39064:7;;24175:4;39056:25;;;;;;;;39020:61;39100:7;39109;39092:25;;;;;;38520:605;;;:::o;3408:312::-;3528:7;3560:1;3556;:5;3563:12;3548:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3587:9;3603:1;3599;:5;;;;:::i;:::-;3587:17;;3711:1;3704:8;;;3408:312;;;;;:::o;35713:175::-;35805:24;35817:11;35805:7;;:11;;:24;;;;:::i;:::-;35795:7;:34;;;;35853:27;35868:11;35853:10;;:14;;:27;;;;:::i;:::-;35840:10;:40;;;;35713:175;;:::o;35896:298::-;36023:41;36050:13;36023:7;:22;36039:4;36023:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;35998:7;:22;36014:4;35998:22;;;;;;;;;;;;;;;:66;;;;36079:11;:26;36099:4;36079:26;;;;;;;;;;;;;;;;;;;;;;;;;36075:111;;;36145:41;36172:13;36145:7;:22;36161:4;36145:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;36120:7;:22;36136:4;36120:22;;;;;;;;;;;;;;;:66;;;;36075:111;35896:298;;:::o;36202:259::-;36300:36;36327:8;36300:7;:22;36316:4;36300:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36275:7;:22;36291:4;36275:22;;;;;;;;;;;;;;;:61;;;;36351:11;:26;36371:4;36351:26;;;;;;;;;;;;;;;;;;;;;;;;;36347:106;;;36417:36;36444:8;36417:7;:22;36433:4;36417:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36392:7;:22;36408:4;36392:22;;;;;;;;;;;;;;;:61;;;;36347:106;36202:259;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:179::-;;2853:46;2895:3;2887:6;2853:46;:::i;:::-;2931:4;2926:3;2922:14;2908:28;;2843:99;;;;:::o;2948:108::-;3025:24;3043:5;3025:24;:::i;:::-;3020:3;3013:37;3003:53;;:::o;3062:118::-;3149:24;3167:5;3149:24;:::i;:::-;3144:3;3137:37;3127:53;;:::o;3216:732::-;;3364:54;3412:5;3364:54;:::i;:::-;3434:86;3513:6;3508:3;3434:86;:::i;:::-;3427:93;;3544:56;3594:5;3544:56;:::i;:::-;3623:7;3654:1;3639:284;3664:6;3661:1;3658:13;3639:284;;;3740:6;3734:13;3767:63;3826:3;3811:13;3767:63;:::i;:::-;3760:70;;3853:60;3906:6;3853:60;:::i;:::-;3843:70;;3699:224;3686:1;3683;3679:9;3674:14;;3639:284;;;3643:14;3939:3;3932:10;;3340:608;;;;;;;:::o;3954:109::-;4035:21;4050:5;4035:21;:::i;:::-;4030:3;4023:34;4013:50;;:::o;4069:185::-;4183:64;4241:5;4183:64;:::i;:::-;4178:3;4171:77;4161:93;;:::o;4260:147::-;4355:45;4394:5;4355:45;:::i;:::-;4350:3;4343:58;4333:74;;:::o;4413:364::-;;4529:39;4562:5;4529:39;:::i;:::-;4584:71;4648:6;4643:3;4584:71;:::i;:::-;4577:78;;4664:52;4709:6;4704:3;4697:4;4690:5;4686:16;4664:52;:::i;:::-;4741:29;4763:6;4741:29;:::i;:::-;4736:3;4732:39;4725:46;;4505:272;;;;;:::o;4783:367::-;;4946:67;5010:2;5005:3;4946:67;:::i;:::-;4939:74;;5043:34;5039:1;5034:3;5030:11;5023:55;5109:5;5104:2;5099:3;5095:12;5088:27;5141:2;5136:3;5132:12;5125:19;;4929:221;;;:::o;5156:374::-;;5319:67;5383:2;5378:3;5319:67;:::i;:::-;5312:74;;5416:34;5412:1;5407:3;5403:11;5396:55;5482:12;5477:2;5472:3;5468:12;5461:34;5521:2;5516:3;5512:12;5505:19;;5302:228;;;:::o;5536:370::-;;5699:67;5763:2;5758:3;5699:67;:::i;:::-;5692:74;;5796:34;5792:1;5787:3;5783:11;5776:55;5862:8;5857:2;5852:3;5848:12;5841:30;5897:2;5892:3;5888:12;5881:19;;5682:224;;;:::o;5912:366::-;;6075:67;6139:2;6134:3;6075:67;:::i;:::-;6068:74;;6172:34;6168:1;6163:3;6159:11;6152:55;6238:4;6233:2;6228:3;6224:12;6217:26;6269:2;6264:3;6260:12;6253:19;;6058:220;;;:::o;6284:366::-;;6447:67;6511:2;6506:3;6447:67;:::i;:::-;6440:74;;6544:34;6540:1;6535:3;6531:11;6524:55;6610:4;6605:2;6600:3;6596:12;6589:26;6641:2;6636:3;6632:12;6625:19;;6430:220;;;:::o;6656:325::-;;6819:67;6883:2;6878:3;6819:67;:::i;:::-;6812:74;;6916:29;6912:1;6907:3;6903:11;6896:50;6972:2;6967:3;6963:12;6956:19;;6802:179;;;:::o;6987:325::-;;7150:67;7214:2;7209:3;7150:67;:::i;:::-;7143:74;;7247:29;7243:1;7238:3;7234:11;7227:50;7303:2;7298:3;7294:12;7287:19;;7133:179;;;:::o;7318:321::-;;7481:67;7545:2;7540:3;7481:67;:::i;:::-;7474:74;;7578:25;7574:1;7569:3;7565:11;7558:46;7630:2;7625:3;7621:12;7614:19;;7464:175;;;:::o;7645:329::-;;7808:67;7872:2;7867:3;7808:67;:::i;:::-;7801:74;;7905:33;7901:1;7896:3;7892:11;7885:54;7965:2;7960:3;7956:12;7949:19;;7791:183;;;:::o;7980:366::-;;8143:67;8207:2;8202:3;8143:67;:::i;:::-;8136:74;;8240:34;8236:1;8231:3;8227:11;8220:55;8306:4;8301:2;8296:3;8292:12;8285:26;8337:2;8332:3;8328:12;8321:19;;8126:220;;;:::o;8352:365::-;;8515:67;8579:2;8574:3;8515:67;:::i;:::-;8508:74;;8612:34;8608:1;8603:3;8599:11;8592:55;8678:3;8673:2;8668:3;8664:12;8657:25;8708:2;8703:3;8699:12;8692:19;;8498:219;;;:::o;8723:330::-;;8886:67;8950:2;8945:3;8886:67;:::i;:::-;8879:74;;8983:34;8979:1;8974:3;8970:11;8963:55;9044:2;9039:3;9035:12;9028:19;;8869:184;;;:::o;9059:373::-;;9222:67;9286:2;9281:3;9222:67;:::i;:::-;9215:74;;9319:34;9315:1;9310:3;9306:11;9299:55;9385:11;9380:2;9375:3;9371:12;9364:33;9423:2;9418:3;9414:12;9407:19;;9205:227;;;:::o;9438:369::-;;9601:67;9665:2;9660:3;9601:67;:::i;:::-;9594:74;;9698:34;9694:1;9689:3;9685:11;9678:55;9764:7;9759:2;9754:3;9750:12;9743:29;9798:2;9793:3;9789:12;9782:19;;9584:223;;;:::o;9813:368::-;;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10073:34;10069:1;10064:3;10060:11;10053:55;10139:6;10134:2;10129:3;10125:12;10118:28;10172:2;10167:3;10163:12;10156:19;;9959:222;;;:::o;10187:329::-;;10350:67;10414:2;10409:3;10350:67;:::i;:::-;10343:74;;10447:33;10443:1;10438:3;10434:11;10427:54;10507:2;10502:3;10498:12;10491:19;;10333:183;;;:::o;10522:376::-;;10685:67;10749:2;10744:3;10685:67;:::i;:::-;10678:74;;10782:34;10778:1;10773:3;10769:11;10762:55;10848:14;10843:2;10838:3;10834:12;10827:36;10889:2;10884:3;10880:12;10873:19;;10668:230;;;:::o;10904:118::-;10991:24;11009:5;10991:24;:::i;:::-;10986:3;10979:37;10969:53;;:::o;11028:112::-;11111:22;11127:5;11111:22;:::i;:::-;11106:3;11099:35;11089:51;;:::o;11146:222::-;;11277:2;11266:9;11262:18;11254:26;;11290:71;11358:1;11347:9;11343:17;11334:6;11290:71;:::i;:::-;11244:124;;;;:::o;11374:442::-;;11561:2;11550:9;11546:18;11538:26;;11574:71;11642:1;11631:9;11627:17;11618:6;11574:71;:::i;:::-;11655:72;11723:2;11712:9;11708:18;11699:6;11655:72;:::i;:::-;11737;11805:2;11794:9;11790:18;11781:6;11737:72;:::i;:::-;11528:288;;;;;;:::o;11822:210::-;;11947:2;11936:9;11932:18;11924:26;;11960:65;12022:1;12011:9;12007:17;11998:6;11960:65;:::i;:::-;11914:118;;;;:::o;12038:276::-;;12196:2;12185:9;12181:18;12173:26;;12209:98;12304:1;12293:9;12289:17;12280:6;12209:98;:::i;:::-;12163:151;;;;:::o;12320:313::-;;12471:2;12460:9;12456:18;12448:26;;12520:9;12514:4;12510:20;12506:1;12495:9;12491:17;12484:47;12548:78;12621:4;12612:6;12548:78;:::i;:::-;12540:86;;12438:195;;;;:::o;12639:419::-;;12843:2;12832:9;12828:18;12820:26;;12892:9;12886:4;12882:20;12878:1;12867:9;12863:17;12856:47;12920:131;13046:4;12920:131;:::i;:::-;12912:139;;12810:248;;;:::o;13064:419::-;;13268:2;13257:9;13253:18;13245:26;;13317:9;13311:4;13307:20;13303:1;13292:9;13288:17;13281:47;13345:131;13471:4;13345:131;:::i;:::-;13337:139;;13235:248;;;:::o;13489:419::-;;13693:2;13682:9;13678:18;13670:26;;13742:9;13736:4;13732:20;13728:1;13717:9;13713:17;13706:47;13770:131;13896:4;13770:131;:::i;:::-;13762:139;;13660:248;;;:::o;13914:419::-;;14118:2;14107:9;14103:18;14095:26;;14167:9;14161:4;14157:20;14153:1;14142:9;14138:17;14131:47;14195:131;14321:4;14195:131;:::i;:::-;14187:139;;14085:248;;;:::o;14339:419::-;;14543:2;14532:9;14528:18;14520:26;;14592:9;14586:4;14582:20;14578:1;14567:9;14563:17;14556:47;14620:131;14746:4;14620:131;:::i;:::-;14612:139;;14510:248;;;:::o;14764:419::-;;14968:2;14957:9;14953:18;14945:26;;15017:9;15011:4;15007:20;15003:1;14992:9;14988:17;14981:47;15045:131;15171:4;15045:131;:::i;:::-;15037:139;;14935:248;;;:::o;15189:419::-;;15393:2;15382:9;15378:18;15370:26;;15442:9;15436:4;15432:20;15428:1;15417:9;15413:17;15406:47;15470:131;15596:4;15470:131;:::i;:::-;15462:139;;15360:248;;;:::o;15614:419::-;;15818:2;15807:9;15803:18;15795:26;;15867:9;15861:4;15857:20;15853:1;15842:9;15838:17;15831:47;15895:131;16021:4;15895:131;:::i;:::-;15887:139;;15785:248;;;:::o;16039:419::-;;16243:2;16232:9;16228:18;16220:26;;16292:9;16286:4;16282:20;16278:1;16267:9;16263:17;16256:47;16320:131;16446:4;16320:131;:::i;:::-;16312:139;;16210:248;;;:::o;16464:419::-;;16668:2;16657:9;16653:18;16645:26;;16717:9;16711:4;16707:20;16703:1;16692:9;16688:17;16681:47;16745:131;16871:4;16745:131;:::i;:::-;16737:139;;16635:248;;;:::o;16889:419::-;;17093:2;17082:9;17078:18;17070:26;;17142:9;17136:4;17132:20;17128:1;17117:9;17113:17;17106:47;17170:131;17296:4;17170:131;:::i;:::-;17162:139;;17060:248;;;:::o;17314:419::-;;17518:2;17507:9;17503:18;17495:26;;17567:9;17561:4;17557:20;17553:1;17542:9;17538:17;17531:47;17595:131;17721:4;17595:131;:::i;:::-;17587:139;;17485:248;;;:::o;17739:419::-;;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17910:248;;;:::o;18164:419::-;;18368:2;18357:9;18353:18;18345:26;;18417:9;18411:4;18407:20;18403:1;18392:9;18388:17;18381:47;18445:131;18571:4;18445:131;:::i;:::-;18437:139;;18335:248;;;:::o;18589:419::-;;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:131;18996:4;18870:131;:::i;:::-;18862:139;;18760:248;;;:::o;19014:419::-;;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19185:248;;;:::o;19439:419::-;;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19610:248;;;:::o;19864:222::-;;19995:2;19984:9;19980:18;19972:26;;20008:71;20076:1;20065:9;20061:17;20052:6;20008:71;:::i;:::-;19962:124;;;;:::o;20092:831::-;;20393:3;20382:9;20378:19;20370:27;;20407:71;20475:1;20464:9;20460:17;20451:6;20407:71;:::i;:::-;20488:80;20564:2;20553:9;20549:18;20540:6;20488:80;:::i;:::-;20615:9;20609:4;20605:20;20600:2;20589:9;20585:18;20578:48;20643:108;20746:4;20737:6;20643:108;:::i;:::-;20635:116;;20761:72;20829:2;20818:9;20814:18;20805:6;20761:72;:::i;:::-;20843:73;20911:3;20900:9;20896:19;20887:6;20843:73;:::i;:::-;20360:563;;;;;;;;:::o;20929:442::-;;21116:2;21105:9;21101:18;21093:26;;21129:71;21197:1;21186:9;21182:17;21173:6;21129:71;:::i;:::-;21210:72;21278:2;21267:9;21263:18;21254:6;21210:72;:::i;:::-;21292;21360:2;21349:9;21345:18;21336:6;21292:72;:::i;:::-;21083:288;;;;;;:::o;21377:214::-;;21504:2;21493:9;21489:18;21481:26;;21517:67;21581:1;21570:9;21566:17;21557:6;21517:67;:::i;:::-;21471:120;;;;:::o;21597:132::-;;21687:3;21679:11;;21717:4;21712:3;21708:14;21700:22;;21669:60;;;:::o;21735:114::-;;21836:5;21830:12;21820:22;;21809:40;;;:::o;21855:99::-;;21941:5;21935:12;21925:22;;21914:40;;;:::o;21960:113::-;;22062:4;22057:3;22053:14;22045:22;;22035:38;;;:::o;22079:184::-;;22212:6;22207:3;22200:19;22252:4;22247:3;22243:14;22228:29;;22190:73;;;;:::o;22269:169::-;;22387:6;22382:3;22375:19;22427:4;22422:3;22418:14;22403:29;;22365:73;;;;:::o;22444:305::-;;22503:20;22521:1;22503:20;:::i;:::-;22498:25;;22537:20;22555:1;22537:20;:::i;:::-;22532:25;;22691:1;22623:66;22619:74;22616:1;22613:81;22610:2;;;22697:18;;:::i;:::-;22610:2;22741:1;22738;22734:9;22727:16;;22488:261;;;;:::o;22755:185::-;;22812:20;22830:1;22812:20;:::i;:::-;22807:25;;22846:20;22864:1;22846:20;:::i;:::-;22841:25;;22885:1;22875:2;;22890:18;;:::i;:::-;22875:2;22932:1;22929;22925:9;22920:14;;22797:143;;;;:::o;22946:348::-;;23009:20;23027:1;23009:20;:::i;:::-;23004:25;;23043:20;23061:1;23043:20;:::i;:::-;23038:25;;23231:1;23163:66;23159:74;23156:1;23153:81;23148:1;23141:9;23134:17;23130:105;23127:2;;;23238:18;;:::i;:::-;23127:2;23286:1;23283;23279:9;23268:20;;22994:300;;;;:::o;23300:191::-;;23360:20;23378:1;23360:20;:::i;:::-;23355:25;;23394:20;23412:1;23394:20;:::i;:::-;23389:25;;23433:1;23430;23427:8;23424:2;;;23438:18;;:::i;:::-;23424:2;23483:1;23480;23476:9;23468:17;;23345:146;;;;:::o;23497:96::-;;23563:24;23581:5;23563:24;:::i;:::-;23552:35;;23542:51;;;:::o;23599:90::-;;23676:5;23669:13;23662:21;23651:32;;23641:48;;;:::o;23695:126::-;;23772:42;23765:5;23761:54;23750:65;;23740:81;;;:::o;23827:77::-;;23893:5;23882:16;;23872:32;;;:::o;23910:86::-;;23985:4;23978:5;23974:16;23963:27;;23953:43;;;:::o;24002:180::-;;24112:64;24170:5;24112:64;:::i;:::-;24099:77;;24089:93;;;:::o;24188:140::-;;24298:24;24316:5;24298:24;:::i;:::-;24285:37;;24275:53;;;:::o;24334:121::-;;24425:24;24443:5;24425:24;:::i;:::-;24412:37;;24402:53;;;:::o;24461:307::-;24529:1;24539:113;24553:6;24550:1;24547:13;24539:113;;;24638:1;24633:3;24629:11;24623:18;24619:1;24614:3;24610:11;24603:39;24575:2;24572:1;24568:10;24563:15;;24539:113;;;24670:6;24667:1;24664:13;24661:2;;;24750:1;24741:6;24736:3;24732:16;24725:27;24661:2;24510:258;;;;:::o;24774:233::-;;24836:24;24854:5;24836:24;:::i;:::-;24827:33;;24882:66;24875:5;24872:77;24869:2;;;24952:18;;:::i;:::-;24869:2;24999:1;24992:5;24988:13;24981:20;;24817:190;;;:::o;25013:180::-;25061:77;25058:1;25051:88;25158:4;25155:1;25148:15;25182:4;25179:1;25172:15;25199:180;25247:77;25244:1;25237:88;25344:4;25341:1;25334:15;25368:4;25365:1;25358:15;25385:102;;25477:2;25473:7;25468:2;25461:5;25457:14;25453:28;25443:38;;25433:54;;;:::o;25493:122::-;25566:24;25584:5;25566:24;:::i;:::-;25559:5;25556:35;25546:2;;25605:1;25602;25595:12;25546:2;25536:79;:::o;25621:116::-;25691:21;25706:5;25691:21;:::i;:::-;25684:5;25681:32;25671:2;;25727:1;25724;25717:12;25671:2;25661:76;:::o;25743:122::-;25816:24;25834:5;25816:24;:::i;:::-;25809:5;25806:35;25796:2;;25855:1;25852;25845:12;25796:2;25786:79;:::o

Swarm Source

ipfs://5389c142c58c073df8f89a394c4307185a9afdbe866a5da5721d5c4bc890648c
[ 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.