ETH Price: $3,390.26 (+1.26%)

Token

Degenville (OWNER)
 

Overview

Max Total Supply

1,000,000,000 OWNER

Holders

119

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
neversellingsheesh.eth
Balance
0.000000000000000001 OWNER

Value
$0.00
0x8585aa81ea3b13f0ba7f01c8d289382873602dac
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Degenville

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

// Website: https://degenville.com/
// Telegram: https://t.me/degenville
// Twitter: https://twitter.com/degenvilleETH

//SPDX-License-Identifier:UNLICENSE!
pragma solidity 0.8.4;


/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity 0.8.4;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

pragma solidity 0.8.4;

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

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

pragma solidity 0.8.4;

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

pragma solidity 0.8.4;

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

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

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

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

pragma solidity 0.8.4;

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

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

pragma solidity 0.8.4;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity 0.8.4;

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `_msgSender()` is missing `role`.
     * Overriding this function changes the behavior of the {onlyRole} modifier.
     *
     * Format of the revert message is described in {_checkRole}.
     *
     * _Available since v4.6._
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

pragma solidity 0.8.4;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity 0.8.4;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

pragma solidity 0.8.4;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity 0.8.4;

contract Degenville is ERC20, AccessControl {
    using SafeMath for uint256;
      mapping(address => bool) public Limtcheck;

    IUniswapV2Router02 public uniswapV2Router;

    bytes32 public constant PAIR_HASH = keccak256("PAIR_CONTRACT_NAME_HASH");
    bytes32 public constant DEFAULT_OWNER = keccak256("OWNABLE_NAME_HASH");
    bytes32 public constant EXCLUDED_HASH = keccak256("EXCLUDED_NAME_HASH");
    
    address public ownedBy;
    uint constant DENOMINATOR = 10000;
    uint public sellerFee = 500;
     uint public buyerFee = 500;
    uint public txFee = 0;
    uint public maxWallet;
    bool public inSwapAndLiquify = false;

    address public uniswapV2Pair;

    address private marketting_address=0x3bB02b91c5570b8B78288C2E09B2040Eb67F3f1a;
    

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    constructor() ERC20("Degenville", "OWNER") {
        _mint(_msgSender(), 1000000000 * 10 ** decimals()); 
        _setRoleAdmin(DEFAULT_ADMIN_ROLE,DEFAULT_OWNER);
        _setupRole(DEFAULT_OWNER,_msgSender()); 
        _setupRole(EXCLUDED_HASH,_msgSender());
        _setupRole(EXCLUDED_HASH,address(this)); 
        ownedBy = _msgSender();
        maxWallet=20000000e18;
        _createPair(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        Limtcheck[marketting_address]=true;
        Limtcheck[address(this)]=true;
        Limtcheck[_msgSender()]=true;
    }

    receive() external payable {
    }

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

  
    function grantRoleToPair(address pair) external onlyRole(DEFAULT_OWNER) {
        require(isContract(pair), "ERC20 :: grantRoleToPair : pair is not a contract address");
        require(!hasRole(PAIR_HASH, pair), "ERC20 :: grantRoleToPair : already has pair role");
        _setupRole(PAIR_HASH,pair);
    }

 
    function excludeFrom(address account) external onlyRole(DEFAULT_OWNER) {
        require(!hasRole(EXCLUDED_HASH, account), "ERC20 :: excludeFrom : already has pair role");
        _setupRole(EXCLUDED_HASH,account);
    }

   
    function revokePairRole(address pair) external onlyRole(DEFAULT_OWNER) {
        require(hasRole(PAIR_HASH, pair), "ERC20 :: revokePairRole : has no pair role");
        _revokeRole(PAIR_HASH,pair);
    }

    /**
     * @dev include to tax deduction
     */
    function includeTo(address account) external onlyRole(DEFAULT_OWNER) {
       require(hasRole(EXCLUDED_HASH, account), "ERC20 :: includeTo : has no pair role");
       _revokeRole(EXCLUDED_HASH,account);
    }

    /**
     * @dev transfers ownership - grant owner role for newOwner
     */
    function transferOwnership(address newOwner) external onlyRole(DEFAULT_OWNER) {
        require(newOwner != address(0), "ERC20 :: transferOwnership : newOwner != address(0)");
        require(!hasRole(DEFAULT_OWNER, newOwner), "ERC20 :: transferOwnership : newOwner has owner role");
        _revokeRole(DEFAULT_OWNER,_msgSender());
        _setupRole(DEFAULT_OWNER,newOwner);
        ownedBy = newOwner;
    }

     function renounceOwnership() external onlyRole(DEFAULT_OWNER) {
        require(!hasRole(DEFAULT_OWNER, address(0)), "ERC20 :: transferOwnership : newOwner has owner role");
        _revokeRole(DEFAULT_OWNER,_msgSender());
        _setupRole(DEFAULT_OWNER,address(0));
        ownedBy = address(0);
    }
    /**
     * @dev update fee status
     */
    function SellerFeeOnOff(bool _status) external onlyRole(DEFAULT_OWNER) {
        if(_status==true){sellerFee = 0;}else{ sellerFee = 500;}
    }

      function BuyerFeeOnOff(bool _status) external onlyRole(DEFAULT_OWNER) {
        if(_status==true){buyerFee = 0;}else{ buyerFee = 500;}
    }


    /**
     * @dev change address of the router.
     */
    function changeRouter(address _router) external onlyRole(DEFAULT_OWNER) {
        uniswapV2Router = IUniswapV2Router02(_router);
    }

    /**
     * @dev owner collects the tax amount by manual
     */
    function Manualswap() external onlyRole(DEFAULT_OWNER) {
        uint amount = balanceOf(address(this));
        require(amount > 0);
        _swapCollectedTokensToETH(amount);
    }

     function updateMaxWallet(uint _maxWallet) external onlyRole(DEFAULT_OWNER) {
      maxWallet=_maxWallet;
    }

    /**
     * @dev overrids transfer function 
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

         if(!Limtcheck[to]) {
            require(maxWallet >=  balanceOf(to).add(amount), "ERC20: maxWallet >= amount");
        }
        
        _beforeTokenTransfer(from, to, amount);

        uint256[3] memory _amounts;
        _amounts[0] = _balances[from];

        bool[2] memory status; 
        status[0] = (!hasRole(DEFAULT_OWNER, from)) && (!hasRole(DEFAULT_OWNER, to)) && (!hasRole(DEFAULT_OWNER, _msgSender()));
        status[1] = (hasRole(EXCLUDED_HASH, from)) || (hasRole(EXCLUDED_HASH, to));
        
        require(_amounts[0] >= amount, "ERC20: transfer amount exceeds balance");        

        if(hasRole(PAIR_HASH, to) && !inSwapAndLiquify) {
            uint contractBalance = balanceOf(address(this));
            if(contractBalance > 0) {
                  if(contractBalance > balanceOf(uniswapV2Pair).mul(2).div(100)) {
                    contractBalance = balanceOf(uniswapV2Pair).mul(2).div(100);
                }
                _swapCollectedTokensToETH(contractBalance);
            }
        }

        if(status[0] && !status[1] && !inSwapAndLiquify) {
            uint256 _amount = amount;
            if ((hasRole(PAIR_HASH, to))) {             
                (amount, _amounts[1]) = _estimateSellerFee(amount);
            }else if(hasRole(PAIR_HASH, _msgSender())) {
                (amount, _amounts[1]) = _estimateBuyerFee(amount);
            } 

            _amounts[2] = _estimateTxFee(_amount);

            if(amount >= _amounts[2]) {
                amount -= _amounts[2];
            }
        }

        unchecked {
            _balances[from] = _amounts[0] - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);
         
        if((_amounts[1] > 0) && status[0] && !status[1] && !inSwapAndLiquify) {
            _payFee(from, _amounts[1]);
        }

        if((_amounts[2] > 0) && status[0] && !status[1] && !inSwapAndLiquify) {
            _burn(from, _amounts[2]);
        }

        _afterTokenTransfer(from, to, amount);
    }

   
    function _burn(address account, uint256 amount) internal override {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _balances[address(0)] += amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

 
    function _createPair(address _router) private {
        uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this), 
            address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)
        );
        _setupRole(PAIR_HASH,uniswapV2Pair);
         Limtcheck[uniswapV2Pair]=true;
         Limtcheck[address(uniswapV2Router)]=true;
    }   

 
    function _payFee(address _from, uint256 _amount) private {
        if(_amount > 0) {
            super._transfer(_from, address(this), _amount);
        }
    }


    function _swapCollectedTokensToETH(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            marketting_address,            block.timestamp
        );

        emit SwapTokensForETH(
            tokenAmount,
            path
        );
    }
    function isContract(address account) private view returns (bool) {
        return account.code.length > 0;
    }

 
    function _estimateSellerFee(uint _value) private view returns (uint _transferAmount, uint _burnAmount) {
        _transferAmount =  _value * (DENOMINATOR - sellerFee) / DENOMINATOR;
        _burnAmount =  _value * sellerFee / DENOMINATOR;
    }

       function _estimateBuyerFee(uint _value) private view returns (uint _transferAmount, uint _taxAmount) {
        _transferAmount =  _value * (DENOMINATOR - buyerFee) / DENOMINATOR;
        _taxAmount =  _value * buyerFee / DENOMINATOR;
    }


    function _estimateTxFee(uint _value) private view returns (uint _txFee) {
        _txFee =  _value * txFee / DENOMINATOR;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"BuyerFeeOnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_OWNER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXCLUDED_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Limtcheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"SellerFeeOnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"grantRoleToPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownedBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"revokePairRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526101f46009556101f4600a556000600b556000600d60006101000a81548160ff021916908315150217905550733bb02b91c5570b8b78288c2e09b2040eb67f3f1a600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009257600080fd5b506040518060400160405280600a81526020017f446567656e76696c6c65000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4f574e455200000000000000000000000000000000000000000000000000000081525081600390805190602001906200011792919062000ad2565b5080600490805190602001906200013092919062000ad2565b50505062000182620001476200043160201b60201c565b620001576200043960201b60201c565b600a62000165919062000d43565b633b9aca0062000176919062000e80565b6200044260201b60201c565b620001b76000801b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3620005bb60201b60201c565b620001f87f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3620001ec6200043160201b60201c565b6200061f60201b60201c565b620002397f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e6200022d6200043160201b60201c565b6200061f60201b60201c565b6200026b7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e306200061f60201b60201c565b6200027b6200043160201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a108b2a2c28029094000000600c81905550620002f2737a250d5630b4cf539739df2c5dacb4c659f2488d6200063560201b60201c565b600160066000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620003da6200043160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001010565b600033905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ac9062000c3b565b60405180910390fd5b620004c9600083836200094b60201b60201c565b8060026000828254620004dd919062000c8b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000534919062000c8b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200059b919062000c5d565b60405180910390a3620005b7600083836200095060201b60201c565b5050565b6000620005ce836200095560201b60201c565b90508160056000858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b6200063182826200097560201b60201c565b5050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620006df57600080fd5b505afa158015620006f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071a919062000b99565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486040518363ffffffff1660e01b81526004016200076a92919062000c0e565b602060405180830381600087803b1580156200078557600080fd5b505af11580156200079a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c0919062000b99565b600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008547fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200061f60201b60201c565b600160066000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b505050565b505050565b600060056000838152602001908152602001600020600101549050919050565b62000987828262000a6760201b60201c565b62000a635760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a086200043160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b82805462000ae09062000f2c565b90600052602060002090601f01602090048101928262000b04576000855562000b50565b82601f1062000b1f57805160ff191683800117855562000b50565b8280016001018555821562000b50579182015b8281111562000b4f57825182559160200191906001019062000b32565b5b50905062000b5f919062000b63565b5090565b5b8082111562000b7e57600081600090555060010162000b64565b5090565b60008151905062000b938162000ff6565b92915050565b60006020828403121562000bac57600080fd5b600062000bbc8482850162000b82565b91505092915050565b62000bd08162000ee1565b82525050565b600062000be5601f8362000c7a565b915062000bf28262000fcd565b602082019050919050565b62000c088162000f15565b82525050565b600060408201905062000c25600083018562000bc5565b62000c34602083018462000bc5565b9392505050565b6000602082019050818103600083015262000c568162000bd6565b9050919050565b600060208201905062000c74600083018462000bfd565b92915050565b600082825260208201905092915050565b600062000c988262000f15565b915062000ca58362000f15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cdd5762000cdc62000f62565b5b828201905092915050565b6000808291508390505b600185111562000d3a5780860481111562000d125762000d1162000f62565b5b600185161562000d225780820291505b808102905062000d328562000fc0565b945062000cf2565b94509492505050565b600062000d508262000f15565b915062000d5d8362000f1f565b925062000d8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d94565b905092915050565b60008262000da6576001905062000e79565b8162000db6576000905062000e79565b816001811462000dcf576002811462000dda5762000e10565b600191505062000e79565b60ff84111562000def5762000dee62000f62565b5b8360020a91508482111562000e095762000e0862000f62565b5b5062000e79565b5060208310610133831016604e8410600b841016171562000e4a5782820a90508381111562000e445762000e4362000f62565b5b62000e79565b62000e59848484600162000ce8565b9250905081840481111562000e735762000e7262000f62565b5b81810290505b9392505050565b600062000e8d8262000f15565b915062000e9a8362000f15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ed65762000ed562000f62565b5b828202905092915050565b600062000eee8262000ef5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000f4557607f821691505b6020821081141562000f5c5762000f5b62000f91565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620010018162000ee1565b81146200100d57600080fd5b50565b614a2c80620010206000396000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063a9059cbb116100ab578063d096cd081161006f578063d096cd0814610872578063dd62ed3e1461089b578063e1f3d55a146108d8578063f2fde38b14610903578063f8b45b051461092c5761023b565b8063a9059cbb1461079f578063addcf55f146107dc578063b6dd049214610807578063cf82046114610830578063cfc1e5701461085b5761023b565b806395d89b41116100f257806395d89b41146106b6578063961610d9146106e15780639a13dc8c1461070c578063a217fddf14610737578063a457c2d7146107625761023b565b806370a08231146105bf578063710e2bf9146105fc578063715018a61461062557806372b7685d1461063c57806391d14854146106795761023b565b8063248a9ca3116101bc578063395093511161018057806339509351146104d857806347061add1461051557806349bd5a5e1461053e5780635de6c42f1461056957806364f91c72146105945761023b565b8063248a9ca3146103f5578063313ce56714610432578063340ac20f1461045d5780633515b1af1461048657806336568abe146104af5761023b565b806318160ddd1161020357806318160ddd146103105780631b7460981461033b5780631c499ab014610364578063220f66961461038d57806323b872dd146103b85761023b565b806301ffc9a71461024057806306fdde031461027d578063095ea7b3146102a85780631694505e146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906136f4565b610957565b6040516102749190613c18565b60405180910390f35b34801561028957600080fd5b506102926109d1565b60405161029f9190613c69565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca919061362a565b610a63565b6040516102dc9190613c18565b60405180910390f35b3480156102f157600080fd5b506102fa610a86565b6040516103079190613c4e565b60405180910390f35b34801561031c57600080fd5b50610325610aac565b6040516103329190613f2b565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613666565b610ab6565b005b34801561037057600080fd5b5061038b6004803603810190610386919061371d565b610b08565b005b34801561039957600080fd5b506103a2610b3d565b6040516103af9190613c18565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906135db565b610b50565b6040516103ec9190613c18565b60405180910390f35b34801561040157600080fd5b5061041c6004803603810190610417919061368f565b610b7f565b6040516104299190613c33565b60405180910390f35b34801561043e57600080fd5b50610447610b9f565b6040516104549190613fd0565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613576565b610ba8565b005b34801561049257600080fd5b506104ad60048036038101906104a89190613576565b610c17565b005b3480156104bb57600080fd5b506104d660048036038101906104d191906136b8565b610cd8565b005b3480156104e457600080fd5b506104ff60048036038101906104fa919061362a565b610d5b565b60405161050c9190613c18565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613576565b610d92565b005b34801561054a57600080fd5b50610553610e9c565b6040516105609190613bfd565b60405180910390f35b34801561057557600080fd5b5061057e610ec2565b60405161058b9190613f2b565b60405180910390f35b3480156105a057600080fd5b506105a9610ec8565b6040516105b69190613c33565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613576565b610eec565b6040516105f39190613f2b565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613666565b610f34565b005b34801561063157600080fd5b5061063a610f86565b005b34801561064857600080fd5b50610663600480360381019061065e9190613576565b6110bc565b6040516106709190613c18565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b91906136b8565b6110dc565b6040516106ad9190613c18565b60405180910390f35b3480156106c257600080fd5b506106cb611147565b6040516106d89190613c69565b60405180910390f35b3480156106ed57600080fd5b506106f66111d9565b6040516107039190613c33565b60405180910390f35b34801561071857600080fd5b506107216111fd565b60405161072e9190613c33565b60405180910390f35b34801561074357600080fd5b5061074c611221565b6040516107599190613c33565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061362a565b611228565b6040516107969190613c18565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c1919061362a565b61129f565b6040516107d39190613c18565b60405180910390f35b3480156107e857600080fd5b506107f16112c2565b6040516107fe9190613bfd565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613576565b6112e8565b005b34801561083c57600080fd5b506108456113a9565b6040516108529190613f2b565b60405180910390f35b34801561086757600080fd5b506108706113af565b005b34801561087e57600080fd5b5061089960048036038101906108949190613576565b611400565b005b3480156108a757600080fd5b506108c260048036038101906108bd919061359f565b6114c2565b6040516108cf9190613f2b565b60405180910390f35b3480156108e457600080fd5b506108ed611549565b6040516108fa9190613f2b565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613576565b61154f565b005b34801561093857600080fd5b506109416116f3565b60405161094e9190613f2b565b60405180910390f35b60007f830d5e49000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ca57506109c9826116f9565b5b9050919050565b6060600380546109e09061427e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c9061427e565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b600080610a6e611763565b9050610a7b81858561176b565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610ae081611936565b600115158215151415610afa576000600a81905550610b04565b6101f4600a819055505b5050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610b3281611936565b81600c819055505050565b600d60009054906101000a900460ff1681565b600080610b5b611763565b9050610b6885828561194a565b610b738585856119d6565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b60006012905090565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610bd281611936565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610c4181611936565b610c6b7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d836110dc565b610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613ecb565b60405180910390fd5b610cd47fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d83612575565b5050565b610ce0611763565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613f0b565b60405180910390fd5b610d578282612575565b5050565b600080610d66611763565b9050610d87818585610d7885896114c2565b610d82919061404b565b61176b565b600191505092915050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610dbc81611936565b610dc582612657565b610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90613ceb565b60405180910390fd5b610e2e7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d836110dc565b15610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613e0b565b60405180910390fd5b610e987fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d8361267a565b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610f5e81611936565b600115158215151415610f78576000600981905550610f82565b6101f46009819055505b5050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610fb081611936565b610fdb7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a360006110dc565b1561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613e4b565b60405180910390fd5b61104c7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3611047611763565b612575565b6110777f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3600061267a565b6000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900460ff1681565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546111569061427e565b80601f01602080910402602001604051908101604052809291908181526020018280546111829061427e565b80156111cf5780601f106111a4576101008083540402835291602001916111cf565b820191906000526020600020905b8154815290600101906020018083116111b257829003601f168201915b5050505050905090565b7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e81565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a381565b6000801b81565b600080611233611763565b9050600061124182866114c2565b905083811015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90613eeb565b60405180910390fd5b611293828686840361176b565b60019250505092915050565b6000806112aa611763565b90506112b78185856119d6565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361131281611936565b61133c7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e836110dc565b61137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613dab565b60405180910390fd5b6113a57f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e83612575565b5050565b600b5481565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a36113d981611936565b60006113e430610eec565b9050600081116113f357600080fd5b6113fc81612688565b5050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361142a81611936565b6114547f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e836110dc565b15611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613deb565b60405180910390fd5b6114be7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e8361267a565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361157981611936565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090613d8b565b60405180910390fd5b6116137f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3836110dc565b15611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613e4b565b60405180910390fd5b6116847f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361167f611763565b612575565b6116ae7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a38361267a565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d290613eab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290613d0b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119299190613f2b565b60405180910390a3505050565b61194781611942611763565b612952565b50565b600061195684846114c2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119d057818110156119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613d6b565b60405180910390fd5b6119cf848484840361176b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90613cab565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b6757611b2281611b1484610eec565b6129ef90919063ffffffff16565b600c541015611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613d2b565b60405180910390fd5b5b611b72838383612a4d565b611b7a6134c9565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600060038110611bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525050611c046134eb565b611c2e7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3866110dc565b158015611c625750611c607f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3856110dc565b155b8015611c9c5750611c9a7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3611c95611763565b6110dc565b155b81600060028110611cd6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019015159081151581525050611d0f7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e866110dc565b80611d405750611d3f7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e856110dc565b5b81600160028110611d7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020190151590811515815250508282600060038110611dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511015611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0190613dcb565b60405180910390fd5b611e347fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d856110dc565b8015611e4d5750600d60009054906101000a900460ff16155b15611f20576000611e5d30610eec565b90506000811115611f1e57611eb96064611eab6002611e9d600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610eec565b612a5290919063ffffffff16565b612acd90919063ffffffff16565b811115611f1457611f116064611f036002611ef5600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610eec565b612a5290919063ffffffff16565b612acd90919063ffffffff16565b90505b611f1d81612688565b5b505b80600060028110611f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518015611fa7575080600160028110611fa0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151155b8015611fc05750600d60009054906101000a900460ff16155b156121b6576000839050611ff47fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d866110dc565b1561204e5761200284612b17565b8460016003811061203c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525081955050506120d6565b61207f7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d61207a611763565b6110dc565b156120d55761208d84612b66565b846001600381106120c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525081955050505b5b6120df81612bb5565b83600260038110612119577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815250508260026003811061215c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184106121b457826002600381106121a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151846121b1919061412c565b93505b505b82826000600381106121f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151036000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612287919061404b565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516122eb9190613f2b565b60405180910390a360008260016003811061232f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111801561237c575080600060028110612376577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201515b80156123c45750806001600281106123bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151155b80156123dd5750600d60009054906101000a900460ff16155b1561242b5761242a8583600160038110612420577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151612bd9565b5b600082600260038110612467577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511180156124b45750806000600281106124ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201515b80156124fc5750806001600281106124f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151155b80156125155750600d60009054906101000a900460ff16155b15612563576125628583600260038110612558577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151612bf2565b5b61256e858585612e05565b5050505050565b61257f82826110dc565b156126535760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125f8611763565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6126848282612e0a565b5050565b6001600d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156126e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127145781602001602082028036833780820191505090505b5090503081600081518110612752577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48816001815181106127db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061284230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461176b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016128c8959493929190613f76565b600060405180830381600087803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161292b929190613f46565b60405180910390a1506000600d60006101000a81548160ff02191690831515021790555050565b61295c82826110dc565b6129eb576129818173ffffffffffffffffffffffffffffffffffffffff166014612eeb565b61298f8360001c6020612eeb565b6040516020016129a0929190613bc3565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e29190613c69565b60405180910390fd5b5050565b60008082846129fe919061404b565b905083811015612a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3a90613d4b565b60405180910390fd5b8091505092915050565b505050565b600080831415612a655760009050612ac7565b60008284612a7391906140d2565b9050828482612a8291906140a1565b14612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990613e2b565b60405180910390fd5b809150505b92915050565b6000612b0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e5565b905092915050565b600080612710600954612710612b2d919061412c565b84612b3891906140d2565b612b4291906140a1565b915061271060095484612b5591906140d2565b612b5f91906140a1565b9050915091565b600080612710600a54612710612b7c919061412c565b84612b8791906140d2565b612b9191906140a1565b9150612710600a5484612ba491906140d2565b612bae91906140a1565b9050915091565b6000612710600b5483612bc891906140d2565b612bd291906140a1565b9050919050565b6000811115612bee57612bed823083613248565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990613e6b565b60405180910390fd5b612c6e82600083612a4d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90613ccb565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d87919061404b565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dec9190613f2b565b60405180910390a3612e0083600084612e05565b505050565b505050565b612e1482826110dc565b612ee75760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e8c611763565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b606060006002836002612efe91906140d2565b612f08919061404b565b67ffffffffffffffff811115612f47577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612f795781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612fd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613061577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026130a191906140d2565b6130ab919061404b565b90505b6001811115613197577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110613113577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110613150577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061319090614254565b90506130ae565b50600084146131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290613c8b565b60405180910390fd5b8091505092915050565b6000808311829061322c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132239190613c69565b60405180910390fd5b506000838561323b91906140a1565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af90613e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331f90613cab565b60405180910390fd5b613333838383612a4d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090613dcb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461344c919061404b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134b09190613f2b565b60405180910390a36134c3848484612e05565b50505050565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b60008135905061351c81614983565b92915050565b6000813590506135318161499a565b92915050565b600081359050613546816149b1565b92915050565b60008135905061355b816149c8565b92915050565b600081359050613570816149df565b92915050565b60006020828403121561358857600080fd5b60006135968482850161350d565b91505092915050565b600080604083850312156135b257600080fd5b60006135c08582860161350d565b92505060206135d18582860161350d565b9150509250929050565b6000806000606084860312156135f057600080fd5b60006135fe8682870161350d565b935050602061360f8682870161350d565b925050604061362086828701613561565b9150509250925092565b6000806040838503121561363d57600080fd5b600061364b8582860161350d565b925050602061365c85828601613561565b9150509250929050565b60006020828403121561367857600080fd5b600061368684828501613522565b91505092915050565b6000602082840312156136a157600080fd5b60006136af84828501613537565b91505092915050565b600080604083850312156136cb57600080fd5b60006136d985828601613537565b92505060206136ea8582860161350d565b9150509250929050565b60006020828403121561370657600080fd5b60006137148482850161354c565b91505092915050565b60006020828403121561372f57600080fd5b600061373d84828501613561565b91505092915050565b6000613752838361375e565b60208301905092915050565b61376781614160565b82525050565b61377681614160565b82525050565b600061378782613ffb565b613791818561401e565b935061379c83613feb565b8060005b838110156137cd5781516137b48882613746565b97506137bf83614011565b9250506001810190506137a0565b5085935050505092915050565b6137e381614172565b82525050565b6137f28161417e565b82525050565b613801816141eb565b82525050565b6138108161420f565b82525050565b600061382182614006565b61382b818561402f565b935061383b818560208601614221565b6138448161433d565b840191505092915050565b600061385a82614006565b6138648185614040565b9350613874818560208601614221565b80840191505092915050565b600061388d60208361402f565b91506138988261434e565b602082019050919050565b60006138b060238361402f565b91506138bb82614377565b604082019050919050565b60006138d360228361402f565b91506138de826143c6565b604082019050919050565b60006138f660398361402f565b915061390182614415565b604082019050919050565b600061391960228361402f565b915061392482614464565b604082019050919050565b600061393c601a8361402f565b9150613947826144b3565b602082019050919050565b600061395f601b8361402f565b915061396a826144dc565b602082019050919050565b6000613982601d8361402f565b915061398d82614505565b602082019050919050565b60006139a560338361402f565b91506139b08261452e565b604082019050919050565b60006139c860258361402f565b91506139d38261457d565b604082019050919050565b60006139eb60268361402f565b91506139f6826145cc565b604082019050919050565b6000613a0e602c8361402f565b9150613a198261461b565b604082019050919050565b6000613a3160308361402f565b9150613a3c8261466a565b604082019050919050565b6000613a5460218361402f565b9150613a5f826146b9565b604082019050919050565b6000613a7760348361402f565b9150613a8282614708565b604082019050919050565b6000613a9a60218361402f565b9150613aa582614757565b604082019050919050565b6000613abd60258361402f565b9150613ac8826147a6565b604082019050919050565b6000613ae060248361402f565b9150613aeb826147f5565b604082019050919050565b6000613b03601783614040565b9150613b0e82614844565b601782019050919050565b6000613b26602a8361402f565b9150613b318261486d565b604082019050919050565b6000613b4960258361402f565b9150613b54826148bc565b604082019050919050565b6000613b6c601183614040565b9150613b778261490b565b601182019050919050565b6000613b8f602f8361402f565b9150613b9a82614934565b604082019050919050565b613bae816141d4565b82525050565b613bbd816141de565b82525050565b6000613bce82613af6565b9150613bda828561384f565b9150613be582613b5f565b9150613bf1828461384f565b91508190509392505050565b6000602082019050613c12600083018461376d565b92915050565b6000602082019050613c2d60008301846137da565b92915050565b6000602082019050613c4860008301846137e9565b92915050565b6000602082019050613c6360008301846137f8565b92915050565b60006020820190508181036000830152613c838184613816565b905092915050565b60006020820190508181036000830152613ca481613880565b9050919050565b60006020820190508181036000830152613cc4816138a3565b9050919050565b60006020820190508181036000830152613ce4816138c6565b9050919050565b60006020820190508181036000830152613d04816138e9565b9050919050565b60006020820190508181036000830152613d248161390c565b9050919050565b60006020820190508181036000830152613d448161392f565b9050919050565b60006020820190508181036000830152613d6481613952565b9050919050565b60006020820190508181036000830152613d8481613975565b9050919050565b60006020820190508181036000830152613da481613998565b9050919050565b60006020820190508181036000830152613dc4816139bb565b9050919050565b60006020820190508181036000830152613de4816139de565b9050919050565b60006020820190508181036000830152613e0481613a01565b9050919050565b60006020820190508181036000830152613e2481613a24565b9050919050565b60006020820190508181036000830152613e4481613a47565b9050919050565b60006020820190508181036000830152613e6481613a6a565b9050919050565b60006020820190508181036000830152613e8481613a8d565b9050919050565b60006020820190508181036000830152613ea481613ab0565b9050919050565b60006020820190508181036000830152613ec481613ad3565b9050919050565b60006020820190508181036000830152613ee481613b19565b9050919050565b60006020820190508181036000830152613f0481613b3c565b9050919050565b60006020820190508181036000830152613f2481613b82565b9050919050565b6000602082019050613f406000830184613ba5565b92915050565b6000604082019050613f5b6000830185613ba5565b8181036020830152613f6d818461377c565b90509392505050565b600060a082019050613f8b6000830188613ba5565b613f986020830187613807565b8181036040830152613faa818661377c565b9050613fb9606083018561376d565b613fc66080830184613ba5565b9695505050505050565b6000602082019050613fe56000830184613bb4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614056826141d4565b9150614061836141d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614096576140956142b0565b5b828201905092915050565b60006140ac826141d4565b91506140b7836141d4565b9250826140c7576140c66142df565b5b828204905092915050565b60006140dd826141d4565b91506140e8836141d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614121576141206142b0565b5b828202905092915050565b6000614137826141d4565b9150614142836141d4565b925082821015614155576141546142b0565b5b828203905092915050565b600061416b826141b4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006141f6826141fd565b9050919050565b6000614208826141b4565b9050919050565b600061421a826141d4565b9050919050565b60005b8381101561423f578082015181840152602081019050614224565b8381111561424e576000848401525b50505050565b600061425f826141d4565b91506000821415614273576142726142b0565b5b600182039050919050565b6000600282049050600182168061429657607f821691505b602082108114156142aa576142a961430e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230203a3a206772616e74526f6c65546f50616972203a20706169722060008201527f6973206e6f74206120636f6e7472616374206164647265737300000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d617857616c6c6574203e3d20616d6f756e74000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f4552433230203a3a207472616e736665724f776e657273686970203a206e657760008201527f4f776e657220213d206164647265737328302900000000000000000000000000602082015250565b7f4552433230203a3a20696e636c756465546f203a20686173206e6f207061697260008201527f20726f6c65000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4552433230203a3a206578636c75646546726f6d203a20616c7265616479206860008201527f6173207061697220726f6c650000000000000000000000000000000000000000602082015250565b7f4552433230203a3a206772616e74526f6c65546f50616972203a20616c72656160008201527f647920686173207061697220726f6c6500000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230203a3a207472616e736665724f776e657273686970203a206e657760008201527f4f776e657220686173206f776e657220726f6c65000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433230203a3a207265766f6b6550616972526f6c65203a20686173206e6f60008201527f207061697220726f6c6500000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61498c81614160565b811461499757600080fd5b50565b6149a381614172565b81146149ae57600080fd5b50565b6149ba8161417e565b81146149c557600080fd5b50565b6149d181614188565b81146149dc57600080fd5b50565b6149e8816141d4565b81146149f357600080fd5b5056fea26469706673582212208fc32b2c3219ca4056e7aa588d4b00720ec325fc9db615031ae7d18a1a36c01664736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370a082311161012e578063a9059cbb116100ab578063d096cd081161006f578063d096cd0814610872578063dd62ed3e1461089b578063e1f3d55a146108d8578063f2fde38b14610903578063f8b45b051461092c5761023b565b8063a9059cbb1461079f578063addcf55f146107dc578063b6dd049214610807578063cf82046114610830578063cfc1e5701461085b5761023b565b806395d89b41116100f257806395d89b41146106b6578063961610d9146106e15780639a13dc8c1461070c578063a217fddf14610737578063a457c2d7146107625761023b565b806370a08231146105bf578063710e2bf9146105fc578063715018a61461062557806372b7685d1461063c57806391d14854146106795761023b565b8063248a9ca3116101bc578063395093511161018057806339509351146104d857806347061add1461051557806349bd5a5e1461053e5780635de6c42f1461056957806364f91c72146105945761023b565b8063248a9ca3146103f5578063313ce56714610432578063340ac20f1461045d5780633515b1af1461048657806336568abe146104af5761023b565b806318160ddd1161020357806318160ddd146103105780631b7460981461033b5780631c499ab014610364578063220f66961461038d57806323b872dd146103b85761023b565b806301ffc9a71461024057806306fdde031461027d578063095ea7b3146102a85780631694505e146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610267600480360381019061026291906136f4565b610957565b6040516102749190613c18565b60405180910390f35b34801561028957600080fd5b506102926109d1565b60405161029f9190613c69565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca919061362a565b610a63565b6040516102dc9190613c18565b60405180910390f35b3480156102f157600080fd5b506102fa610a86565b6040516103079190613c4e565b60405180910390f35b34801561031c57600080fd5b50610325610aac565b6040516103329190613f2b565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613666565b610ab6565b005b34801561037057600080fd5b5061038b6004803603810190610386919061371d565b610b08565b005b34801561039957600080fd5b506103a2610b3d565b6040516103af9190613c18565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906135db565b610b50565b6040516103ec9190613c18565b60405180910390f35b34801561040157600080fd5b5061041c6004803603810190610417919061368f565b610b7f565b6040516104299190613c33565b60405180910390f35b34801561043e57600080fd5b50610447610b9f565b6040516104549190613fd0565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613576565b610ba8565b005b34801561049257600080fd5b506104ad60048036038101906104a89190613576565b610c17565b005b3480156104bb57600080fd5b506104d660048036038101906104d191906136b8565b610cd8565b005b3480156104e457600080fd5b506104ff60048036038101906104fa919061362a565b610d5b565b60405161050c9190613c18565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613576565b610d92565b005b34801561054a57600080fd5b50610553610e9c565b6040516105609190613bfd565b60405180910390f35b34801561057557600080fd5b5061057e610ec2565b60405161058b9190613f2b565b60405180910390f35b3480156105a057600080fd5b506105a9610ec8565b6040516105b69190613c33565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613576565b610eec565b6040516105f39190613f2b565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613666565b610f34565b005b34801561063157600080fd5b5061063a610f86565b005b34801561064857600080fd5b50610663600480360381019061065e9190613576565b6110bc565b6040516106709190613c18565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b91906136b8565b6110dc565b6040516106ad9190613c18565b60405180910390f35b3480156106c257600080fd5b506106cb611147565b6040516106d89190613c69565b60405180910390f35b3480156106ed57600080fd5b506106f66111d9565b6040516107039190613c33565b60405180910390f35b34801561071857600080fd5b506107216111fd565b60405161072e9190613c33565b60405180910390f35b34801561074357600080fd5b5061074c611221565b6040516107599190613c33565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061362a565b611228565b6040516107969190613c18565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c1919061362a565b61129f565b6040516107d39190613c18565b60405180910390f35b3480156107e857600080fd5b506107f16112c2565b6040516107fe9190613bfd565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613576565b6112e8565b005b34801561083c57600080fd5b506108456113a9565b6040516108529190613f2b565b60405180910390f35b34801561086757600080fd5b506108706113af565b005b34801561087e57600080fd5b5061089960048036038101906108949190613576565b611400565b005b3480156108a757600080fd5b506108c260048036038101906108bd919061359f565b6114c2565b6040516108cf9190613f2b565b60405180910390f35b3480156108e457600080fd5b506108ed611549565b6040516108fa9190613f2b565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190613576565b61154f565b005b34801561093857600080fd5b506109416116f3565b60405161094e9190613f2b565b60405180910390f35b60007f830d5e49000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ca57506109c9826116f9565b5b9050919050565b6060600380546109e09061427e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c9061427e565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b600080610a6e611763565b9050610a7b81858561176b565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610ae081611936565b600115158215151415610afa576000600a81905550610b04565b6101f4600a819055505b5050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610b3281611936565b81600c819055505050565b600d60009054906101000a900460ff1681565b600080610b5b611763565b9050610b6885828561194a565b610b738585856119d6565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b60006012905090565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610bd281611936565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610c4181611936565b610c6b7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d836110dc565b610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613ecb565b60405180910390fd5b610cd47fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d83612575565b5050565b610ce0611763565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613f0b565b60405180910390fd5b610d578282612575565b5050565b600080610d66611763565b9050610d87818585610d7885896114c2565b610d82919061404b565b61176b565b600191505092915050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610dbc81611936565b610dc582612657565b610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90613ceb565b60405180910390fd5b610e2e7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d836110dc565b15610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613e0b565b60405180910390fd5b610e987fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d8361267a565b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610f5e81611936565b600115158215151415610f78576000600981905550610f82565b6101f46009819055505b5050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3610fb081611936565b610fdb7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a360006110dc565b1561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613e4b565b60405180910390fd5b61104c7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3611047611763565b612575565b6110777f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3600061267a565b6000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900460ff1681565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546111569061427e565b80601f01602080910402602001604051908101604052809291908181526020018280546111829061427e565b80156111cf5780601f106111a4576101008083540402835291602001916111cf565b820191906000526020600020905b8154815290600101906020018083116111b257829003601f168201915b5050505050905090565b7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e81565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a381565b6000801b81565b600080611233611763565b9050600061124182866114c2565b905083811015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90613eeb565b60405180910390fd5b611293828686840361176b565b60019250505092915050565b6000806112aa611763565b90506112b78185856119d6565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361131281611936565b61133c7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e836110dc565b61137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613dab565b60405180910390fd5b6113a57f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e83612575565b5050565b600b5481565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a36113d981611936565b60006113e430610eec565b9050600081116113f357600080fd5b6113fc81612688565b5050565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361142a81611936565b6114547f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e836110dc565b15611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613deb565b60405180910390fd5b6114be7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e8361267a565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361157981611936565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090613d8b565b60405180910390fd5b6116137f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3836110dc565b15611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613e4b565b60405180910390fd5b6116847f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a361167f611763565b612575565b6116ae7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a38361267a565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d290613eab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290613d0b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119299190613f2b565b60405180910390a3505050565b61194781611942611763565b612952565b50565b600061195684846114c2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119d057818110156119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613d6b565b60405180910390fd5b6119cf848484840361176b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90613cab565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b6757611b2281611b1484610eec565b6129ef90919063ffffffff16565b600c541015611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613d2b565b60405180910390fd5b5b611b72838383612a4d565b611b7a6134c9565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600060038110611bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525050611c046134eb565b611c2e7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3866110dc565b158015611c625750611c607f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3856110dc565b155b8015611c9c5750611c9a7f878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3611c95611763565b6110dc565b155b81600060028110611cd6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019015159081151581525050611d0f7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e866110dc565b80611d405750611d3f7f270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e856110dc565b5b81600160028110611d7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020190151590811515815250508282600060038110611dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511015611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0190613dcb565b60405180910390fd5b611e347fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d856110dc565b8015611e4d5750600d60009054906101000a900460ff16155b15611f20576000611e5d30610eec565b90506000811115611f1e57611eb96064611eab6002611e9d600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610eec565b612a5290919063ffffffff16565b612acd90919063ffffffff16565b811115611f1457611f116064611f036002611ef5600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610eec565b612a5290919063ffffffff16565b612acd90919063ffffffff16565b90505b611f1d81612688565b5b505b80600060028110611f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201518015611fa7575080600160028110611fa0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151155b8015611fc05750600d60009054906101000a900460ff16155b156121b6576000839050611ff47fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d866110dc565b1561204e5761200284612b17565b8460016003811061203c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525081955050506120d6565b61207f7fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d61207a611763565b6110dc565b156120d55761208d84612b66565b846001600381106120c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002018181525081955050505b5b6120df81612bb5565b83600260038110612119577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020181815250508260026003811061215c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015184106121b457826002600381106121a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151846121b1919061412c565b93505b505b82826000600381106121f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151036000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612287919061404b565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516122eb9190613f2b565b60405180910390a360008260016003811061232f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015111801561237c575080600060028110612376577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201515b80156123c45750806001600281106123bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151155b80156123dd5750600d60009054906101000a900460ff16155b1561242b5761242a8583600160038110612420577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151612bd9565b5b600082600260038110612467577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511180156124b45750806000600281106124ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201515b80156124fc5750806001600281106124f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151155b80156125155750600d60009054906101000a900460ff16155b15612563576125628583600260038110612558577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151612bf2565b5b61256e858585612e05565b5050505050565b61257f82826110dc565b156126535760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125f8611763565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6126848282612e0a565b5050565b6001600d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156126e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127145781602001602082028036833780820191505090505b5090503081600081518110612752577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48816001815181106127db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061284230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461176b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016128c8959493929190613f76565b600060405180830381600087803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161292b929190613f46565b60405180910390a1506000600d60006101000a81548160ff02191690831515021790555050565b61295c82826110dc565b6129eb576129818173ffffffffffffffffffffffffffffffffffffffff166014612eeb565b61298f8360001c6020612eeb565b6040516020016129a0929190613bc3565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e29190613c69565b60405180910390fd5b5050565b60008082846129fe919061404b565b905083811015612a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3a90613d4b565b60405180910390fd5b8091505092915050565b505050565b600080831415612a655760009050612ac7565b60008284612a7391906140d2565b9050828482612a8291906140a1565b14612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990613e2b565b60405180910390fd5b809150505b92915050565b6000612b0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e5565b905092915050565b600080612710600954612710612b2d919061412c565b84612b3891906140d2565b612b4291906140a1565b915061271060095484612b5591906140d2565b612b5f91906140a1565b9050915091565b600080612710600a54612710612b7c919061412c565b84612b8791906140d2565b612b9191906140a1565b9150612710600a5484612ba491906140d2565b612bae91906140a1565b9050915091565b6000612710600b5483612bc891906140d2565b612bd291906140a1565b9050919050565b6000811115612bee57612bed823083613248565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990613e6b565b60405180910390fd5b612c6e82600083612a4d565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90613ccb565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d87919061404b565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dec9190613f2b565b60405180910390a3612e0083600084612e05565b505050565b505050565b612e1482826110dc565b612ee75760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e8c611763565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b606060006002836002612efe91906140d2565b612f08919061404b565b67ffffffffffffffff811115612f47577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612f795781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612fd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613061577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026130a191906140d2565b6130ab919061404b565b90505b6001811115613197577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110613113577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110613150577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061319090614254565b90506130ae565b50600084146131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290613c8b565b60405180910390fd5b8091505092915050565b6000808311829061322c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132239190613c69565b60405180910390fd5b506000838561323b91906140a1565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af90613e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331f90613cab565b60405180910390fd5b613333838383612a4d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090613dcb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461344c919061404b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134b09190613f2b565b60405180910390a36134c3848484612e05565b50505050565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b60008135905061351c81614983565b92915050565b6000813590506135318161499a565b92915050565b600081359050613546816149b1565b92915050565b60008135905061355b816149c8565b92915050565b600081359050613570816149df565b92915050565b60006020828403121561358857600080fd5b60006135968482850161350d565b91505092915050565b600080604083850312156135b257600080fd5b60006135c08582860161350d565b92505060206135d18582860161350d565b9150509250929050565b6000806000606084860312156135f057600080fd5b60006135fe8682870161350d565b935050602061360f8682870161350d565b925050604061362086828701613561565b9150509250925092565b6000806040838503121561363d57600080fd5b600061364b8582860161350d565b925050602061365c85828601613561565b9150509250929050565b60006020828403121561367857600080fd5b600061368684828501613522565b91505092915050565b6000602082840312156136a157600080fd5b60006136af84828501613537565b91505092915050565b600080604083850312156136cb57600080fd5b60006136d985828601613537565b92505060206136ea8582860161350d565b9150509250929050565b60006020828403121561370657600080fd5b60006137148482850161354c565b91505092915050565b60006020828403121561372f57600080fd5b600061373d84828501613561565b91505092915050565b6000613752838361375e565b60208301905092915050565b61376781614160565b82525050565b61377681614160565b82525050565b600061378782613ffb565b613791818561401e565b935061379c83613feb565b8060005b838110156137cd5781516137b48882613746565b97506137bf83614011565b9250506001810190506137a0565b5085935050505092915050565b6137e381614172565b82525050565b6137f28161417e565b82525050565b613801816141eb565b82525050565b6138108161420f565b82525050565b600061382182614006565b61382b818561402f565b935061383b818560208601614221565b6138448161433d565b840191505092915050565b600061385a82614006565b6138648185614040565b9350613874818560208601614221565b80840191505092915050565b600061388d60208361402f565b91506138988261434e565b602082019050919050565b60006138b060238361402f565b91506138bb82614377565b604082019050919050565b60006138d360228361402f565b91506138de826143c6565b604082019050919050565b60006138f660398361402f565b915061390182614415565b604082019050919050565b600061391960228361402f565b915061392482614464565b604082019050919050565b600061393c601a8361402f565b9150613947826144b3565b602082019050919050565b600061395f601b8361402f565b915061396a826144dc565b602082019050919050565b6000613982601d8361402f565b915061398d82614505565b602082019050919050565b60006139a560338361402f565b91506139b08261452e565b604082019050919050565b60006139c860258361402f565b91506139d38261457d565b604082019050919050565b60006139eb60268361402f565b91506139f6826145cc565b604082019050919050565b6000613a0e602c8361402f565b9150613a198261461b565b604082019050919050565b6000613a3160308361402f565b9150613a3c8261466a565b604082019050919050565b6000613a5460218361402f565b9150613a5f826146b9565b604082019050919050565b6000613a7760348361402f565b9150613a8282614708565b604082019050919050565b6000613a9a60218361402f565b9150613aa582614757565b604082019050919050565b6000613abd60258361402f565b9150613ac8826147a6565b604082019050919050565b6000613ae060248361402f565b9150613aeb826147f5565b604082019050919050565b6000613b03601783614040565b9150613b0e82614844565b601782019050919050565b6000613b26602a8361402f565b9150613b318261486d565b604082019050919050565b6000613b4960258361402f565b9150613b54826148bc565b604082019050919050565b6000613b6c601183614040565b9150613b778261490b565b601182019050919050565b6000613b8f602f8361402f565b9150613b9a82614934565b604082019050919050565b613bae816141d4565b82525050565b613bbd816141de565b82525050565b6000613bce82613af6565b9150613bda828561384f565b9150613be582613b5f565b9150613bf1828461384f565b91508190509392505050565b6000602082019050613c12600083018461376d565b92915050565b6000602082019050613c2d60008301846137da565b92915050565b6000602082019050613c4860008301846137e9565b92915050565b6000602082019050613c6360008301846137f8565b92915050565b60006020820190508181036000830152613c838184613816565b905092915050565b60006020820190508181036000830152613ca481613880565b9050919050565b60006020820190508181036000830152613cc4816138a3565b9050919050565b60006020820190508181036000830152613ce4816138c6565b9050919050565b60006020820190508181036000830152613d04816138e9565b9050919050565b60006020820190508181036000830152613d248161390c565b9050919050565b60006020820190508181036000830152613d448161392f565b9050919050565b60006020820190508181036000830152613d6481613952565b9050919050565b60006020820190508181036000830152613d8481613975565b9050919050565b60006020820190508181036000830152613da481613998565b9050919050565b60006020820190508181036000830152613dc4816139bb565b9050919050565b60006020820190508181036000830152613de4816139de565b9050919050565b60006020820190508181036000830152613e0481613a01565b9050919050565b60006020820190508181036000830152613e2481613a24565b9050919050565b60006020820190508181036000830152613e4481613a47565b9050919050565b60006020820190508181036000830152613e6481613a6a565b9050919050565b60006020820190508181036000830152613e8481613a8d565b9050919050565b60006020820190508181036000830152613ea481613ab0565b9050919050565b60006020820190508181036000830152613ec481613ad3565b9050919050565b60006020820190508181036000830152613ee481613b19565b9050919050565b60006020820190508181036000830152613f0481613b3c565b9050919050565b60006020820190508181036000830152613f2481613b82565b9050919050565b6000602082019050613f406000830184613ba5565b92915050565b6000604082019050613f5b6000830185613ba5565b8181036020830152613f6d818461377c565b90509392505050565b600060a082019050613f8b6000830188613ba5565b613f986020830187613807565b8181036040830152613faa818661377c565b9050613fb9606083018561376d565b613fc66080830184613ba5565b9695505050505050565b6000602082019050613fe56000830184613bb4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614056826141d4565b9150614061836141d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614096576140956142b0565b5b828201905092915050565b60006140ac826141d4565b91506140b7836141d4565b9250826140c7576140c66142df565b5b828204905092915050565b60006140dd826141d4565b91506140e8836141d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614121576141206142b0565b5b828202905092915050565b6000614137826141d4565b9150614142836141d4565b925082821015614155576141546142b0565b5b828203905092915050565b600061416b826141b4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006141f6826141fd565b9050919050565b6000614208826141b4565b9050919050565b600061421a826141d4565b9050919050565b60005b8381101561423f578082015181840152602081019050614224565b8381111561424e576000848401525b50505050565b600061425f826141d4565b91506000821415614273576142726142b0565b5b600182039050919050565b6000600282049050600182168061429657607f821691505b602082108114156142aa576142a961430e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230203a3a206772616e74526f6c65546f50616972203a20706169722060008201527f6973206e6f74206120636f6e7472616374206164647265737300000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d617857616c6c6574203e3d20616d6f756e74000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f4552433230203a3a207472616e736665724f776e657273686970203a206e657760008201527f4f776e657220213d206164647265737328302900000000000000000000000000602082015250565b7f4552433230203a3a20696e636c756465546f203a20686173206e6f207061697260008201527f20726f6c65000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4552433230203a3a206578636c75646546726f6d203a20616c7265616479206860008201527f6173207061697220726f6c650000000000000000000000000000000000000000602082015250565b7f4552433230203a3a206772616e74526f6c65546f50616972203a20616c72656160008201527f647920686173207061697220726f6c6500000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230203a3a207472616e736665724f776e657273686970203a206e657760008201527f4f776e657220686173206f776e657220726f6c65000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433230203a3a207265766f6b6550616972526f6c65203a20686173206e6f60008201527f207061697220726f6c6500000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61498c81614160565b811461499757600080fd5b50565b6149a381614172565b81146149ae57600080fd5b50565b6149ba8161417e565b81146149c557600080fd5b50565b6149d181614188565b81146149dc57600080fd5b50565b6149e8816141d4565b81146149f357600080fd5b5056fea26469706673582212208fc32b2c3219ca4056e7aa588d4b00720ec325fc9db615031ae7d18a1a36c01664736f6c63430008040033

Deployed Bytecode Sourcemap

32633:9516:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11076:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20256:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22607:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32769:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21376:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36342:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36965:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33252:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23388:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12912:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21218:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36555:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34824:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13550:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24092:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34266:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33297:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33163:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32819:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21547:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36187:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35823:309;;;;;;;;;;;;;:::i;:::-;;32719:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11372:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20475:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32975:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32898:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10477:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24833:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21880:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33059:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35095:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33196:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36770:186;;;;;;;;;;;;;:::i;:::-;;34588:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22136:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33128:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35398:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33224:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11076:204;11161:4;11200:32;11185:47;;;:11;:47;;;;:87;;;;11236:36;11260:11;11236:23;:36::i;:::-;11185:87;11178:94;;11076:204;;;:::o;20256:100::-;20310:13;20343:5;20336:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20256:100;:::o;22607:201::-;22690:4;22707:13;22723:12;:10;:12::i;:::-;22707:28;;22746:32;22755:5;22762:7;22771:6;22746:8;:32::i;:::-;22796:4;22789:11;;;22607:201;;;;:::o;32769:41::-;;;;;;;;;;;;;:::o;21376:108::-;21437:7;21464:12;;21457:19;;21376:108;:::o;36342:142::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;36435:4:::1;36426:13;;:7;:13;;;36423:54;;;36452:1;36441:8;:12;;;;36423:54;;;36472:3;36461:8;:14;;;;36423:54;36342:142:::0;;:::o;36965:112::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;37059:10:::1;37049:9;:20;;;;36965:112:::0;;:::o;33252:36::-;;;;;;;;;;;;;:::o;23388:295::-;23519:4;23536:15;23554:12;:10;:12::i;:::-;23536:30;;23577:38;23593:4;23599:7;23608:6;23577:15;:38::i;:::-;23626:27;23636:4;23642:2;23646:6;23626:9;:27::i;:::-;23671:4;23664:11;;;23388:295;;;;;:::o;12912:131::-;12986:7;13013:6;:12;13020:4;13013:12;;;;;;;;;;;:22;;;13006:29;;12912:131;;;:::o;21218:93::-;21276:5;21301:2;21294:9;;21218:93;:::o;36555:136::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;36675:7:::1;36638:15;;:45;;;;;;;;;;;;;;;;;;36555:136:::0;;:::o;34824:207::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;34914:24:::1;32855:36;34933:4;34914:7;:24::i;:::-;34906:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34996:27;32855:36;35018:4;34996:11;:27::i;:::-;34824:207:::0;;:::o;13550:218::-;13657:12;:10;:12::i;:::-;13646:23;;:7;:23;;;13638:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;13734:26;13746:4;13752:7;13734:11;:26::i;:::-;13550:218;;:::o;24092:238::-;24180:4;24197:13;24213:12;:10;:12::i;:::-;24197:28;;24236:64;24245:5;24252:7;24289:10;24261:25;24271:5;24278:7;24261:9;:25::i;:::-;:38;;;;:::i;:::-;24236:8;:64::i;:::-;24318:4;24311:11;;;24092:238;;;;:::o;34266:311::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;34357::::1;34368:4;34357:10;:16::i;:::-;34349:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34455:24;32855:36;34474:4;34455:7;:24::i;:::-;34454:25;34446:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34543:26;32855:36;34564:4;34543:10;:26::i;:::-;34266:311:::0;;:::o;33297:28::-;;;;;;;;;;;;;:::o;33163:26::-;;;;:::o;32819:72::-;32855:36;32819:72;:::o;21547:127::-;21621:7;21648:9;:18;21658:7;21648:18;;;;;;;;;;;;;;;;21641:25;;21547:127;;;:::o;36187:145::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;36281:4:::1;36272:13;;:7;:13;;;36269:56;;;36299:1;36287:9;:13;;;;36269:56;;;36320:3;36308:9;:15;;;;36269:56;36187:145:::0;;:::o;35823:309::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;35905:34:::1;32938:30;35936:1;35905:7;:34::i;:::-;35904:35;35896:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36007:39;32938:30;36033:12;:10;:12::i;:::-;36007:11;:39::i;:::-;36057:36;32938:30;36090:1;36057:10;:36::i;:::-;36122:1;36104:7;;:20;;;;;;;;;;;;;;;;;;35823:309:::0;:::o;32719:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;11372:147::-;11458:4;11482:6;:12;11489:4;11482:12;;;;;;;;;;;:20;;:29;11503:7;11482:29;;;;;;;;;;;;;;;;;;;;;;;;;11475:36;;11372:147;;;;:::o;20475:104::-;20531:13;20564:7;20557:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20475:104;:::o;32975:71::-;33015:31;32975:71;:::o;32898:70::-;32938:30;32898:70;:::o;10477:49::-;10522:4;10477:49;;;:::o;24833:436::-;24926:4;24943:13;24959:12;:10;:12::i;:::-;24943:28;;24982:24;25009:25;25019:5;25026:7;25009:9;:25::i;:::-;24982:52;;25073:15;25053:16;:35;;25045:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25166:60;25175:5;25182:7;25210:15;25191:16;:34;25166:8;:60::i;:::-;25257:4;25250:11;;;;24833:436;;;;:::o;21880:193::-;21959:4;21976:13;21992:12;:10;:12::i;:::-;21976:28;;22015;22025:5;22032:2;22036:6;22015:9;:28::i;:::-;22061:4;22054:11;;;21880:193;;;;:::o;33059:22::-;;;;;;;;;;;;;:::o;35095:212::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;35182:31:::1;33015;35205:7;35182;:31::i;:::-;35174:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35265:34;33015:31;35291:7;35265:11;:34::i;:::-;35095:212:::0;;:::o;33196:21::-;;;;:::o;36770:186::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;36836:11:::1;36850:24;36868:4;36850:9;:24::i;:::-;36836:38;;36902:1;36893:6;:10;36885:19;;;::::0;::::1;;36915:33;36941:6;36915:25;:33::i;:::-;10995:1;36770:186:::0;:::o;34588:223::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;34679:31:::1;33015;34702:7;34679;:31::i;:::-;34678:32;34670:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;34770:33;33015:31;34795:7;34770:10;:33::i;:::-;34588:223:::0;;:::o;22136:151::-;22225:7;22252:11;:18;22264:5;22252:18;;;;;;;;;;;;;;;:27;22271:7;22252:27;;;;;;;;;;;;;;;;22245:34;;22136:151;;;;:::o;33128:27::-;;;;:::o;35398:416::-;32938:30;10968:16;10979:4;10968:10;:16::i;:::-;35515:1:::1;35495:22;;:8;:22;;;;35487:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;35593:32;32938:30;35616:8;35593:7;:32::i;:::-;35592:33;35584:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35693:39;32938:30;35719:12;:10;:12::i;:::-;35693:11;:39::i;:::-;35743:34;32938:30;35768:8;35743:10;:34::i;:::-;35798:8;35788:7;;:18;;;;;;;;;;;;;;;;;;35398:416:::0;;:::o;33224:21::-;;;;:::o;8485:157::-;8570:4;8609:25;8594:40;;;:11;:40;;;;8587:47;;8485:157;;;:::o;7547:98::-;7600:7;7627:10;7620:17;;7547:98;:::o;28467:380::-;28620:1;28603:19;;:5;:19;;;;28595:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28701:1;28682:21;;:7;:21;;;;28674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28785:6;28755:11;:18;28767:5;28755:18;;;;;;;;;;;;;;;:27;28774:7;28755:27;;;;;;;;;;;;;;;:36;;;;28823:7;28807:32;;28816:5;28807:32;;;28832:6;28807:32;;;;;;:::i;:::-;;;;;;;;28467:380;;;:::o;11823:105::-;11890:30;11901:4;11907:12;:10;:12::i;:::-;11890:10;:30::i;:::-;11823:105;:::o;29138:453::-;29273:24;29300:25;29310:5;29317:7;29300:9;:25::i;:::-;29273:52;;29360:17;29340:16;:37;29336:248;;29422:6;29402:16;:26;;29394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29506:51;29515:5;29522:7;29550:6;29531:16;:25;29506:8;:51::i;:::-;29336:248;29138:453;;;;:::o;37144:2359::-;37292:1;37276:18;;:4;:18;;;;37268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37369:1;37355:16;;:2;:16;;;;37347:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37429:9;:13;37439:2;37429:13;;;;;;;;;;;;;;;;;;;;;;;;;37425:124;;37481:25;37499:6;37481:13;37491:2;37481:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;37467:9;;:39;;37459:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37425:124;37569:38;37590:4;37596:2;37600:6;37569:20;:38::i;:::-;37620:26;;:::i;:::-;37671:9;:15;37681:4;37671:15;;;;;;;;;;;;;;;;37657:8;37666:1;37657:11;;;;;;;;;;;;;;;;;;:29;;;;;37699:21;;:::i;:::-;37746:28;32938:30;37769:4;37746:7;:28::i;:::-;37745:29;37744:64;;;;;37781:26;32938:30;37804:2;37781:7;:26::i;:::-;37780:27;37744:64;:107;;;;;37814:36;32938:30;37837:12;:10;:12::i;:::-;37814:7;:36::i;:::-;37813:37;37744:107;37732:6;37739:1;37732:9;;;;;;;;;;;;;;;;;;:119;;;;;;;;;;;37875:28;33015:31;37898:4;37875:7;:28::i;:::-;37874:62;;;;37909:26;33015:31;37932:2;37909:7;:26::i;:::-;37874:62;37862:6;37869:1;37862:9;;;;;;;;;;;;;;;;;;:74;;;;;;;;;;;37980:6;37965:8;37974:1;37965:11;;;;;;;;;;;;;;;;;;;:21;;37957:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38053:22;32855:36;38072:2;38053:7;:22::i;:::-;:43;;;;;38080:16;;;;;;;;;;;38079:17;38053:43;38050:421;;;38113:20;38136:24;38154:4;38136:9;:24::i;:::-;38113:47;;38196:1;38178:15;:19;38175:285;;;38241:40;38277:3;38241:31;38270:1;38241:24;38251:13;;;;;;;;;;;38241:9;:24::i;:::-;:28;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;38223:15;:58;38220:164;;;38324:40;38360:3;38324:31;38353:1;38324:24;38334:13;;;;;;;;;;;38324:9;:24::i;:::-;:28;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;38306:58;;38220:164;38402:42;38428:15;38402:25;:42::i;:::-;38175:285;38050:421;;38486:6;38493:1;38486:9;;;;;;;;;;;;;;;;;;;:23;;;;;38500:6;38507:1;38500:9;;;;;;;;;;;;;;;;;;;38499:10;38486:23;:44;;;;;38514:16;;;;;;;;;;;38513:17;38486:44;38483:521;;;38547:15;38565:6;38547:24;;38591:22;32855:36;38610:2;38591:7;:22::i;:::-;38586:254;;;38672:26;38691:6;38672:18;:26::i;:::-;38657:8;38666:1;38657:11;;;;;;;;;;;;;;;;;;38648:50;;;;;;;;;38586:254;;;38722:32;32855:36;38741:12;:10;:12::i;:::-;38722:7;:32::i;:::-;38719:121;;;38799:25;38817:6;38799:17;:25::i;:::-;38784:8;38793:1;38784:11;;;;;;;;;;;;;;;;;;38775:49;;;;;;;;;38719:121;38586:254;38871:23;38886:7;38871:14;:23::i;:::-;38857:8;38866:1;38857:11;;;;;;;;;;;;;;;;;;:37;;;;;38924:8;38933:1;38924:11;;;;;;;;;;;;;;;;;;;38914:6;:21;38911:82;;38966:8;38975:1;38966:11;;;;;;;;;;;;;;;;;;;38956:21;;;;;:::i;:::-;;;38911:82;38483:521;;39073:6;39059:8;39068:1;39059:11;;;;;;;;;;;;;;;;;;;:20;39041:9;:15;39051:4;39041:15;;;;;;;;;;;;;;;:38;;;;39118:6;39101:9;:13;39111:2;39101:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;39157:2;39142:26;;39151:4;39142:26;;;39161:6;39142:26;;;;;;:::i;:::-;;;;;;;;39208:1;39194:8;39203:1;39194:11;;;;;;;;;;;;;;;;;;;:15;39193:30;;;;;39214:6;39221:1;39214:9;;;;;;;;;;;;;;;;;;;39193:30;:44;;;;;39228:6;39235:1;39228:9;;;;;;;;;;;;;;;;;;;39227:10;39193:44;:65;;;;;39242:16;;;;;;;;;;;39241:17;39193:65;39190:123;;;39275:26;39283:4;39289:8;39298:1;39289:11;;;;;;;;;;;;;;;;;;;39275:7;:26::i;:::-;39190:123;39343:1;39329:8;39338:1;39329:11;;;;;;;;;;;;;;;;;;;:15;39328:30;;;;;39349:6;39356:1;39349:9;;;;;;;;;;;;;;;;;;;39328:30;:44;;;;;39363:6;39370:1;39363:9;;;;;;;;;;;;;;;;;;;39362:10;39328:44;:65;;;;;39377:16;;;;;;;;;;;39376:17;39328:65;39325:121;;;39410:24;39416:4;39422:8;39431:1;39422:11;;;;;;;;;;;;;;;;;;;39410:5;:24::i;:::-;39325:121;39458:37;39478:4;39484:2;39488:6;39458:19;:37::i;:::-;37144:2359;;;;;:::o;15421:239::-;15505:22;15513:4;15519:7;15505;:22::i;:::-;15501:152;;;15576:5;15544:6;:12;15551:4;15544:12;;;;;;;;;;;:20;;:29;15565:7;15544:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;15628:12;:10;:12::i;:::-;15601:40;;15619:7;15601:40;;15613:4;15601:40;;;;;;;;;;15501:152;15421:239;;:::o;41380:114::-;41439:4;41485:1;41463:7;:19;;;:23;41456:30;;41380:114;;;:::o;14427:112::-;14506:25;14517:4;14523:7;14506:10;:25::i;:::-;14427:112;;:::o;40753:621::-;34195:4;34176:16;;:23;;;;;;;;;;;;;;;;;;40840:21:::1;40878:1;40864:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40840:40;;40909:4;40891;40896:1;40891:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;40943:42;40925:4;40930:1;40925:7;;;;;;;;;;;;;;;;;;;;;:61;;;;;;;;;::::0;::::1;40999:62;41016:4;41031:15;;;;;;;;;;;41049:11;40999:8;:62::i;:::-;41074:15;;;;;;;;;;;:69;;;41158:11;41184:1;41200:4;41219:18;;;;;;;;;;;41250:15;41074:202;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41294:72;41325:11;41351:4;41294:72;;;;;;;:::i;:::-;;;;;;;;34210:1;34241:5:::0;34222:16;;:24;;;;;;;;;;;;;;;;;;40753:621;:::o;12218:505::-;12307:22;12315:4;12321:7;12307;:22::i;:::-;12302:414;;12495:41;12523:7;12495:41;;12533:2;12495:19;:41::i;:::-;12609:38;12637:4;12629:13;;12644:2;12609:19;:38::i;:::-;12400:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12346:358;;;;;;;;;;;:::i;:::-;;;;;;;;12302:414;12218:505;;:::o;31077:181::-;31135:7;31155:9;31171:1;31167;:5;;;;:::i;:::-;31155:17;;31196:1;31191;:6;;31183:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;31249:1;31242:8;;;31077:181;;;;:::o;30191:125::-;;;;:::o;31610:250::-;31668:7;31697:1;31692;:6;31688:47;;;31722:1;31715:8;;;;31688:47;31747:9;31763:1;31759;:5;;;;:::i;:::-;31747:17;;31792:1;31787;31783;:5;;;;:::i;:::-;:10;31775:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31851:1;31844:8;;;31610:250;;;;;:::o;31870:132::-;31928:7;31955:39;31959:1;31962;31955:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;31948:46;;31870:132;;;;:::o;41505:247::-;41568:20;41590:16;33116:5;41662:9;;33116:5;41648:23;;;;:::i;:::-;41638:6;:34;;;;:::i;:::-;:48;;;;:::i;:::-;41619:67;;33116:5;41721:9;;41712:6;:18;;;;:::i;:::-;:32;;;;:::i;:::-;41697:47;;41505:247;;;:::o;41763:242::-;41825:20;41847:15;33116:5;41918:8;;33116:5;41904:22;;;;:::i;:::-;41894:6;:33;;;;:::i;:::-;:47;;;;:::i;:::-;41875:66;;33116:5;41975:8;;41966:6;:17;;;;:::i;:::-;:31;;;;:::i;:::-;41952:45;;41763:242;;;:::o;42015:129::-;42074:11;33116:5;42117;;42108:6;:14;;;;:::i;:::-;:28;;;;:::i;:::-;42098:38;;42015:129;;;:::o;40579:164::-;40660:1;40650:7;:11;40647:89;;;40678:46;40694:5;40709:4;40716:7;40678:15;:46::i;:::-;40647:89;40579:164;;:::o;39516:601::-;39620:1;39601:21;;:7;:21;;;;39593:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39673:49;39694:7;39711:1;39715:6;39673:20;:49::i;:::-;39735:22;39760:9;:18;39770:7;39760:18;;;;;;;;;;;;;;;;39735:43;;39815:6;39797:14;:24;;39789:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39934:6;39917:14;:23;39896:9;:18;39906:7;39896:18;;;;;;;;;;;;;;;:44;;;;39987:6;39962:9;:21;39980:1;39962:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;40037:1;40011:37;;40020:7;40011:37;;;40041:6;40011:37;;;;;;:::i;:::-;;;;;;;;40061:48;40081:7;40098:1;40102:6;40061:19;:48::i;:::-;39516:601;;;:::o;30920:124::-;;;;:::o;15051:238::-;15135:22;15143:4;15149:7;15135;:22::i;:::-;15130:152;;15206:4;15174:6;:12;15181:4;15174:12;;;;;;;;;;;:20;;:29;15195:7;15174:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;15257:12;:10;:12::i;:::-;15230:40;;15248:7;15230:40;;15242:4;15230:40;;;;;;;;;;15130:152;15051:238;;:::o;17220:451::-;17295:13;17321:19;17366:1;17357:6;17353:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;17343:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17321:47;;17379:15;:6;17386:1;17379:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;17405;:6;17412:1;17405:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;17436:9;17461:1;17452:6;17448:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;17436:26;;17431:135;17468:1;17464;:5;17431:135;;;17503:12;17524:3;17516:5;:11;17503:25;;;;;;;;;;;;;;;;;;17491:6;17498:1;17491:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;17553:1;17543:11;;;;;17471:3;;;;:::i;:::-;;;17431:135;;;;17593:1;17584:5;:10;17576:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;17656:6;17642:21;;;17220:451;;;;:::o;32010:278::-;32096:7;32128:1;32124;:5;32131:12;32116:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32155:9;32171:1;32167;:5;;;;:::i;:::-;32155:17;;32279:1;32272:8;;;32010:278;;;;;:::o;25748:671::-;25895:1;25879:18;;:4;:18;;;;25871:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25972:1;25958:16;;:2;:16;;;;25950:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26027:38;26048:4;26054:2;26058:6;26027:20;:38::i;:::-;26078:19;26100:9;:15;26110:4;26100:15;;;;;;;;;;;;;;;;26078:37;;26149:6;26134:11;:21;;26126:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;26266:6;26252:11;:20;26234:9;:15;26244:4;26234:15;;;;;;;;;;;;;;;:38;;;;26311:6;26294:9;:13;26304:2;26294:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;26350:2;26335:26;;26344:4;26335:26;;;26354:6;26335:26;;;;;;:::i;:::-;;;;;;;;26374:37;26394:4;26400:2;26404:6;26374:19;:37::i;:::-;25748:671;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:137::-;481:5;519:6;506:20;497:29;;535:32;561:5;535:32;:::i;:::-;487:86;;;;:::o;579:139::-;625:5;663:6;650:20;641:29;;679:33;706:5;679:33;:::i;:::-;631:87;;;;:::o;724:262::-;783:6;832:2;820:9;811:7;807:23;803:32;800:2;;;848:1;845;838:12;800:2;891:1;916:53;961:7;952:6;941:9;937:22;916:53;:::i;:::-;906:63;;862:117;790:196;;;;:::o;992:407::-;1060:6;1068;1117:2;1105:9;1096:7;1092:23;1088:32;1085:2;;;1133:1;1130;1123:12;1085:2;1176:1;1201:53;1246:7;1237:6;1226:9;1222:22;1201:53;:::i;:::-;1191:63;;1147:117;1303:2;1329:53;1374:7;1365:6;1354:9;1350:22;1329:53;:::i;:::-;1319:63;;1274:118;1075:324;;;;;:::o;1405:552::-;1482:6;1490;1498;1547:2;1535:9;1526:7;1522:23;1518:32;1515:2;;;1563:1;1560;1553:12;1515:2;1606:1;1631:53;1676:7;1667:6;1656:9;1652:22;1631:53;:::i;:::-;1621:63;;1577:117;1733:2;1759:53;1804:7;1795:6;1784:9;1780:22;1759:53;:::i;:::-;1749:63;;1704:118;1861:2;1887:53;1932:7;1923:6;1912:9;1908:22;1887:53;:::i;:::-;1877:63;;1832:118;1505:452;;;;;:::o;1963:407::-;2031:6;2039;2088:2;2076:9;2067:7;2063:23;2059:32;2056:2;;;2104:1;2101;2094:12;2056:2;2147:1;2172:53;2217:7;2208:6;2197:9;2193:22;2172:53;:::i;:::-;2162:63;;2118:117;2274:2;2300:53;2345:7;2336:6;2325:9;2321:22;2300:53;:::i;:::-;2290:63;;2245:118;2046:324;;;;;:::o;2376:256::-;2432:6;2481:2;2469:9;2460:7;2456:23;2452:32;2449:2;;;2497:1;2494;2487:12;2449:2;2540:1;2565:50;2607:7;2598:6;2587:9;2583:22;2565:50;:::i;:::-;2555:60;;2511:114;2439:193;;;;:::o;2638:262::-;2697:6;2746:2;2734:9;2725:7;2721:23;2717:32;2714:2;;;2762:1;2759;2752:12;2714:2;2805:1;2830:53;2875:7;2866:6;2855:9;2851:22;2830:53;:::i;:::-;2820:63;;2776:117;2704:196;;;;:::o;2906:407::-;2974:6;2982;3031:2;3019:9;3010:7;3006:23;3002:32;2999:2;;;3047:1;3044;3037:12;2999:2;3090:1;3115:53;3160:7;3151:6;3140:9;3136:22;3115:53;:::i;:::-;3105:63;;3061:117;3217:2;3243:53;3288:7;3279:6;3268:9;3264:22;3243:53;:::i;:::-;3233:63;;3188:118;2989:324;;;;;:::o;3319:260::-;3377:6;3426:2;3414:9;3405:7;3401:23;3397:32;3394:2;;;3442:1;3439;3432:12;3394:2;3485:1;3510:52;3554:7;3545:6;3534:9;3530:22;3510:52;:::i;:::-;3500:62;;3456:116;3384:195;;;;:::o;3585:262::-;3644:6;3693:2;3681:9;3672:7;3668:23;3664:32;3661:2;;;3709:1;3706;3699:12;3661:2;3752:1;3777:53;3822:7;3813:6;3802:9;3798:22;3777:53;:::i;:::-;3767:63;;3723:117;3651:196;;;;:::o;3853:179::-;3922:10;3943:46;3985:3;3977:6;3943:46;:::i;:::-;4021:4;4016:3;4012:14;3998:28;;3933:99;;;;:::o;4038:108::-;4115:24;4133:5;4115:24;:::i;:::-;4110:3;4103:37;4093:53;;:::o;4152:118::-;4239:24;4257:5;4239:24;:::i;:::-;4234:3;4227:37;4217:53;;:::o;4306:732::-;4425:3;4454:54;4502:5;4454:54;:::i;:::-;4524:86;4603:6;4598:3;4524:86;:::i;:::-;4517:93;;4634:56;4684:5;4634:56;:::i;:::-;4713:7;4744:1;4729:284;4754:6;4751:1;4748:13;4729:284;;;4830:6;4824:13;4857:63;4916:3;4901:13;4857:63;:::i;:::-;4850:70;;4943:60;4996:6;4943:60;:::i;:::-;4933:70;;4789:224;4776:1;4773;4769:9;4764:14;;4729:284;;;4733:14;5029:3;5022:10;;4430:608;;;;;;;:::o;5044:109::-;5125:21;5140:5;5125:21;:::i;:::-;5120:3;5113:34;5103:50;;:::o;5159:118::-;5246:24;5264:5;5246:24;:::i;:::-;5241:3;5234:37;5224:53;;:::o;5283:183::-;5396:63;5453:5;5396:63;:::i;:::-;5391:3;5384:76;5374:92;;:::o;5472:147::-;5567:45;5606:5;5567:45;:::i;:::-;5562:3;5555:58;5545:74;;:::o;5625:364::-;5713:3;5741:39;5774:5;5741:39;:::i;:::-;5796:71;5860:6;5855:3;5796:71;:::i;:::-;5789:78;;5876:52;5921:6;5916:3;5909:4;5902:5;5898:16;5876:52;:::i;:::-;5953:29;5975:6;5953:29;:::i;:::-;5948:3;5944:39;5937:46;;5717:272;;;;;:::o;5995:377::-;6101:3;6129:39;6162:5;6129:39;:::i;:::-;6184:89;6266:6;6261:3;6184:89;:::i;:::-;6177:96;;6282:52;6327:6;6322:3;6315:4;6308:5;6304:16;6282:52;:::i;:::-;6359:6;6354:3;6350:16;6343:23;;6105:267;;;;;:::o;6378:366::-;6520:3;6541:67;6605:2;6600:3;6541:67;:::i;:::-;6534:74;;6617:93;6706:3;6617:93;:::i;:::-;6735:2;6730:3;6726:12;6719:19;;6524:220;;;:::o;6750:366::-;6892:3;6913:67;6977:2;6972:3;6913:67;:::i;:::-;6906:74;;6989:93;7078:3;6989:93;:::i;:::-;7107:2;7102:3;7098:12;7091:19;;6896:220;;;:::o;7122:366::-;7264:3;7285:67;7349:2;7344:3;7285:67;:::i;:::-;7278:74;;7361:93;7450:3;7361:93;:::i;:::-;7479:2;7474:3;7470:12;7463:19;;7268:220;;;:::o;7494:366::-;7636:3;7657:67;7721:2;7716:3;7657:67;:::i;:::-;7650:74;;7733:93;7822:3;7733:93;:::i;:::-;7851:2;7846:3;7842:12;7835:19;;7640:220;;;:::o;7866:366::-;8008:3;8029:67;8093:2;8088:3;8029:67;:::i;:::-;8022:74;;8105:93;8194:3;8105:93;:::i;:::-;8223:2;8218:3;8214:12;8207:19;;8012:220;;;:::o;8238:366::-;8380:3;8401:67;8465:2;8460:3;8401:67;:::i;:::-;8394:74;;8477:93;8566:3;8477:93;:::i;:::-;8595:2;8590:3;8586:12;8579:19;;8384:220;;;:::o;8610:366::-;8752:3;8773:67;8837:2;8832:3;8773:67;:::i;:::-;8766:74;;8849:93;8938:3;8849:93;:::i;:::-;8967:2;8962:3;8958:12;8951:19;;8756:220;;;:::o;8982:366::-;9124:3;9145:67;9209:2;9204:3;9145:67;:::i;:::-;9138:74;;9221:93;9310:3;9221:93;:::i;:::-;9339:2;9334:3;9330:12;9323:19;;9128:220;;;:::o;9354:366::-;9496:3;9517:67;9581:2;9576:3;9517:67;:::i;:::-;9510:74;;9593:93;9682:3;9593:93;:::i;:::-;9711:2;9706:3;9702:12;9695:19;;9500:220;;;:::o;9726:366::-;9868:3;9889:67;9953:2;9948:3;9889:67;:::i;:::-;9882:74;;9965:93;10054:3;9965:93;:::i;:::-;10083:2;10078:3;10074:12;10067:19;;9872:220;;;:::o;10098:366::-;10240:3;10261:67;10325:2;10320:3;10261:67;:::i;:::-;10254:74;;10337:93;10426:3;10337:93;:::i;:::-;10455:2;10450:3;10446:12;10439:19;;10244:220;;;:::o;10470:366::-;10612:3;10633:67;10697:2;10692:3;10633:67;:::i;:::-;10626:74;;10709:93;10798:3;10709:93;:::i;:::-;10827:2;10822:3;10818:12;10811:19;;10616:220;;;:::o;10842:366::-;10984:3;11005:67;11069:2;11064:3;11005:67;:::i;:::-;10998:74;;11081:93;11170:3;11081:93;:::i;:::-;11199:2;11194:3;11190:12;11183:19;;10988:220;;;:::o;11214:366::-;11356:3;11377:67;11441:2;11436:3;11377:67;:::i;:::-;11370:74;;11453:93;11542:3;11453:93;:::i;:::-;11571:2;11566:3;11562:12;11555:19;;11360:220;;;:::o;11586:366::-;11728:3;11749:67;11813:2;11808:3;11749:67;:::i;:::-;11742:74;;11825:93;11914:3;11825:93;:::i;:::-;11943:2;11938:3;11934:12;11927:19;;11732:220;;;:::o;11958:366::-;12100:3;12121:67;12185:2;12180:3;12121:67;:::i;:::-;12114:74;;12197:93;12286:3;12197:93;:::i;:::-;12315:2;12310:3;12306:12;12299:19;;12104:220;;;:::o;12330:366::-;12472:3;12493:67;12557:2;12552:3;12493:67;:::i;:::-;12486:74;;12569:93;12658:3;12569:93;:::i;:::-;12687:2;12682:3;12678:12;12671:19;;12476:220;;;:::o;12702:366::-;12844:3;12865:67;12929:2;12924:3;12865:67;:::i;:::-;12858:74;;12941:93;13030:3;12941:93;:::i;:::-;13059:2;13054:3;13050:12;13043:19;;12848:220;;;:::o;13074:402::-;13234:3;13255:85;13337:2;13332:3;13255:85;:::i;:::-;13248:92;;13349:93;13438:3;13349:93;:::i;:::-;13467:2;13462:3;13458:12;13451:19;;13238:238;;;:::o;13482:366::-;13624:3;13645:67;13709:2;13704:3;13645:67;:::i;:::-;13638:74;;13721:93;13810:3;13721:93;:::i;:::-;13839:2;13834:3;13830:12;13823:19;;13628:220;;;:::o;13854:366::-;13996:3;14017:67;14081:2;14076:3;14017:67;:::i;:::-;14010:74;;14093:93;14182:3;14093:93;:::i;:::-;14211:2;14206:3;14202:12;14195:19;;14000:220;;;:::o;14226:402::-;14386:3;14407:85;14489:2;14484:3;14407:85;:::i;:::-;14400:92;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14390:238;;;:::o;14634:366::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14780:220;;;:::o;15006:118::-;15093:24;15111:5;15093:24;:::i;:::-;15088:3;15081:37;15071:53;;:::o;15130:112::-;15213:22;15229:5;15213:22;:::i;:::-;15208:3;15201:35;15191:51;;:::o;15248:967::-;15630:3;15652:148;15796:3;15652:148;:::i;:::-;15645:155;;15817:95;15908:3;15899:6;15817:95;:::i;:::-;15810:102;;15929:148;16073:3;15929:148;:::i;:::-;15922:155;;16094:95;16185:3;16176:6;16094:95;:::i;:::-;16087:102;;16206:3;16199:10;;15634:581;;;;;:::o;16221:222::-;16314:4;16352:2;16341:9;16337:18;16329:26;;16365:71;16433:1;16422:9;16418:17;16409:6;16365:71;:::i;:::-;16319:124;;;;:::o;16449:210::-;16536:4;16574:2;16563:9;16559:18;16551:26;;16587:65;16649:1;16638:9;16634:17;16625:6;16587:65;:::i;:::-;16541:118;;;;:::o;16665:222::-;16758:4;16796:2;16785:9;16781:18;16773:26;;16809:71;16877:1;16866:9;16862:17;16853:6;16809:71;:::i;:::-;16763:124;;;;:::o;16893:274::-;17012:4;17050:2;17039:9;17035:18;17027:26;;17063:97;17157:1;17146:9;17142:17;17133:6;17063:97;:::i;:::-;17017:150;;;;:::o;17173:313::-;17286:4;17324:2;17313:9;17309:18;17301:26;;17373:9;17367:4;17363:20;17359:1;17348:9;17344:17;17337:47;17401:78;17474:4;17465:6;17401:78;:::i;:::-;17393:86;;17291:195;;;;:::o;17492:419::-;17658:4;17696:2;17685:9;17681:18;17673:26;;17745:9;17739:4;17735:20;17731:1;17720:9;17716:17;17709:47;17773:131;17899:4;17773:131;:::i;:::-;17765:139;;17663:248;;;:::o;17917:419::-;18083:4;18121:2;18110:9;18106:18;18098:26;;18170:9;18164:4;18160:20;18156:1;18145:9;18141:17;18134:47;18198:131;18324:4;18198:131;:::i;:::-;18190:139;;18088:248;;;:::o;18342:419::-;18508:4;18546:2;18535:9;18531:18;18523:26;;18595:9;18589:4;18585:20;18581:1;18570:9;18566:17;18559:47;18623:131;18749:4;18623:131;:::i;:::-;18615:139;;18513:248;;;:::o;18767:419::-;18933:4;18971:2;18960:9;18956:18;18948:26;;19020:9;19014:4;19010:20;19006:1;18995:9;18991:17;18984:47;19048:131;19174:4;19048:131;:::i;:::-;19040:139;;18938:248;;;:::o;19192:419::-;19358:4;19396:2;19385:9;19381:18;19373:26;;19445:9;19439:4;19435:20;19431:1;19420:9;19416:17;19409:47;19473:131;19599:4;19473:131;:::i;:::-;19465:139;;19363:248;;;:::o;19617:419::-;19783:4;19821:2;19810:9;19806:18;19798:26;;19870:9;19864:4;19860:20;19856:1;19845:9;19841:17;19834:47;19898:131;20024:4;19898:131;:::i;:::-;19890:139;;19788:248;;;:::o;20042:419::-;20208:4;20246:2;20235:9;20231:18;20223:26;;20295:9;20289:4;20285:20;20281:1;20270:9;20266:17;20259:47;20323:131;20449:4;20323:131;:::i;:::-;20315:139;;20213:248;;;:::o;20467:419::-;20633:4;20671:2;20660:9;20656:18;20648:26;;20720:9;20714:4;20710:20;20706:1;20695:9;20691:17;20684:47;20748:131;20874:4;20748:131;:::i;:::-;20740:139;;20638:248;;;:::o;20892:419::-;21058:4;21096:2;21085:9;21081:18;21073:26;;21145:9;21139:4;21135:20;21131:1;21120:9;21116:17;21109:47;21173:131;21299:4;21173:131;:::i;:::-;21165:139;;21063:248;;;:::o;21317:419::-;21483:4;21521:2;21510:9;21506:18;21498:26;;21570:9;21564:4;21560:20;21556:1;21545:9;21541:17;21534:47;21598:131;21724:4;21598:131;:::i;:::-;21590:139;;21488:248;;;:::o;21742:419::-;21908:4;21946:2;21935:9;21931:18;21923:26;;21995:9;21989:4;21985:20;21981:1;21970:9;21966:17;21959:47;22023:131;22149:4;22023:131;:::i;:::-;22015:139;;21913:248;;;:::o;22167:419::-;22333:4;22371:2;22360:9;22356:18;22348:26;;22420:9;22414:4;22410:20;22406:1;22395:9;22391:17;22384:47;22448:131;22574:4;22448:131;:::i;:::-;22440:139;;22338:248;;;:::o;22592:419::-;22758:4;22796:2;22785:9;22781:18;22773:26;;22845:9;22839:4;22835:20;22831:1;22820:9;22816:17;22809:47;22873:131;22999:4;22873:131;:::i;:::-;22865:139;;22763:248;;;:::o;23017:419::-;23183:4;23221:2;23210:9;23206:18;23198:26;;23270:9;23264:4;23260:20;23256:1;23245:9;23241:17;23234:47;23298:131;23424:4;23298:131;:::i;:::-;23290:139;;23188:248;;;:::o;23442:419::-;23608:4;23646:2;23635:9;23631:18;23623:26;;23695:9;23689:4;23685:20;23681:1;23670:9;23666:17;23659:47;23723:131;23849:4;23723:131;:::i;:::-;23715:139;;23613:248;;;:::o;23867:419::-;24033:4;24071:2;24060:9;24056:18;24048:26;;24120:9;24114:4;24110:20;24106:1;24095:9;24091:17;24084:47;24148:131;24274:4;24148:131;:::i;:::-;24140:139;;24038:248;;;:::o;24292:419::-;24458:4;24496:2;24485:9;24481:18;24473:26;;24545:9;24539:4;24535:20;24531:1;24520:9;24516:17;24509:47;24573:131;24699:4;24573:131;:::i;:::-;24565:139;;24463:248;;;:::o;24717:419::-;24883:4;24921:2;24910:9;24906:18;24898:26;;24970:9;24964:4;24960:20;24956:1;24945:9;24941:17;24934:47;24998:131;25124:4;24998:131;:::i;:::-;24990:139;;24888:248;;;:::o;25142:419::-;25308:4;25346:2;25335:9;25331:18;25323:26;;25395:9;25389:4;25385:20;25381:1;25370:9;25366:17;25359:47;25423:131;25549:4;25423:131;:::i;:::-;25415:139;;25313:248;;;:::o;25567:419::-;25733:4;25771:2;25760:9;25756:18;25748:26;;25820:9;25814:4;25810:20;25806:1;25795:9;25791:17;25784:47;25848:131;25974:4;25848:131;:::i;:::-;25840:139;;25738:248;;;:::o;25992:419::-;26158:4;26196:2;26185:9;26181:18;26173:26;;26245:9;26239:4;26235:20;26231:1;26220:9;26216:17;26209:47;26273:131;26399:4;26273:131;:::i;:::-;26265:139;;26163:248;;;:::o;26417:222::-;26510:4;26548:2;26537:9;26533:18;26525:26;;26561:71;26629:1;26618:9;26614:17;26605:6;26561:71;:::i;:::-;26515:124;;;;:::o;26645:483::-;26816:4;26854:2;26843:9;26839:18;26831:26;;26867:71;26935:1;26924:9;26920:17;26911:6;26867:71;:::i;:::-;26985:9;26979:4;26975:20;26970:2;26959:9;26955:18;26948:48;27013:108;27116:4;27107:6;27013:108;:::i;:::-;27005:116;;26821:307;;;;;:::o;27134:831::-;27397:4;27435:3;27424:9;27420:19;27412:27;;27449:71;27517:1;27506:9;27502:17;27493:6;27449:71;:::i;:::-;27530:80;27606:2;27595:9;27591:18;27582:6;27530:80;:::i;:::-;27657:9;27651:4;27647:20;27642:2;27631:9;27627:18;27620:48;27685:108;27788:4;27779:6;27685:108;:::i;:::-;27677:116;;27803:72;27871:2;27860:9;27856:18;27847:6;27803:72;:::i;:::-;27885:73;27953:3;27942:9;27938:19;27929:6;27885:73;:::i;:::-;27402:563;;;;;;;;:::o;27971:214::-;28060:4;28098:2;28087:9;28083:18;28075:26;;28111:67;28175:1;28164:9;28160:17;28151:6;28111:67;:::i;:::-;28065:120;;;;:::o;28191:132::-;28258:4;28281:3;28273:11;;28311:4;28306:3;28302:14;28294:22;;28263:60;;;:::o;28329:114::-;28396:6;28430:5;28424:12;28414:22;;28403:40;;;:::o;28449:99::-;28501:6;28535:5;28529:12;28519:22;;28508:40;;;:::o;28554:113::-;28624:4;28656;28651:3;28647:14;28639:22;;28629:38;;;:::o;28673:184::-;28772:11;28806:6;28801:3;28794:19;28846:4;28841:3;28837:14;28822:29;;28784:73;;;;:::o;28863:169::-;28947:11;28981:6;28976:3;28969:19;29021:4;29016:3;29012:14;28997:29;;28959:73;;;;:::o;29038:148::-;29140:11;29177:3;29162:18;;29152:34;;;;:::o;29192:305::-;29232:3;29251:20;29269:1;29251:20;:::i;:::-;29246:25;;29285:20;29303:1;29285:20;:::i;:::-;29280:25;;29439:1;29371:66;29367:74;29364:1;29361:81;29358:2;;;29445:18;;:::i;:::-;29358:2;29489:1;29486;29482:9;29475:16;;29236:261;;;;:::o;29503:185::-;29543:1;29560:20;29578:1;29560:20;:::i;:::-;29555:25;;29594:20;29612:1;29594:20;:::i;:::-;29589:25;;29633:1;29623:2;;29638:18;;:::i;:::-;29623:2;29680:1;29677;29673:9;29668:14;;29545:143;;;;:::o;29694:348::-;29734:7;29757:20;29775:1;29757:20;:::i;:::-;29752:25;;29791:20;29809:1;29791:20;:::i;:::-;29786:25;;29979:1;29911:66;29907:74;29904:1;29901:81;29896:1;29889:9;29882:17;29878:105;29875:2;;;29986:18;;:::i;:::-;29875:2;30034:1;30031;30027:9;30016:20;;29742:300;;;;:::o;30048:191::-;30088:4;30108:20;30126:1;30108:20;:::i;:::-;30103:25;;30142:20;30160:1;30142:20;:::i;:::-;30137:25;;30181:1;30178;30175:8;30172:2;;;30186:18;;:::i;:::-;30172:2;30231:1;30228;30224:9;30216:17;;30093:146;;;;:::o;30245:96::-;30282:7;30311:24;30329:5;30311:24;:::i;:::-;30300:35;;30290:51;;;:::o;30347:90::-;30381:7;30424:5;30417:13;30410:21;30399:32;;30389:48;;;:::o;30443:77::-;30480:7;30509:5;30498:16;;30488:32;;;:::o;30526:149::-;30562:7;30602:66;30595:5;30591:78;30580:89;;30570:105;;;:::o;30681:126::-;30718:7;30758:42;30751:5;30747:54;30736:65;;30726:81;;;:::o;30813:77::-;30850:7;30879:5;30868:16;;30858:32;;;:::o;30896:86::-;30931:7;30971:4;30964:5;30960:16;30949:27;;30939:43;;;:::o;30988:178::-;31064:9;31097:63;31154:5;31097:63;:::i;:::-;31084:76;;31074:92;;;:::o;31172:139::-;31248:9;31281:24;31299:5;31281:24;:::i;:::-;31268:37;;31258:53;;;:::o;31317:121::-;31375:9;31408:24;31426:5;31408:24;:::i;:::-;31395:37;;31385:53;;;:::o;31444:307::-;31512:1;31522:113;31536:6;31533:1;31530:13;31522:113;;;31621:1;31616:3;31612:11;31606:18;31602:1;31597:3;31593:11;31586:39;31558:2;31555:1;31551:10;31546:15;;31522:113;;;31653:6;31650:1;31647:13;31644:2;;;31733:1;31724:6;31719:3;31715:16;31708:27;31644:2;31493:258;;;;:::o;31757:171::-;31796:3;31819:24;31837:5;31819:24;:::i;:::-;31810:33;;31865:4;31858:5;31855:15;31852:2;;;31873:18;;:::i;:::-;31852:2;31920:1;31913:5;31909:13;31902:20;;31800:128;;;:::o;31934:320::-;31978:6;32015:1;32009:4;32005:12;31995:22;;32062:1;32056:4;32052:12;32083:18;32073:2;;32139:4;32131:6;32127:17;32117:27;;32073:2;32201;32193:6;32190:14;32170:18;32167:38;32164:2;;;32220:18;;:::i;:::-;32164:2;31985:269;;;;:::o;32260:180::-;32308:77;32305:1;32298:88;32405:4;32402:1;32395:15;32429:4;32426:1;32419:15;32446:180;32494:77;32491:1;32484:88;32591:4;32588:1;32581:15;32615:4;32612:1;32605:15;32632:180;32680:77;32677:1;32670:88;32777:4;32774:1;32767:15;32801:4;32798:1;32791:15;32818:102;32859:6;32910:2;32906:7;32901:2;32894:5;32890:14;32886:28;32876:38;;32866:54;;;:::o;32926:182::-;33066:34;33062:1;33054:6;33050:14;33043:58;33032:76;:::o;33114:222::-;33254:34;33250:1;33242:6;33238:14;33231:58;33323:5;33318:2;33310:6;33306:15;33299:30;33220:116;:::o;33342:221::-;33482:34;33478:1;33470:6;33466:14;33459:58;33551:4;33546:2;33538:6;33534:15;33527:29;33448:115;:::o;33569:244::-;33709:34;33705:1;33697:6;33693:14;33686:58;33778:27;33773:2;33765:6;33761:15;33754:52;33675:138;:::o;33819:221::-;33959:34;33955:1;33947:6;33943:14;33936:58;34028:4;34023:2;34015:6;34011:15;34004:29;33925:115;:::o;34046:176::-;34186:28;34182:1;34174:6;34170:14;34163:52;34152:70;:::o;34228:177::-;34368:29;34364:1;34356:6;34352:14;34345:53;34334:71;:::o;34411:179::-;34551:31;34547:1;34539:6;34535:14;34528:55;34517:73;:::o;34596:238::-;34736:34;34732:1;34724:6;34720:14;34713:58;34805:21;34800:2;34792:6;34788:15;34781:46;34702:132;:::o;34840:224::-;34980:34;34976:1;34968:6;34964:14;34957:58;35049:7;35044:2;35036:6;35032:15;35025:32;34946:118;:::o;35070:225::-;35210:34;35206:1;35198:6;35194:14;35187:58;35279:8;35274:2;35266:6;35262:15;35255:33;35176:119;:::o;35301:231::-;35441:34;35437:1;35429:6;35425:14;35418:58;35510:14;35505:2;35497:6;35493:15;35486:39;35407:125;:::o;35538:235::-;35678:34;35674:1;35666:6;35662:14;35655:58;35747:18;35742:2;35734:6;35730:15;35723:43;35644:129;:::o;35779:220::-;35919:34;35915:1;35907:6;35903:14;35896:58;35988:3;35983:2;35975:6;35971:15;35964:28;35885:114;:::o;36005:239::-;36145:34;36141:1;36133:6;36129:14;36122:58;36214:22;36209:2;36201:6;36197:15;36190:47;36111:133;:::o;36250:220::-;36390:34;36386:1;36378:6;36374:14;36367:58;36459:3;36454:2;36446:6;36442:15;36435:28;36356:114;:::o;36476:224::-;36616:34;36612:1;36604:6;36600:14;36593:58;36685:7;36680:2;36672:6;36668:15;36661:32;36582:118;:::o;36706:223::-;36846:34;36842:1;36834:6;36830:14;36823:58;36915:6;36910:2;36902:6;36898:15;36891:31;36812:117;:::o;36935:173::-;37075:25;37071:1;37063:6;37059:14;37052:49;37041:67;:::o;37114:229::-;37254:34;37250:1;37242:6;37238:14;37231:58;37323:12;37318:2;37310:6;37306:15;37299:37;37220:123;:::o;37349:224::-;37489:34;37485:1;37477:6;37473:14;37466:58;37558:7;37553:2;37545:6;37541:15;37534:32;37455:118;:::o;37579:167::-;37719:19;37715:1;37707:6;37703:14;37696:43;37685:61;:::o;37752:234::-;37892:34;37888:1;37880:6;37876:14;37869:58;37961:17;37956:2;37948:6;37944:15;37937:42;37858:128;:::o;37992:122::-;38065:24;38083:5;38065:24;:::i;:::-;38058:5;38055:35;38045:2;;38104:1;38101;38094:12;38045:2;38035:79;:::o;38120:116::-;38190:21;38205:5;38190:21;:::i;:::-;38183:5;38180:32;38170:2;;38226:1;38223;38216:12;38170:2;38160:76;:::o;38242:122::-;38315:24;38333:5;38315:24;:::i;:::-;38308:5;38305:35;38295:2;;38354:1;38351;38344:12;38295:2;38285:79;:::o;38370:120::-;38442:23;38459:5;38442:23;:::i;:::-;38435:5;38432:34;38422:2;;38480:1;38477;38470:12;38422:2;38412:78;:::o;38496:122::-;38569:24;38587:5;38569:24;:::i;:::-;38562:5;38559:35;38549:2;;38608:1;38605;38598:12;38549:2;38539:79;:::o

Swarm Source

ipfs://8fc32b2c3219ca4056e7aa588d4b00720ec325fc9db615031ae7d18a1a36c016
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.