ETH Price: $3,909.46 (+1.30%)

Token

Streamr (DATA)
 

Overview

Max Total Supply

1,145,023,352 DATA

Holders

5,164 ( 0.039%)

Market

Price

$0.06 @ 0.000015 ETH (-4.88%)

Onchain Market Cap

$66,600,283.27

Circulating Supply Market Cap

$44,622,944.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.01 DATA

Value
$0.00 ( ~0 Eth) [0.0000%]
0xb0A3A2B60E969AFD26561429Aa4c1444C57E4411
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Streamr is a decentralized real‑time data network for web3. Create, share and consume data streams on an open, scalable P2P protocol with powerful tools for monetization. As a layer zero protocol, it provides a publish/subscribe messaging framework for decentralized applications built on top.

Market

Volume (24H):$25,907,130.00
Market Capitalization:$44,622,944.00
Circulating Supply:767,121,867.00 DATA
Market Data Source: Coinmarketcap

ICO Information

ICO Start Date : Oct 12, 2017   
ICO End Date : Oct 13, 2017
Total Cap : CHF$30,000,000 | $31,000,000
Token Distribution Date : Nov 3, 2017
ICO Price  : $0.047 | 0.000186 ETH
Bonus : Presale : 10%
Country : Switzerland 

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DATAv2

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-13
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

// Sources flattened with hardhat v2.1.2 https://hardhat.org
// NOTE: manually removed extraneous licence identifies and pragmas to accommodate Etherscan Verify & Publish

// File @openzeppelin/contracts/utils/[email protected]





/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]





/**
 * @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);
}


// File @openzeppelin/contracts/utils/introspection/[email protected]





/**
 * @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;
    }
}


// File @openzeppelin/contracts/access/[email protected]






/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

/**
 * @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 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 {_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 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 override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @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 override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    /**
     * @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) 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}.
     * ====
     */
    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 {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]





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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]






/**
 * @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 guidelines: functions revert instead
 * of 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 {
    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All three 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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
     * overloaded;
     *
     * 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 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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, 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:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(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 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 to 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 { }
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]






/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]





/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}


// File @openzeppelin/contracts/utils/cryptography/[email protected]





/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid signature length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        return recover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}


// File @openzeppelin/contracts/utils/cryptography/[email protected]





/**
 * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
 *
 * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
 * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
 * they need in their contracts using a combination of `abi.encode` and `keccak256`.
 *
 * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
 * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
 * ({_hashTypedDataV4}).
 *
 * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
 * the chain id to protect against replay attacks on an eventual fork of the chain.
 *
 * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
 * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
 *
 * _Available since v3.4._
 */
abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;
    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {
        return keccak256(
            abi.encode(
                typeHash,
                name,
                version,
                block.chainid,
                address(this)
            )
        );
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}


// File @openzeppelin/contracts/utils/[email protected]





/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]









/**
 * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 *
 * _Available since v3.4._
 */
abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
    using Counters for Counters.Counter;

    mapping (address => Counters.Counter) private _nonces;

    // solhint-disable-next-line var-name-mixedcase
    bytes32 private immutable _PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /**
     * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
     *
     * It's a good idea to use the same `name` that is defined as the ERC20 token name.
     */
    constructor(string memory name) EIP712(name, "1") {
    }

    /**
     * @dev See {IERC20Permit-permit}.
     */
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual override {
        // solhint-disable-next-line not-rely-on-time
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(
            abi.encode(
                _PERMIT_TYPEHASH,
                owner,
                spender,
                value,
                _nonces[owner].current(),
                deadline
            )
        );

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = ECDSA.recover(hash, v, r, s);
        require(signer == owner, "ERC20Permit: invalid signature");

        _nonces[owner].increment();
        _approve(owner, spender, value);
    }

    /**
     * @dev See {IERC20Permit-nonces}.
     */
    function nonces(address owner) public view override returns (uint256) {
        return _nonces[owner].current();
    }

    /**
     * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view override returns (bytes32) {
        return _domainSeparatorV4();
    }
}


// File contracts/IERC677.sol




// adapted from LINK token https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca#code
// implements https://github.com/ethereum/EIPs/issues/677
interface IERC677 is IERC20 {
    function transferAndCall(
        address to,
        uint value,
        bytes calldata data
    ) external returns (bool success);

    event Transfer(
        address indexed from,
        address indexed to,
        uint value,
        bytes data
    );
}


// File contracts/IERC677Receiver.sol




interface IERC677Receiver {
    function onTokenTransfer(
        address _sender,
        uint256 _value,
        bytes calldata _data
    ) external;
}


// File contracts/DATAv2.sol








contract DATAv2 is ERC20Permit, ERC20Burnable, AccessControl, IERC677 {
    string private _name = "Streamr";
    string private _symbol = "DATA";

    event UpdatedTokenInformation(string newName, string newSymbol);

    // ------------------------------------------------------------------------
    // adapted from @openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol
    bytes32 constant public MINTER_ROLE = keccak256("MINTER_ROLE");

    constructor() ERC20("", "") ERC20Permit(_name) {
        // make contract deployer the role admin that can later grant the minter role
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
    }

    function isMinter(
        address minter
    ) public view returns (bool) {
        return hasRole(MINTER_ROLE, minter);
    }

    /**
     * @dev Creates `amount` new tokens for `to`.
     *
     * See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the `MINTER_ROLE`.
     */
    function mint(
        address to,
        uint256 amount
    ) public {
        require(isMinter(_msgSender()), "Transaction signer is not a minter");
        _mint(to, amount);
    }

    // ------------------------------------------------------------------------
    // adapted from LINK token, see https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca#code
    // implements https://github.com/ethereum/EIPs/issues/677
    /**
     * @dev transfer token to a contract address with additional data if the recipient is a contact.
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     * @param _data The extra data to be passed to the receiving contract.
     */
    function transferAndCall(
        address _to,
        uint256 _value,
        bytes calldata _data
    ) public override returns (bool success) {
        super.transfer(_to, _value);
        emit Transfer(_msgSender(), _to, _value, _data);

        uint256 recipientCodeSize;
        assembly {
            recipientCodeSize := extcodesize(_to)
        }
        if (recipientCodeSize > 0) {
            IERC677Receiver receiver = IERC677Receiver(_to);
            receiver.onTokenTransfer(_msgSender(), _value, _data);
        }
        return true;
    }

    // ------------------------------------------------------------------------
    // allow admin to change the token name and symbol

    function setTokenInformation(string calldata newName, string calldata newSymbol) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Transaction signer is not an admin");
        _name = newName;
        _symbol = newSymbol;
        emit UpdatedTokenInformation(_name, _symbol);
    }

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

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

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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newName","type":"string"},{"indexed":false,"internalType":"string","name":"newSymbol","type":"string"}],"name":"UpdatedTokenInformation","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","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":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"},{"internalType":"string","name":"newSymbol","type":"string"}],"name":"setTokenInformation","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120908152506040518060400160405280600781526020017f53747265616d7200000000000000000000000000000000000000000000000000815250600790805190602001906200007a92919062000454565b506040518060400160405280600481526020017f444154410000000000000000000000000000000000000000000000000000000081525060089080519060200190620000c892919062000454565b50348015620000d657600080fd5b5060078054620000e690620005dc565b80601f01602080910402602001604051908101604052809291908181526020018280546200011490620005dc565b8015620001655780601f10620001395761010080835404028352916020019162000165565b820191906000526020600020905b8154815290600101906020018083116200014757829003601f168201915b5050505050806040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525060405180602001604052806000815250604051806020016040528060008152508160039080519060200190620001d992919062000454565b508060049080519060200190620001f292919062000454565b50505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260c081815250508160e081815250504660a081815250506200025d8184846200029d60201b60201c565b60808181525050806101008181525050505050505050620002976000801b6200028b620002d960201b60201c565b620002e160201b60201c565b62000641565b60008383834630604051602001620002ba95949392919062000537565b6040516020818303038152906040528051906020012090509392505050565b600033905090565b620002f38282620002f760201b60201c565b5050565b620003098282620003e960201b60201c565b620003e55760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200038a620002d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8280546200046290620005dc565b90600052602060002090601f016020900481019282620004865760008555620004d2565b82601f10620004a157805160ff1916838001178555620004d2565b82800160010185558215620004d2579182015b82811115620004d1578251825591602001919060010190620004b4565b5b509050620004e19190620004e5565b5090565b5b8082111562000500576000816000905550600101620004e6565b5090565b6200050f8162000594565b82525050565b6200052081620005a8565b82525050565b6200053181620005d2565b82525050565b600060a0820190506200054e600083018862000515565b6200055d602083018762000515565b6200056c604083018662000515565b6200057b606083018562000526565b6200058a608083018462000504565b9695505050505050565b6000620005a182620005b2565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620005f557607f821691505b602082108114156200060c576200060b62000612565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60805160a05160c05160e0516101005161012051613694620006916000396000610fda0152600061185f015260006118a1015260006118800152600061180c0152600061183401526136946000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80634eee966f116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610565578063d539139314610581578063d547741f1461059f578063dd62ed3e146105bb576101c4565b8063a457c2d7146104d5578063a9059cbb14610505578063aa271e1a14610535576101c4565b80637ecebe00116100d35780637ecebe001461043957806391d148541461046957806395d89b4114610499578063a217fddf146104b7576101c4565b80634eee966f146103d157806370a08231146103ed57806379cc67901461041d576101c4565b8063313ce56711610166578063395093511161014057806339509351146103395780634000aea01461036957806340c10f191461039957806342966c68146103b5576101c4565b8063313ce567146102e15780633644e515146102ff57806336568abe1461031d576101c4565b806318160ddd116101a257806318160ddd1461024757806323b872dd14610265578063248a9ca3146102955780632f2ff15d146102c5576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de919061234b565b6105eb565b6040516101f091906128e7565b60405180910390f35b610201610665565b60405161020e9190612a16565b60405180910390f35b610231600480360381019061022c919061222a565b6106f7565b60405161023e91906128e7565b60405180910390f35b61024f610715565b60405161025c9190612d0f565b60405180910390f35b61027f600480360381019061027a9190612135565b61071f565b60405161028c91906128e7565b60405180910390f35b6102af60048036038101906102aa91906122de565b610820565b6040516102bc9190612902565b60405180910390f35b6102df60048036038101906102da919061230b565b610840565b005b6102e96108a6565b6040516102f69190612d5c565b60405180910390f35b6103076108af565b6040516103149190612902565b60405180910390f35b6103376004803603810190610332919061230b565b6108be565b005b610353600480360381019061034e919061222a565b610941565b60405161036091906128e7565b60405180910390f35b610383600480360381019061037e919061226a565b6109ed565b60405161039091906128e7565b60405180910390f35b6103b360048036038101906103ae919061222a565b610b05565b005b6103cf60048036038101906103ca91906123f9565b610b62565b005b6103eb60048036038101906103e69190612378565b610b76565b005b610407600480360381019061040291906120c8565b610c2e565b6040516104149190612d0f565b60405180910390f35b6104376004803603810190610432919061222a565b610c76565b005b610453600480360381019061044e91906120c8565b610cfa565b6040516104609190612d0f565b60405180910390f35b610483600480360381019061047e919061230b565b610d4a565b60405161049091906128e7565b60405180910390f35b6104a1610db5565b6040516104ae9190612a16565b60405180910390f35b6104bf610e47565b6040516104cc9190612902565b60405180910390f35b6104ef60048036038101906104ea919061222a565b610e4e565b6040516104fc91906128e7565b60405180910390f35b61051f600480360381019061051a919061222a565b610f42565b60405161052c91906128e7565b60405180910390f35b61054f600480360381019061054a91906120c8565b610f60565b60405161055c91906128e7565b60405180910390f35b61057f600480360381019061057a9190612188565b610f93565b005b61058961115a565b6040516105969190612902565b60405180910390f35b6105b960048036038101906105b4919061230b565b61117e565b005b6105d560048036038101906105d091906120f5565b6111e4565b6040516105e29190612d0f565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065e575061065d8261126b565b5b9050919050565b60606007805461067490612f1b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a090612f1b565b80156106ed5780601f106106c2576101008083540402835291602001916106ed565b820191906000526020600020905b8154815290600101906020018083116106d057829003601f168201915b5050505050905090565b600061070b6107046112d5565b84846112dd565b6001905092915050565b6000600254905090565b600061072c8484846114a8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107776112d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee90612bef565b60405180910390fd5b610814856108036112d5565b858461080f9190612e1a565b6112dd565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b61085961084c83610820565b6108546112d5565b610d4a565b610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90612aaf565b60405180910390fd5b6108a28282611727565b5050565b60006012905090565b60006108b9611808565b905090565b6108c66112d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612ccf565b60405180910390fd5b61093d82826118cb565b5050565b60006109e361094e6112d5565b84846001600061095c6112d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109de9190612dc4565b6112dd565b6001905092915050565b60006109f98585610f42565b508473ffffffffffffffffffffffffffffffffffffffff16610a196112d5565b73ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610a6293929190612d2a565b60405180910390a36000853b90506000811115610af85760008690508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36610aa26112d5565b8888886040518563ffffffff1660e01b8152600401610ac494939291906128a7565b600060405180830381600087803b158015610ade57600080fd5b505af1158015610af2573d6000803e3d6000fd5b50505050505b6001915050949350505050565b610b15610b106112d5565b610f60565b610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90612b6f565b60405180910390fd5b610b5e82826119ad565b5050565b610b73610b6d6112d5565b82611b01565b50565b610b8a6000801b610b856112d5565b610d4a565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090612c8f565b60405180910390fd5b838360079190610bda929190611f10565b50818160089190610bec929190611f10565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb4660076008604051610c20929190612a38565b60405180910390a150505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610c8983610c846112d5565b6111e4565b905081811015610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612c0f565b60405180910390fd5b610ceb83610cda6112d5565b8484610ce69190612e1a565b6112dd565b610cf58383611b01565b505050565b6000610d43600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611cd5565b9050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060088054610dc490612f1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610df090612f1b565b8015610e3d5780601f10610e1257610100808354040283529160200191610e3d565b820191906000526020600020905b815481529060010190602001808311610e2057829003601f168201915b5050505050905090565b6000801b81565b60008060016000610e5d6112d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612caf565b60405180910390fd5b610f37610f256112d5565b858584610f329190612e1a565b6112dd565b600191505092915050565b6000610f56610f4f6112d5565b84846114a8565b6001905092915050565b6000610f8c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683610d4a565b9050919050565b83421115610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612b0f565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000888888611043600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611cd5565b896040516020016110599695949392919061291d565b604051602081830303815290604052805190602001209050600061107c82611ce3565b9050600061108c82878787611cfd565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390612bcf565b60405180910390fd5b611143600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611e88565b61114e8a8a8a6112dd565b50505050505050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61119761118a83610820565b6111926112d5565b610d4a565b6111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90612b8f565b60405180910390fd5b6111e082826118cb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490612c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490612aef565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161149b9190612d0f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90612c4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90612a8f565b60405180910390fd5b611593838383611e9e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090612b2f565b60405180910390fd5b81816116259190612e1a565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b59190612dc4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117199190612d0f565b60405180910390a350505050565b6117318282610d4a565b6118045760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117a96112d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561185a577f000000000000000000000000000000000000000000000000000000000000000090506118c8565b6118c57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611ea3565b90505b90565b6118d58282610d4a565b156119a95760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061194e6112d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612cef565b60405180910390fd5b611a2960008383611e9e565b8060026000828254611a3b9190612dc4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a909190612dc4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611af59190612d0f565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890612c2f565b60405180910390fd5b611b7d82600083611e9e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90612acf565b60405180910390fd5b8181611c0f9190612e1a565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611c639190612e1a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cc89190612d0f565b60405180910390a3505050565b600081600001549050919050565b6000611cf6611cf0611808565b83611edd565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90612b4f565b60405180910390fd5b601b8460ff161480611d7a5750601c8460ff16145b611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090612baf565b60405180910390fd5b600060018686868660405160008152602001604052604051611dde94939291906129d1565b6020604051602081039080840390855afa158015611e00573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390612a6f565b60405180910390fd5b80915050949350505050565b6001816000016000828254019250508190555050565b505050565b60008383834630604051602001611ebe95949392919061297e565b6040516020818303038152906040528051906020012090509392505050565b60008282604051602001611ef2929190612870565b60405160208183030381529060405280519060200120905092915050565b828054611f1c90612f1b565b90600052602060002090601f016020900481019282611f3e5760008555611f85565b82601f10611f5757803560ff1916838001178555611f85565b82800160010185558215611f85579182015b82811115611f84578235825591602001919060010190611f69565b5b509050611f929190611f96565b5090565b5b80821115611faf576000816000905550600101611f97565b5090565b600081359050611fc2816135eb565b92915050565b600081359050611fd781613602565b92915050565b600081359050611fec81613619565b92915050565b60008083601f84011261200857612007612fba565b5b8235905067ffffffffffffffff81111561202557612024612fb5565b5b60208301915083600182028301111561204157612040612fbf565b5b9250929050565b60008083601f84011261205e5761205d612fba565b5b8235905067ffffffffffffffff81111561207b5761207a612fb5565b5b60208301915083600182028301111561209757612096612fbf565b5b9250929050565b6000813590506120ad81613630565b92915050565b6000813590506120c281613647565b92915050565b6000602082840312156120de576120dd612fc9565b5b60006120ec84828501611fb3565b91505092915050565b6000806040838503121561210c5761210b612fc9565b5b600061211a85828601611fb3565b925050602061212b85828601611fb3565b9150509250929050565b60008060006060848603121561214e5761214d612fc9565b5b600061215c86828701611fb3565b935050602061216d86828701611fb3565b925050604061217e8682870161209e565b9150509250925092565b600080600080600080600060e0888a0312156121a7576121a6612fc9565b5b60006121b58a828b01611fb3565b97505060206121c68a828b01611fb3565b96505060406121d78a828b0161209e565b95505060606121e88a828b0161209e565b94505060806121f98a828b016120b3565b93505060a061220a8a828b01611fc8565b92505060c061221b8a828b01611fc8565b91505092959891949750929550565b6000806040838503121561224157612240612fc9565b5b600061224f85828601611fb3565b92505060206122608582860161209e565b9150509250929050565b6000806000806060858703121561228457612283612fc9565b5b600061229287828801611fb3565b94505060206122a38782880161209e565b935050604085013567ffffffffffffffff8111156122c4576122c3612fc4565b5b6122d087828801611ff2565b925092505092959194509250565b6000602082840312156122f4576122f3612fc9565b5b600061230284828501611fc8565b91505092915050565b6000806040838503121561232257612321612fc9565b5b600061233085828601611fc8565b925050602061234185828601611fb3565b9150509250929050565b60006020828403121561236157612360612fc9565b5b600061236f84828501611fdd565b91505092915050565b6000806000806040858703121561239257612391612fc9565b5b600085013567ffffffffffffffff8111156123b0576123af612fc4565b5b6123bc87828801612048565b9450945050602085013567ffffffffffffffff8111156123df576123de612fc4565b5b6123eb87828801612048565b925092505092959194509250565b60006020828403121561240f5761240e612fc9565b5b600061241d8482850161209e565b91505092915050565b61242f81612e4e565b82525050565b61243e81612e60565b82525050565b61244d81612e6c565b82525050565b61246461245f82612e6c565b612f4d565b82525050565b60006124768385612d97565b9350612483838584612ed9565b61248c83612fce565b840190509392505050565b60006124a282612d8c565b6124ac8185612da8565b93506124bc818560208601612ee8565b6124c581612fce565b840191505092915050565b600081546124dd81612f1b565b6124e78186612da8565b94506001821660008114612502576001811461251457612547565b60ff1983168652602086019350612547565b61251d85612d77565b60005b8381101561253f57815481890152600182019150602081019050612520565b808801955050505b50505092915050565b600061255d601883612da8565b915061256882612fdf565b602082019050919050565b6000612580602383612da8565b915061258b82613008565b604082019050919050565b60006125a3602f83612da8565b91506125ae82613057565b604082019050919050565b60006125c6602283612da8565b91506125d1826130a6565b604082019050919050565b60006125e9602283612da8565b91506125f4826130f5565b604082019050919050565b600061260c600283612db9565b915061261782613144565b600282019050919050565b600061262f601d83612da8565b915061263a8261316d565b602082019050919050565b6000612652602683612da8565b915061265d82613196565b604082019050919050565b6000612675602283612da8565b9150612680826131e5565b604082019050919050565b6000612698602283612da8565b91506126a382613234565b604082019050919050565b60006126bb603083612da8565b91506126c682613283565b604082019050919050565b60006126de602283612da8565b91506126e9826132d2565b604082019050919050565b6000612701601e83612da8565b915061270c82613321565b602082019050919050565b6000612724602883612da8565b915061272f8261334a565b604082019050919050565b6000612747602483612da8565b915061275282613399565b604082019050919050565b600061276a602183612da8565b9150612775826133e8565b604082019050919050565b600061278d602583612da8565b915061279882613437565b604082019050919050565b60006127b0602483612da8565b91506127bb82613486565b604082019050919050565b60006127d3602283612da8565b91506127de826134d5565b604082019050919050565b60006127f6602583612da8565b915061280182613524565b604082019050919050565b6000612819602f83612da8565b915061282482613573565b604082019050919050565b600061283c601f83612da8565b9150612847826135c2565b602082019050919050565b61285b81612ec2565b82525050565b61286a81612ecc565b82525050565b600061287b826125ff565b91506128878285612453565b6020820191506128978284612453565b6020820191508190509392505050565b60006060820190506128bc6000830187612426565b6128c96020830186612852565b81810360408301526128dc81848661246a565b905095945050505050565b60006020820190506128fc6000830184612435565b92915050565b60006020820190506129176000830184612444565b92915050565b600060c0820190506129326000830189612444565b61293f6020830188612426565b61294c6040830187612426565b6129596060830186612852565b6129666080830185612852565b61297360a0830184612852565b979650505050505050565b600060a0820190506129936000830188612444565b6129a06020830187612444565b6129ad6040830186612444565b6129ba6060830185612852565b6129c76080830184612426565b9695505050505050565b60006080820190506129e66000830187612444565b6129f36020830186612861565b612a006040830185612444565b612a0d6060830184612444565b95945050505050565b60006020820190508181036000830152612a308184612497565b905092915050565b60006040820190508181036000830152612a5281856124d0565b90508181036020830152612a6681846124d0565b90509392505050565b60006020820190508181036000830152612a8881612550565b9050919050565b60006020820190508181036000830152612aa881612573565b9050919050565b60006020820190508181036000830152612ac881612596565b9050919050565b60006020820190508181036000830152612ae8816125b9565b9050919050565b60006020820190508181036000830152612b08816125dc565b9050919050565b60006020820190508181036000830152612b2881612622565b9050919050565b60006020820190508181036000830152612b4881612645565b9050919050565b60006020820190508181036000830152612b6881612668565b9050919050565b60006020820190508181036000830152612b888161268b565b9050919050565b60006020820190508181036000830152612ba8816126ae565b9050919050565b60006020820190508181036000830152612bc8816126d1565b9050919050565b60006020820190508181036000830152612be8816126f4565b9050919050565b60006020820190508181036000830152612c0881612717565b9050919050565b60006020820190508181036000830152612c288161273a565b9050919050565b60006020820190508181036000830152612c488161275d565b9050919050565b60006020820190508181036000830152612c6881612780565b9050919050565b60006020820190508181036000830152612c88816127a3565b9050919050565b60006020820190508181036000830152612ca8816127c6565b9050919050565b60006020820190508181036000830152612cc8816127e9565b9050919050565b60006020820190508181036000830152612ce88161280c565b9050919050565b60006020820190508181036000830152612d088161282f565b9050919050565b6000602082019050612d246000830184612852565b92915050565b6000604082019050612d3f6000830186612852565b8181036020830152612d5281848661246a565b9050949350505050565b6000602082019050612d716000830184612861565b92915050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612dcf82612ec2565b9150612dda83612ec2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e0f57612e0e612f57565b5b828201905092915050565b6000612e2582612ec2565b9150612e3083612ec2565b925082821015612e4357612e42612f57565b5b828203905092915050565b6000612e5982612ea2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612f06578082015181840152602081019050612eeb565b83811115612f15576000848401525b50505050565b60006002820490506001821680612f3357607f821691505b60208210811415612f4757612f46612f86565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e207369676e6572206973206e6f742061206d696e7460008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e207369676e6572206973206e6f7420616e2061646d60008201527f696e000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6135f481612e4e565b81146135ff57600080fd5b50565b61360b81612e6c565b811461361657600080fd5b50565b61362281612e76565b811461362d57600080fd5b50565b61363981612ec2565b811461364457600080fd5b50565b61365081612ecc565b811461365b57600080fd5b5056fea26469706673582212207575873777af048c081d0e4286d7edcec2b516036f5d1588d0183b4cff00672764736f6c63430008060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80634eee966f116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610565578063d539139314610581578063d547741f1461059f578063dd62ed3e146105bb576101c4565b8063a457c2d7146104d5578063a9059cbb14610505578063aa271e1a14610535576101c4565b80637ecebe00116100d35780637ecebe001461043957806391d148541461046957806395d89b4114610499578063a217fddf146104b7576101c4565b80634eee966f146103d157806370a08231146103ed57806379cc67901461041d576101c4565b8063313ce56711610166578063395093511161014057806339509351146103395780634000aea01461036957806340c10f191461039957806342966c68146103b5576101c4565b8063313ce567146102e15780633644e515146102ff57806336568abe1461031d576101c4565b806318160ddd116101a257806318160ddd1461024757806323b872dd14610265578063248a9ca3146102955780632f2ff15d146102c5576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de919061234b565b6105eb565b6040516101f091906128e7565b60405180910390f35b610201610665565b60405161020e9190612a16565b60405180910390f35b610231600480360381019061022c919061222a565b6106f7565b60405161023e91906128e7565b60405180910390f35b61024f610715565b60405161025c9190612d0f565b60405180910390f35b61027f600480360381019061027a9190612135565b61071f565b60405161028c91906128e7565b60405180910390f35b6102af60048036038101906102aa91906122de565b610820565b6040516102bc9190612902565b60405180910390f35b6102df60048036038101906102da919061230b565b610840565b005b6102e96108a6565b6040516102f69190612d5c565b60405180910390f35b6103076108af565b6040516103149190612902565b60405180910390f35b6103376004803603810190610332919061230b565b6108be565b005b610353600480360381019061034e919061222a565b610941565b60405161036091906128e7565b60405180910390f35b610383600480360381019061037e919061226a565b6109ed565b60405161039091906128e7565b60405180910390f35b6103b360048036038101906103ae919061222a565b610b05565b005b6103cf60048036038101906103ca91906123f9565b610b62565b005b6103eb60048036038101906103e69190612378565b610b76565b005b610407600480360381019061040291906120c8565b610c2e565b6040516104149190612d0f565b60405180910390f35b6104376004803603810190610432919061222a565b610c76565b005b610453600480360381019061044e91906120c8565b610cfa565b6040516104609190612d0f565b60405180910390f35b610483600480360381019061047e919061230b565b610d4a565b60405161049091906128e7565b60405180910390f35b6104a1610db5565b6040516104ae9190612a16565b60405180910390f35b6104bf610e47565b6040516104cc9190612902565b60405180910390f35b6104ef60048036038101906104ea919061222a565b610e4e565b6040516104fc91906128e7565b60405180910390f35b61051f600480360381019061051a919061222a565b610f42565b60405161052c91906128e7565b60405180910390f35b61054f600480360381019061054a91906120c8565b610f60565b60405161055c91906128e7565b60405180910390f35b61057f600480360381019061057a9190612188565b610f93565b005b61058961115a565b6040516105969190612902565b60405180910390f35b6105b960048036038101906105b4919061230b565b61117e565b005b6105d560048036038101906105d091906120f5565b6111e4565b6040516105e29190612d0f565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065e575061065d8261126b565b5b9050919050565b60606007805461067490612f1b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a090612f1b565b80156106ed5780601f106106c2576101008083540402835291602001916106ed565b820191906000526020600020905b8154815290600101906020018083116106d057829003601f168201915b5050505050905090565b600061070b6107046112d5565b84846112dd565b6001905092915050565b6000600254905090565b600061072c8484846114a8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107776112d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee90612bef565b60405180910390fd5b610814856108036112d5565b858461080f9190612e1a565b6112dd565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b61085961084c83610820565b6108546112d5565b610d4a565b610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90612aaf565b60405180910390fd5b6108a28282611727565b5050565b60006012905090565b60006108b9611808565b905090565b6108c66112d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612ccf565b60405180910390fd5b61093d82826118cb565b5050565b60006109e361094e6112d5565b84846001600061095c6112d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109de9190612dc4565b6112dd565b6001905092915050565b60006109f98585610f42565b508473ffffffffffffffffffffffffffffffffffffffff16610a196112d5565b73ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610a6293929190612d2a565b60405180910390a36000853b90506000811115610af85760008690508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36610aa26112d5565b8888886040518563ffffffff1660e01b8152600401610ac494939291906128a7565b600060405180830381600087803b158015610ade57600080fd5b505af1158015610af2573d6000803e3d6000fd5b50505050505b6001915050949350505050565b610b15610b106112d5565b610f60565b610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90612b6f565b60405180910390fd5b610b5e82826119ad565b5050565b610b73610b6d6112d5565b82611b01565b50565b610b8a6000801b610b856112d5565b610d4a565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090612c8f565b60405180910390fd5b838360079190610bda929190611f10565b50818160089190610bec929190611f10565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb4660076008604051610c20929190612a38565b60405180910390a150505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610c8983610c846112d5565b6111e4565b905081811015610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612c0f565b60405180910390fd5b610ceb83610cda6112d5565b8484610ce69190612e1a565b6112dd565b610cf58383611b01565b505050565b6000610d43600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611cd5565b9050919050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060088054610dc490612f1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610df090612f1b565b8015610e3d5780601f10610e1257610100808354040283529160200191610e3d565b820191906000526020600020905b815481529060010190602001808311610e2057829003601f168201915b5050505050905090565b6000801b81565b60008060016000610e5d6112d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612caf565b60405180910390fd5b610f37610f256112d5565b858584610f329190612e1a565b6112dd565b600191505092915050565b6000610f56610f4f6112d5565b84846114a8565b6001905092915050565b6000610f8c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683610d4a565b9050919050565b83421115610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612b0f565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611043600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611cd5565b896040516020016110599695949392919061291d565b604051602081830303815290604052805190602001209050600061107c82611ce3565b9050600061108c82878787611cfd565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390612bcf565b60405180910390fd5b611143600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611e88565b61114e8a8a8a6112dd565b50505050505050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61119761118a83610820565b6111926112d5565b610d4a565b6111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90612b8f565b60405180910390fd5b6111e082826118cb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490612c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490612aef565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161149b9190612d0f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90612c4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90612a8f565b60405180910390fd5b611593838383611e9e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090612b2f565b60405180910390fd5b81816116259190612e1a565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b59190612dc4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117199190612d0f565b60405180910390a350505050565b6117318282610d4a565b6118045760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117a96112d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60007f000000000000000000000000000000000000000000000000000000000000000146141561185a577fb9842fd8e5d534a9ec888e765a1504f110412c4d1371bf36a86e86d7a0d4bb8d90506118c8565b6118c57f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fbc9211a51ce2feced0d2078c3a27156fd77cb553512b626d67d54095b8363b027fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611ea3565b90505b90565b6118d58282610d4a565b156119a95760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061194e6112d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612cef565b60405180910390fd5b611a2960008383611e9e565b8060026000828254611a3b9190612dc4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a909190612dc4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611af59190612d0f565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890612c2f565b60405180910390fd5b611b7d82600083611e9e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90612acf565b60405180910390fd5b8181611c0f9190612e1a565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611c639190612e1a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cc89190612d0f565b60405180910390a3505050565b600081600001549050919050565b6000611cf6611cf0611808565b83611edd565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90612b4f565b60405180910390fd5b601b8460ff161480611d7a5750601c8460ff16145b611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090612baf565b60405180910390fd5b600060018686868660405160008152602001604052604051611dde94939291906129d1565b6020604051602081039080840390855afa158015611e00573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390612a6f565b60405180910390fd5b80915050949350505050565b6001816000016000828254019250508190555050565b505050565b60008383834630604051602001611ebe95949392919061297e565b6040516020818303038152906040528051906020012090509392505050565b60008282604051602001611ef2929190612870565b60405160208183030381529060405280519060200120905092915050565b828054611f1c90612f1b565b90600052602060002090601f016020900481019282611f3e5760008555611f85565b82601f10611f5757803560ff1916838001178555611f85565b82800160010185558215611f85579182015b82811115611f84578235825591602001919060010190611f69565b5b509050611f929190611f96565b5090565b5b80821115611faf576000816000905550600101611f97565b5090565b600081359050611fc2816135eb565b92915050565b600081359050611fd781613602565b92915050565b600081359050611fec81613619565b92915050565b60008083601f84011261200857612007612fba565b5b8235905067ffffffffffffffff81111561202557612024612fb5565b5b60208301915083600182028301111561204157612040612fbf565b5b9250929050565b60008083601f84011261205e5761205d612fba565b5b8235905067ffffffffffffffff81111561207b5761207a612fb5565b5b60208301915083600182028301111561209757612096612fbf565b5b9250929050565b6000813590506120ad81613630565b92915050565b6000813590506120c281613647565b92915050565b6000602082840312156120de576120dd612fc9565b5b60006120ec84828501611fb3565b91505092915050565b6000806040838503121561210c5761210b612fc9565b5b600061211a85828601611fb3565b925050602061212b85828601611fb3565b9150509250929050565b60008060006060848603121561214e5761214d612fc9565b5b600061215c86828701611fb3565b935050602061216d86828701611fb3565b925050604061217e8682870161209e565b9150509250925092565b600080600080600080600060e0888a0312156121a7576121a6612fc9565b5b60006121b58a828b01611fb3565b97505060206121c68a828b01611fb3565b96505060406121d78a828b0161209e565b95505060606121e88a828b0161209e565b94505060806121f98a828b016120b3565b93505060a061220a8a828b01611fc8565b92505060c061221b8a828b01611fc8565b91505092959891949750929550565b6000806040838503121561224157612240612fc9565b5b600061224f85828601611fb3565b92505060206122608582860161209e565b9150509250929050565b6000806000806060858703121561228457612283612fc9565b5b600061229287828801611fb3565b94505060206122a38782880161209e565b935050604085013567ffffffffffffffff8111156122c4576122c3612fc4565b5b6122d087828801611ff2565b925092505092959194509250565b6000602082840312156122f4576122f3612fc9565b5b600061230284828501611fc8565b91505092915050565b6000806040838503121561232257612321612fc9565b5b600061233085828601611fc8565b925050602061234185828601611fb3565b9150509250929050565b60006020828403121561236157612360612fc9565b5b600061236f84828501611fdd565b91505092915050565b6000806000806040858703121561239257612391612fc9565b5b600085013567ffffffffffffffff8111156123b0576123af612fc4565b5b6123bc87828801612048565b9450945050602085013567ffffffffffffffff8111156123df576123de612fc4565b5b6123eb87828801612048565b925092505092959194509250565b60006020828403121561240f5761240e612fc9565b5b600061241d8482850161209e565b91505092915050565b61242f81612e4e565b82525050565b61243e81612e60565b82525050565b61244d81612e6c565b82525050565b61246461245f82612e6c565b612f4d565b82525050565b60006124768385612d97565b9350612483838584612ed9565b61248c83612fce565b840190509392505050565b60006124a282612d8c565b6124ac8185612da8565b93506124bc818560208601612ee8565b6124c581612fce565b840191505092915050565b600081546124dd81612f1b565b6124e78186612da8565b94506001821660008114612502576001811461251457612547565b60ff1983168652602086019350612547565b61251d85612d77565b60005b8381101561253f57815481890152600182019150602081019050612520565b808801955050505b50505092915050565b600061255d601883612da8565b915061256882612fdf565b602082019050919050565b6000612580602383612da8565b915061258b82613008565b604082019050919050565b60006125a3602f83612da8565b91506125ae82613057565b604082019050919050565b60006125c6602283612da8565b91506125d1826130a6565b604082019050919050565b60006125e9602283612da8565b91506125f4826130f5565b604082019050919050565b600061260c600283612db9565b915061261782613144565b600282019050919050565b600061262f601d83612da8565b915061263a8261316d565b602082019050919050565b6000612652602683612da8565b915061265d82613196565b604082019050919050565b6000612675602283612da8565b9150612680826131e5565b604082019050919050565b6000612698602283612da8565b91506126a382613234565b604082019050919050565b60006126bb603083612da8565b91506126c682613283565b604082019050919050565b60006126de602283612da8565b91506126e9826132d2565b604082019050919050565b6000612701601e83612da8565b915061270c82613321565b602082019050919050565b6000612724602883612da8565b915061272f8261334a565b604082019050919050565b6000612747602483612da8565b915061275282613399565b604082019050919050565b600061276a602183612da8565b9150612775826133e8565b604082019050919050565b600061278d602583612da8565b915061279882613437565b604082019050919050565b60006127b0602483612da8565b91506127bb82613486565b604082019050919050565b60006127d3602283612da8565b91506127de826134d5565b604082019050919050565b60006127f6602583612da8565b915061280182613524565b604082019050919050565b6000612819602f83612da8565b915061282482613573565b604082019050919050565b600061283c601f83612da8565b9150612847826135c2565b602082019050919050565b61285b81612ec2565b82525050565b61286a81612ecc565b82525050565b600061287b826125ff565b91506128878285612453565b6020820191506128978284612453565b6020820191508190509392505050565b60006060820190506128bc6000830187612426565b6128c96020830186612852565b81810360408301526128dc81848661246a565b905095945050505050565b60006020820190506128fc6000830184612435565b92915050565b60006020820190506129176000830184612444565b92915050565b600060c0820190506129326000830189612444565b61293f6020830188612426565b61294c6040830187612426565b6129596060830186612852565b6129666080830185612852565b61297360a0830184612852565b979650505050505050565b600060a0820190506129936000830188612444565b6129a06020830187612444565b6129ad6040830186612444565b6129ba6060830185612852565b6129c76080830184612426565b9695505050505050565b60006080820190506129e66000830187612444565b6129f36020830186612861565b612a006040830185612444565b612a0d6060830184612444565b95945050505050565b60006020820190508181036000830152612a308184612497565b905092915050565b60006040820190508181036000830152612a5281856124d0565b90508181036020830152612a6681846124d0565b90509392505050565b60006020820190508181036000830152612a8881612550565b9050919050565b60006020820190508181036000830152612aa881612573565b9050919050565b60006020820190508181036000830152612ac881612596565b9050919050565b60006020820190508181036000830152612ae8816125b9565b9050919050565b60006020820190508181036000830152612b08816125dc565b9050919050565b60006020820190508181036000830152612b2881612622565b9050919050565b60006020820190508181036000830152612b4881612645565b9050919050565b60006020820190508181036000830152612b6881612668565b9050919050565b60006020820190508181036000830152612b888161268b565b9050919050565b60006020820190508181036000830152612ba8816126ae565b9050919050565b60006020820190508181036000830152612bc8816126d1565b9050919050565b60006020820190508181036000830152612be8816126f4565b9050919050565b60006020820190508181036000830152612c0881612717565b9050919050565b60006020820190508181036000830152612c288161273a565b9050919050565b60006020820190508181036000830152612c488161275d565b9050919050565b60006020820190508181036000830152612c6881612780565b9050919050565b60006020820190508181036000830152612c88816127a3565b9050919050565b60006020820190508181036000830152612ca8816127c6565b9050919050565b60006020820190508181036000830152612cc8816127e9565b9050919050565b60006020820190508181036000830152612ce88161280c565b9050919050565b60006020820190508181036000830152612d088161282f565b9050919050565b6000602082019050612d246000830184612852565b92915050565b6000604082019050612d3f6000830186612852565b8181036020830152612d5281848661246a565b9050949350505050565b6000602082019050612d716000830184612861565b92915050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612dcf82612ec2565b9150612dda83612ec2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e0f57612e0e612f57565b5b828201905092915050565b6000612e2582612ec2565b9150612e3083612ec2565b925082821015612e4357612e42612f57565b5b828203905092915050565b6000612e5982612ea2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612f06578082015181840152602081019050612eeb565b83811115612f15576000848401525b50505050565b60006002820490506001821680612f3357607f821691505b60208210811415612f4757612f46612f86565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e207369676e6572206973206e6f742061206d696e7460008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e207369676e6572206973206e6f7420616e2061646d60008201527f696e000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6135f481612e4e565b81146135ff57600080fd5b50565b61360b81612e6c565b811461361657600080fd5b50565b61362281612e76565b811461362d57600080fd5b50565b61363981612ec2565b811461364457600080fd5b50565b61365081612ecc565b811461365b57600080fd5b5056fea26469706673582212207575873777af048c081d0e4286d7edcec2b516036f5d1588d0183b4cff00672764736f6c63430008060033

Deployed Bytecode Sourcemap

41242:3159:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6568:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44099:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17491:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16444:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18142:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7205:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16295:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40345:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8809:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18973:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43002:574;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42251:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24569:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43723:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16615:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24979:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40095:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6877:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44302:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5333:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19691:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16955:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41920:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39213:816;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41644:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8067:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17193:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6568:217;6653:4;6692:32;6677:47;;;:11;:47;;;;:100;;;;6741:36;6765:11;6741:23;:36::i;:::-;6677:100;6670:107;;6568:217;;;:::o;44099:92::-;44145:13;44178:5;44171:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44099:92;:::o;17491:169::-;17574:4;17591:39;17600:12;:10;:12::i;:::-;17614:7;17623:6;17591:8;:39::i;:::-;17648:4;17641:11;;17491:169;;;;:::o;16444:108::-;16505:7;16532:12;;16525:19;;16444:108;:::o;18142:422::-;18248:4;18265:36;18275:6;18283:9;18294:6;18265:9;:36::i;:::-;18314:24;18341:11;:19;18353:6;18341:19;;;;;;;;;;;;;;;:33;18361:12;:10;:12::i;:::-;18341:33;;;;;;;;;;;;;;;;18314:60;;18413:6;18393:16;:26;;18385:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18475:57;18484:6;18492:12;:10;:12::i;:::-;18525:6;18506:16;:25;;;;:::i;:::-;18475:8;:57::i;:::-;18552:4;18545:11;;;18142:422;;;;;:::o;7205:123::-;7271:7;7298:6;:12;7305:4;7298:12;;;;;;;;;;;:22;;;7291:29;;7205:123;;;:::o;7590:232::-;7683:41;7691:18;7704:4;7691:12;:18::i;:::-;7711:12;:10;:12::i;:::-;7683:7;:41::i;:::-;7675:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;7789:25;7800:4;7806:7;7789:10;:25::i;:::-;7590:232;;:::o;16295:84::-;16344:5;16369:2;16362:9;;16295:84;:::o;40345:115::-;40405:7;40432:20;:18;:20::i;:::-;40425:27;;40345:115;:::o;8809:218::-;8916:12;:10;:12::i;:::-;8905:23;;:7;:23;;;8897:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;8993:26;9005:4;9011:7;8993:11;:26::i;:::-;8809:218;;:::o;18973:215::-;19061:4;19078:80;19087:12;:10;:12::i;:::-;19101:7;19147:10;19110:11;:25;19122:12;:10;:12::i;:::-;19110:25;;;;;;;;;;;;;;;:34;19136:7;19110:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19078:8;:80::i;:::-;19176:4;19169:11;;18973:215;;;;:::o;43002:574::-;43137:12;43162:27;43177:3;43182:6;43162:14;:27::i;:::-;;43228:3;43205:42;;43214:12;:10;:12::i;:::-;43205:42;;;43233:6;43241:5;;43205:42;;;;;;;;:::i;:::-;;;;;;;;43260:25;43353:3;43341:16;43320:37;;43402:1;43382:17;:21;43378:169;;;43420:24;43463:3;43420:47;;43482:8;:24;;;43507:12;:10;:12::i;:::-;43521:6;43529:5;;43482:53;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43405:142;43378:169;43564:4;43557:11;;;43002:574;;;;;;:::o;42251:190::-;42344:22;42353:12;:10;:12::i;:::-;42344:8;:22::i;:::-;42336:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42416:17;42422:2;42426:6;42416:5;:17::i;:::-;42251:190;;:::o;24569:91::-;24625:27;24631:12;:10;:12::i;:::-;24645:6;24625:5;:27::i;:::-;24569:91;:::o;43723:306::-;43830:41;5378:4;43838:18;;43858:12;:10;:12::i;:::-;43830:7;:41::i;:::-;43822:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;43929:7;;43921:5;:15;;;;;;;:::i;:::-;;43957:9;;43947:7;:19;;;;;;;:::i;:::-;;43982:39;44006:5;44013:7;43982:39;;;;;;;:::i;:::-;;;;;;;;43723:306;;;;:::o;16615:127::-;16689:7;16716:9;:18;16726:7;16716:18;;;;;;;;;;;;;;;;16709:25;;16615:127;;;:::o;24979:332::-;25056:24;25083:32;25093:7;25102:12;:10;:12::i;:::-;25083:9;:32::i;:::-;25056:59;;25154:6;25134:16;:26;;25126:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25212:58;25221:7;25230:12;:10;:12::i;:::-;25263:6;25244:16;:25;;;;:::i;:::-;25212:8;:58::i;:::-;25281:22;25287:7;25296:6;25281:5;:22::i;:::-;25045:266;24979:332;;:::o;40095:120::-;40156:7;40183:24;:7;:14;40191:5;40183:14;;;;;;;;;;;;;;;:22;:24::i;:::-;40176:31;;40095:120;;;:::o;6877:139::-;6955:4;6979:6;:12;6986:4;6979:12;;;;;;;;;;;:20;;:29;7000:7;6979:29;;;;;;;;;;;;;;;;;;;;;;;;;6972:36;;6877:139;;;;:::o;44302:96::-;44350:13;44383:7;44376:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44302:96;:::o;5333:49::-;5378:4;5333:49;;;:::o;19691:377::-;19784:4;19801:24;19828:11;:25;19840:12;:10;:12::i;:::-;19828:25;;;;;;;;;;;;;;;:34;19854:7;19828:34;;;;;;;;;;;;;;;;19801:61;;19901:15;19881:16;:35;;19873:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19969:67;19978:12;:10;:12::i;:::-;19992:7;20020:15;20001:16;:34;;;;:::i;:::-;19969:8;:67::i;:::-;20056:4;20049:11;;;19691:377;;;;:::o;16955:175::-;17041:4;17058:42;17068:12;:10;:12::i;:::-;17082:9;17093:6;17058:9;:42::i;:::-;17118:4;17111:11;;16955:175;;;;:::o;41920:131::-;41991:4;42015:28;41682:24;42036:6;42015:7;:28::i;:::-;42008:35;;41920:131;;;:::o;39213:816::-;39442:8;39423:15;:27;;39415:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39497:18;39571:16;39606:5;39630:7;39656:5;39680:24;:7;:14;39688:5;39680:14;;;;;;;;;;;;;;;:22;:24::i;:::-;39723:8;39542:204;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39518:239;;;;;;39497:260;;39770:12;39785:28;39802:10;39785:16;:28::i;:::-;39770:43;;39826:14;39843:28;39857:4;39863:1;39866;39869;39843:13;:28::i;:::-;39826:45;;39900:5;39890:15;;:6;:15;;;39882:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39953:26;:7;:14;39961:5;39953:14;;;;;;;;;;;;;;;:24;:26::i;:::-;39990:31;39999:5;40006:7;40015:5;39990:8;:31::i;:::-;39349:680;;;39213:816;;;;;;;:::o;41644:62::-;41682:24;41644:62;:::o;8067:235::-;8161:41;8169:18;8182:4;8169:12;:18::i;:::-;8189:12;:10;:12::i;:::-;8161:7;:41::i;:::-;8153:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;8268:26;8280:4;8286:7;8268:11;:26::i;:::-;8067:235;;:::o;17193:151::-;17282:7;17309:11;:18;17321:5;17309:18;;;;;;;;;;;;;;;:27;17328:7;17309:27;;;;;;;;;;;;;;;;17302:34;;17193:151;;;;:::o;2804:157::-;2889:4;2928:25;2913:40;;;:11;:40;;;;2906:47;;2804:157;;;:::o;841:98::-;894:7;921:10;914:17;;841:98;:::o;23047:346::-;23166:1;23149:19;;:5;:19;;;;23141:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23247:1;23228:21;;:7;:21;;;;23220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:6;23301:11;:18;23313:5;23301:18;;;;;;;;;;;;;;;:27;23320:7;23301:27;;;;;;;;;;;;;;;:36;;;;23369:7;23353:32;;23362:5;23353:32;;;23378:6;23353:32;;;;;;:::i;:::-;;;;;;;;23047:346;;;:::o;20558:604::-;20682:1;20664:20;;:6;:20;;;;20656:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20766:1;20745:23;;:9;:23;;;;20737:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20821:47;20842:6;20850:9;20861:6;20821:20;:47::i;:::-;20881:21;20905:9;:17;20915:6;20905:17;;;;;;;;;;;;;;;;20881:41;;20958:6;20941:13;:23;;20933:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21054:6;21038:13;:22;;;;:::i;:::-;21018:9;:17;21028:6;21018:17;;;;;;;;;;;;;;;:42;;;;21095:6;21071:9;:20;21081:9;21071:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;21136:9;21119:35;;21128:6;21119:35;;;21147:6;21119:35;;;;;;:::i;:::-;;;;;;;;20645:517;20558:604;;;:::o;10057:229::-;10132:22;10140:4;10146:7;10132;:22::i;:::-;10127:152;;10203:4;10171:6;:12;10178:4;10171:12;;;;;;;;;;;:20;;:29;10192:7;10171:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;10254:12;:10;:12::i;:::-;10227:40;;10245:7;10227:40;;10239:4;10227:40;;;;;;;;;;10127:152;10057:229;;:::o;35107:281::-;35160:7;35201:16;35184:13;:33;35180:201;;;35241:24;35234:31;;;;35180:201;35305:64;35327:10;35339:12;35353:15;35305:21;:64::i;:::-;35298:71;;35107:281;;:::o;10294:230::-;10369:22;10377:4;10383:7;10369;:22::i;:::-;10365:152;;;10440:5;10408:6;:12;10415:4;10408:12;;;;;;;;;;;:20;;:29;10429:7;10408:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;10492:12;:10;:12::i;:::-;10465:40;;10483:7;10465:40;;10477:4;10465:40;;;;;;;;;;10365:152;10294:230;;:::o;21444:338::-;21547:1;21528:21;;:7;:21;;;;21520:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21598:49;21627:1;21631:7;21640:6;21598:20;:49::i;:::-;21676:6;21660:12;;:22;;;;;;;:::i;:::-;;;;;;;;21715:6;21693:9;:18;21703:7;21693:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21758:7;21737:37;;21754:1;21737:37;;;21767:6;21737:37;;;;;;:::i;:::-;;;;;;;;21444:338;;:::o;22115:494::-;22218:1;22199:21;;:7;:21;;;;22191:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22271:49;22292:7;22309:1;22313:6;22271:20;:49::i;:::-;22333:22;22358:9;:18;22368:7;22358:18;;;;;;;;;;;;;;;;22333:43;;22413:6;22395:14;:24;;22387:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22507:6;22490:14;:23;;;;:::i;:::-;22469:9;:18;22479:7;22469:18;;;;;;;;;;;;;;;:44;;;;22540:6;22524:12;;:22;;;;;;;:::i;:::-;;;;;;;;22590:1;22564:37;;22573:7;22564:37;;;22594:6;22564:37;;;;;;:::i;:::-;;;;;;;;22180:429;22115:494;;:::o;37351:114::-;37416:7;37443;:14;;;37436:21;;37351:114;;;:::o;36375:167::-;36452:7;36479:55;36501:20;:18;:20::i;:::-;36523:10;36479:21;:55::i;:::-;36472:62;;36375:167;;;:::o;29522:1432::-;29607:7;30532:66;30526:1;30518:10;;:80;;30510:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;30661:2;30656:1;:7;;;:18;;;;30672:2;30667:1;:7;;;30656:18;30648:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30811:14;30828:24;30838:4;30844:1;30847;30850;30828:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30811:41;;30889:1;30871:20;;:6;:20;;;;30863:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30940:6;30933:13;;;29522:1432;;;;;;:::o;37473:127::-;37580:1;37562:7;:14;;;:19;;;;;;;;;;;37473:127;:::o;23996:92::-;;;;:::o;35396:337::-;35498:7;35578:8;35605:4;35628:7;35654:13;35694:4;35549:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35525:200;;;;;;35518:207;;35396:337;;;;;:::o;31873:196::-;31966:7;32032:15;32049:10;32003:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31993:68;;;;;;31986:75;;31873:196;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;453:552::-;510:8;520:6;570:3;563:4;555:6;551:17;547:27;537:2;;578:79;;:::i;:::-;537:2;691:6;678:20;668:30;;721:18;713:6;710:30;707:2;;;743:79;;:::i;:::-;707:2;857:4;849:6;845:17;833:29;;911:3;903:4;895:6;891:17;881:8;877:32;874:41;871:2;;;918:79;;:::i;:::-;871:2;527:478;;;;;:::o;1025:553::-;1083:8;1093:6;1143:3;1136:4;1128:6;1124:17;1120:27;1110:2;;1151:79;;:::i;:::-;1110:2;1264:6;1251:20;1241:30;;1294:18;1286:6;1283:30;1280:2;;;1316:79;;:::i;:::-;1280:2;1430:4;1422:6;1418:17;1406:29;;1484:3;1476:4;1468:6;1464:17;1454:8;1450:32;1447:41;1444:2;;;1491:79;;:::i;:::-;1444:2;1100:478;;;;;:::o;1584:139::-;1630:5;1668:6;1655:20;1646:29;;1684:33;1711:5;1684:33;:::i;:::-;1636:87;;;;:::o;1729:135::-;1773:5;1811:6;1798:20;1789:29;;1827:31;1852:5;1827:31;:::i;:::-;1779:85;;;;:::o;1870:329::-;1929:6;1978:2;1966:9;1957:7;1953:23;1949:32;1946:2;;;1984:79;;:::i;:::-;1946:2;2104:1;2129:53;2174:7;2165:6;2154:9;2150:22;2129:53;:::i;:::-;2119:63;;2075:117;1936:263;;;;:::o;2205:474::-;2273:6;2281;2330:2;2318:9;2309:7;2305:23;2301:32;2298:2;;;2336:79;;:::i;:::-;2298:2;2456:1;2481:53;2526:7;2517:6;2506:9;2502:22;2481:53;:::i;:::-;2471:63;;2427:117;2583:2;2609:53;2654:7;2645:6;2634:9;2630:22;2609:53;:::i;:::-;2599:63;;2554:118;2288:391;;;;;:::o;2685:619::-;2762:6;2770;2778;2827:2;2815:9;2806:7;2802:23;2798:32;2795:2;;;2833:79;;:::i;:::-;2795:2;2953:1;2978:53;3023:7;3014:6;3003:9;2999:22;2978:53;:::i;:::-;2968:63;;2924:117;3080:2;3106:53;3151:7;3142:6;3131:9;3127:22;3106:53;:::i;:::-;3096:63;;3051:118;3208:2;3234:53;3279:7;3270:6;3259:9;3255:22;3234:53;:::i;:::-;3224:63;;3179:118;2785:519;;;;;:::o;3310:1199::-;3421:6;3429;3437;3445;3453;3461;3469;3518:3;3506:9;3497:7;3493:23;3489:33;3486:2;;;3525:79;;:::i;:::-;3486:2;3645:1;3670:53;3715:7;3706:6;3695:9;3691:22;3670:53;:::i;:::-;3660:63;;3616:117;3772:2;3798:53;3843:7;3834:6;3823:9;3819:22;3798:53;:::i;:::-;3788:63;;3743:118;3900:2;3926:53;3971:7;3962:6;3951:9;3947:22;3926:53;:::i;:::-;3916:63;;3871:118;4028:2;4054:53;4099:7;4090:6;4079:9;4075:22;4054:53;:::i;:::-;4044:63;;3999:118;4156:3;4183:51;4226:7;4217:6;4206:9;4202:22;4183:51;:::i;:::-;4173:61;;4127:117;4283:3;4310:53;4355:7;4346:6;4335:9;4331:22;4310:53;:::i;:::-;4300:63;;4254:119;4412:3;4439:53;4484:7;4475:6;4464:9;4460:22;4439:53;:::i;:::-;4429:63;;4383:119;3476:1033;;;;;;;;;;:::o;4515:474::-;4583:6;4591;4640:2;4628:9;4619:7;4615:23;4611:32;4608:2;;;4646:79;;:::i;:::-;4608:2;4766:1;4791:53;4836:7;4827:6;4816:9;4812:22;4791:53;:::i;:::-;4781:63;;4737:117;4893:2;4919:53;4964:7;4955:6;4944:9;4940:22;4919:53;:::i;:::-;4909:63;;4864:118;4598:391;;;;;:::o;4995:817::-;5083:6;5091;5099;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:2;;;5162:79;;:::i;:::-;5124:2;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5565:2;5554:9;5550:18;5537:32;5596:18;5588:6;5585:30;5582:2;;;5618:79;;:::i;:::-;5582:2;5731:64;5787:7;5778:6;5767:9;5763:22;5731:64;:::i;:::-;5713:82;;;;5508:297;5114:698;;;;;;;:::o;5818:329::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5932:79;;:::i;:::-;5894:2;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;5884:263;;;;:::o;6153:474::-;6221:6;6229;6278:2;6266:9;6257:7;6253:23;6249:32;6246:2;;;6284:79;;:::i;:::-;6246:2;6404:1;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6375:117;6531:2;6557:53;6602:7;6593:6;6582:9;6578:22;6557:53;:::i;:::-;6547:63;;6502:118;6236:391;;;;;:::o;6633:327::-;6691:6;6740:2;6728:9;6719:7;6715:23;6711:32;6708:2;;;6746:79;;:::i;:::-;6708:2;6866:1;6891:52;6935:7;6926:6;6915:9;6911:22;6891:52;:::i;:::-;6881:62;;6837:116;6698:262;;;;:::o;6966:874::-;7058:6;7066;7074;7082;7131:2;7119:9;7110:7;7106:23;7102:32;7099:2;;;7137:79;;:::i;:::-;7099:2;7285:1;7274:9;7270:17;7257:31;7315:18;7307:6;7304:30;7301:2;;;7337:79;;:::i;:::-;7301:2;7450:65;7507:7;7498:6;7487:9;7483:22;7450:65;:::i;:::-;7432:83;;;;7228:297;7592:2;7581:9;7577:18;7564:32;7623:18;7615:6;7612:30;7609:2;;;7645:79;;:::i;:::-;7609:2;7758:65;7815:7;7806:6;7795:9;7791:22;7758:65;:::i;:::-;7740:83;;;;7535:298;7089:751;;;;;;;:::o;7846:329::-;7905:6;7954:2;7942:9;7933:7;7929:23;7925:32;7922:2;;;7960:79;;:::i;:::-;7922:2;8080:1;8105:53;8150:7;8141:6;8130:9;8126:22;8105:53;:::i;:::-;8095:63;;8051:117;7912:263;;;;:::o;8181:118::-;8268:24;8286:5;8268:24;:::i;:::-;8263:3;8256:37;8246:53;;:::o;8305:109::-;8386:21;8401:5;8386:21;:::i;:::-;8381:3;8374:34;8364:50;;:::o;8420:118::-;8507:24;8525:5;8507:24;:::i;:::-;8502:3;8495:37;8485:53;;:::o;8544:157::-;8649:45;8669:24;8687:5;8669:24;:::i;:::-;8649:45;:::i;:::-;8644:3;8637:58;8627:74;;:::o;8729:301::-;8825:3;8846:70;8909:6;8904:3;8846:70;:::i;:::-;8839:77;;8926:43;8962:6;8957:3;8950:5;8926:43;:::i;:::-;8994:29;9016:6;8994:29;:::i;:::-;8989:3;8985:39;8978:46;;8829:201;;;;;:::o;9036:364::-;9124:3;9152:39;9185:5;9152:39;:::i;:::-;9207:71;9271:6;9266:3;9207:71;:::i;:::-;9200:78;;9287:52;9332:6;9327:3;9320:4;9313:5;9309:16;9287:52;:::i;:::-;9364:29;9386:6;9364:29;:::i;:::-;9359:3;9355:39;9348:46;;9128:272;;;;;:::o;9430:802::-;9515:3;9552:5;9546:12;9581:36;9607:9;9581:36;:::i;:::-;9633:71;9697:6;9692:3;9633:71;:::i;:::-;9626:78;;9735:1;9724:9;9720:17;9751:1;9746:135;;;;9895:1;9890:336;;;;9713:513;;9746:135;9830:4;9826:9;9815;9811:25;9806:3;9799:38;9866:4;9861:3;9857:14;9850:21;;9746:135;;9890:336;9957:38;9989:5;9957:38;:::i;:::-;10017:1;10031:154;10045:6;10042:1;10039:13;10031:154;;;10119:7;10113:14;10109:1;10104:3;10100:11;10093:35;10169:1;10160:7;10156:15;10145:26;;10067:4;10064:1;10060:12;10055:17;;10031:154;;;10214:1;10209:3;10205:11;10198:18;;9897:329;;9713:513;;9519:713;;;;;;:::o;10238:366::-;10380:3;10401:67;10465:2;10460:3;10401:67;:::i;:::-;10394:74;;10477:93;10566:3;10477:93;:::i;:::-;10595:2;10590:3;10586:12;10579:19;;10384:220;;;:::o;10610:366::-;10752:3;10773:67;10837:2;10832:3;10773:67;:::i;:::-;10766:74;;10849:93;10938:3;10849:93;:::i;:::-;10967:2;10962:3;10958:12;10951:19;;10756:220;;;:::o;10982:366::-;11124:3;11145:67;11209:2;11204:3;11145:67;:::i;:::-;11138:74;;11221:93;11310:3;11221:93;:::i;:::-;11339:2;11334:3;11330:12;11323:19;;11128:220;;;:::o;11354:366::-;11496:3;11517:67;11581:2;11576:3;11517:67;:::i;:::-;11510:74;;11593:93;11682:3;11593:93;:::i;:::-;11711:2;11706:3;11702:12;11695:19;;11500:220;;;:::o;11726:366::-;11868:3;11889:67;11953:2;11948:3;11889:67;:::i;:::-;11882:74;;11965:93;12054:3;11965:93;:::i;:::-;12083:2;12078:3;12074:12;12067:19;;11872:220;;;:::o;12098:400::-;12258:3;12279:84;12361:1;12356:3;12279:84;:::i;:::-;12272:91;;12372:93;12461:3;12372:93;:::i;:::-;12490:1;12485:3;12481:11;12474:18;;12262:236;;;:::o;12504:366::-;12646:3;12667:67;12731:2;12726:3;12667:67;:::i;:::-;12660:74;;12743:93;12832:3;12743:93;:::i;:::-;12861:2;12856:3;12852:12;12845:19;;12650:220;;;:::o;12876:366::-;13018:3;13039:67;13103:2;13098:3;13039:67;:::i;:::-;13032:74;;13115:93;13204:3;13115:93;:::i;:::-;13233:2;13228:3;13224:12;13217:19;;13022:220;;;:::o;13248:366::-;13390:3;13411:67;13475:2;13470:3;13411:67;:::i;:::-;13404:74;;13487:93;13576:3;13487:93;:::i;:::-;13605:2;13600:3;13596:12;13589:19;;13394:220;;;:::o;13620:366::-;13762:3;13783:67;13847:2;13842:3;13783:67;:::i;:::-;13776:74;;13859:93;13948:3;13859:93;:::i;:::-;13977:2;13972:3;13968:12;13961:19;;13766:220;;;:::o;13992:366::-;14134:3;14155:67;14219:2;14214:3;14155:67;:::i;:::-;14148:74;;14231:93;14320:3;14231:93;:::i;:::-;14349:2;14344:3;14340:12;14333:19;;14138:220;;;:::o;14364:366::-;14506:3;14527:67;14591:2;14586:3;14527:67;:::i;:::-;14520:74;;14603:93;14692:3;14603:93;:::i;:::-;14721:2;14716:3;14712:12;14705:19;;14510:220;;;:::o;14736:366::-;14878:3;14899:67;14963:2;14958:3;14899:67;:::i;:::-;14892:74;;14975:93;15064:3;14975:93;:::i;:::-;15093:2;15088:3;15084:12;15077:19;;14882:220;;;:::o;15108:366::-;15250:3;15271:67;15335:2;15330:3;15271:67;:::i;:::-;15264:74;;15347:93;15436:3;15347:93;:::i;:::-;15465:2;15460:3;15456:12;15449:19;;15254:220;;;:::o;15480:366::-;15622:3;15643:67;15707:2;15702:3;15643:67;:::i;:::-;15636:74;;15719:93;15808:3;15719:93;:::i;:::-;15837:2;15832:3;15828:12;15821:19;;15626:220;;;:::o;15852:366::-;15994:3;16015:67;16079:2;16074:3;16015:67;:::i;:::-;16008:74;;16091:93;16180:3;16091:93;:::i;:::-;16209:2;16204:3;16200:12;16193:19;;15998:220;;;:::o;16224:366::-;16366:3;16387:67;16451:2;16446:3;16387:67;:::i;:::-;16380:74;;16463:93;16552:3;16463:93;:::i;:::-;16581:2;16576:3;16572:12;16565:19;;16370:220;;;:::o;16596:366::-;16738:3;16759:67;16823:2;16818:3;16759:67;:::i;:::-;16752:74;;16835:93;16924:3;16835:93;:::i;:::-;16953:2;16948:3;16944:12;16937:19;;16742:220;;;:::o;16968:366::-;17110:3;17131:67;17195:2;17190:3;17131:67;:::i;:::-;17124:74;;17207:93;17296:3;17207:93;:::i;:::-;17325:2;17320:3;17316:12;17309:19;;17114:220;;;:::o;17340:366::-;17482:3;17503:67;17567:2;17562:3;17503:67;:::i;:::-;17496:74;;17579:93;17668:3;17579:93;:::i;:::-;17697:2;17692:3;17688:12;17681:19;;17486:220;;;:::o;17712:366::-;17854:3;17875:67;17939:2;17934:3;17875:67;:::i;:::-;17868:74;;17951:93;18040:3;17951:93;:::i;:::-;18069:2;18064:3;18060:12;18053:19;;17858:220;;;:::o;18084:366::-;18226:3;18247:67;18311:2;18306:3;18247:67;:::i;:::-;18240:74;;18323:93;18412:3;18323:93;:::i;:::-;18441:2;18436:3;18432:12;18425:19;;18230:220;;;:::o;18456:118::-;18543:24;18561:5;18543:24;:::i;:::-;18538:3;18531:37;18521:53;;:::o;18580:112::-;18663:22;18679:5;18663:22;:::i;:::-;18658:3;18651:35;18641:51;;:::o;18698:663::-;18939:3;18961:148;19105:3;18961:148;:::i;:::-;18954:155;;19119:75;19190:3;19181:6;19119:75;:::i;:::-;19219:2;19214:3;19210:12;19203:19;;19232:75;19303:3;19294:6;19232:75;:::i;:::-;19332:2;19327:3;19323:12;19316:19;;19352:3;19345:10;;18943:418;;;;;:::o;19367:549::-;19544:4;19582:2;19571:9;19567:18;19559:26;;19595:71;19663:1;19652:9;19648:17;19639:6;19595:71;:::i;:::-;19676:72;19744:2;19733:9;19729:18;19720:6;19676:72;:::i;:::-;19795:9;19789:4;19785:20;19780:2;19769:9;19765:18;19758:48;19823:86;19904:4;19895:6;19887;19823:86;:::i;:::-;19815:94;;19549:367;;;;;;;:::o;19922:210::-;20009:4;20047:2;20036:9;20032:18;20024:26;;20060:65;20122:1;20111:9;20107:17;20098:6;20060:65;:::i;:::-;20014:118;;;;:::o;20138:222::-;20231:4;20269:2;20258:9;20254:18;20246:26;;20282:71;20350:1;20339:9;20335:17;20326:6;20282:71;:::i;:::-;20236:124;;;;:::o;20366:775::-;20599:4;20637:3;20626:9;20622:19;20614:27;;20651:71;20719:1;20708:9;20704:17;20695:6;20651:71;:::i;:::-;20732:72;20800:2;20789:9;20785:18;20776:6;20732:72;:::i;:::-;20814;20882:2;20871:9;20867:18;20858:6;20814:72;:::i;:::-;20896;20964:2;20953:9;20949:18;20940:6;20896:72;:::i;:::-;20978:73;21046:3;21035:9;21031:19;21022:6;20978:73;:::i;:::-;21061;21129:3;21118:9;21114:19;21105:6;21061:73;:::i;:::-;20604:537;;;;;;;;;:::o;21147:664::-;21352:4;21390:3;21379:9;21375:19;21367:27;;21404:71;21472:1;21461:9;21457:17;21448:6;21404:71;:::i;:::-;21485:72;21553:2;21542:9;21538:18;21529:6;21485:72;:::i;:::-;21567;21635:2;21624:9;21620:18;21611:6;21567:72;:::i;:::-;21649;21717:2;21706:9;21702:18;21693:6;21649:72;:::i;:::-;21731:73;21799:3;21788:9;21784:19;21775:6;21731:73;:::i;:::-;21357:454;;;;;;;;:::o;21817:545::-;21990:4;22028:3;22017:9;22013:19;22005:27;;22042:71;22110:1;22099:9;22095:17;22086:6;22042:71;:::i;:::-;22123:68;22187:2;22176:9;22172:18;22163:6;22123:68;:::i;:::-;22201:72;22269:2;22258:9;22254:18;22245:6;22201:72;:::i;:::-;22283;22351:2;22340:9;22336:18;22327:6;22283:72;:::i;:::-;21995:367;;;;;;;:::o;22368:313::-;22481:4;22519:2;22508:9;22504:18;22496:26;;22568:9;22562:4;22558:20;22554:1;22543:9;22539:17;22532:47;22596:78;22669:4;22660:6;22596:78;:::i;:::-;22588:86;;22486:195;;;;:::o;22687:502::-;22842:4;22880:2;22869:9;22865:18;22857:26;;22929:9;22923:4;22919:20;22915:1;22904:9;22900:17;22893:47;22957:75;23027:4;23018:6;22957:75;:::i;:::-;22949:83;;23079:9;23073:4;23069:20;23064:2;23053:9;23049:18;23042:48;23107:75;23177:4;23168:6;23107:75;:::i;:::-;23099:83;;22847:342;;;;;:::o;23195:419::-;23361:4;23399:2;23388:9;23384:18;23376:26;;23448:9;23442:4;23438:20;23434:1;23423:9;23419:17;23412:47;23476:131;23602:4;23476:131;:::i;:::-;23468:139;;23366:248;;;:::o;23620:419::-;23786:4;23824:2;23813:9;23809:18;23801:26;;23873:9;23867:4;23863:20;23859:1;23848:9;23844:17;23837:47;23901:131;24027:4;23901:131;:::i;:::-;23893:139;;23791:248;;;:::o;24045:419::-;24211:4;24249:2;24238:9;24234:18;24226:26;;24298:9;24292:4;24288:20;24284:1;24273:9;24269:17;24262:47;24326:131;24452:4;24326:131;:::i;:::-;24318:139;;24216:248;;;:::o;24470:419::-;24636:4;24674:2;24663:9;24659:18;24651:26;;24723:9;24717:4;24713:20;24709:1;24698:9;24694:17;24687:47;24751:131;24877:4;24751:131;:::i;:::-;24743:139;;24641:248;;;:::o;24895:419::-;25061:4;25099:2;25088:9;25084:18;25076:26;;25148:9;25142:4;25138:20;25134:1;25123:9;25119:17;25112:47;25176:131;25302:4;25176:131;:::i;:::-;25168:139;;25066:248;;;:::o;25320:419::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25491:248;;;:::o;25745:419::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25916:248;;;:::o;26170:419::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26341:248;;;:::o;26595:419::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26766:248;;;:::o;27020:419::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27191:248;;;:::o;27445:419::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27616:248;;;:::o;27870:419::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;28041:248;;;:::o;28295:419::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28466:248;;;:::o;28720:419::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28891:248;;;:::o;29145:419::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29316:248;;;:::o;29570:419::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29741:248;;;:::o;29995:419::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;30166:248;;;:::o;30420:419::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30591:248;;;:::o;30845:419::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;31016:248;;;:::o;31270:419::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31441:248;;;:::o;31695:419::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31866:248;;;:::o;32120:222::-;32213:4;32251:2;32240:9;32236:18;32228:26;;32264:71;32332:1;32321:9;32317:17;32308:6;32264:71;:::i;:::-;32218:124;;;;:::o;32348:439::-;32497:4;32535:2;32524:9;32520:18;32512:26;;32548:71;32616:1;32605:9;32601:17;32592:6;32548:71;:::i;:::-;32666:9;32660:4;32656:20;32651:2;32640:9;32636:18;32629:48;32694:86;32775:4;32766:6;32758;32694:86;:::i;:::-;32686:94;;32502:285;;;;;;:::o;32793:214::-;32882:4;32920:2;32909:9;32905:18;32897:26;;32933:67;32997:1;32986:9;32982:17;32973:6;32933:67;:::i;:::-;32887:120;;;;:::o;33094:141::-;33143:4;33166:3;33158:11;;33189:3;33186:1;33179:14;33223:4;33220:1;33210:18;33202:26;;33148:87;;;:::o;33241:99::-;33293:6;33327:5;33321:12;33311:22;;33300:40;;;:::o;33346:168::-;33429:11;33463:6;33458:3;33451:19;33503:4;33498:3;33494:14;33479:29;;33441:73;;;;:::o;33520:169::-;33604:11;33638:6;33633:3;33626:19;33678:4;33673:3;33669:14;33654:29;;33616:73;;;;:::o;33695:148::-;33797:11;33834:3;33819:18;;33809:34;;;;:::o;33849:305::-;33889:3;33908:20;33926:1;33908:20;:::i;:::-;33903:25;;33942:20;33960:1;33942:20;:::i;:::-;33937:25;;34096:1;34028:66;34024:74;34021:1;34018:81;34015:2;;;34102:18;;:::i;:::-;34015:2;34146:1;34143;34139:9;34132:16;;33893:261;;;;:::o;34160:191::-;34200:4;34220:20;34238:1;34220:20;:::i;:::-;34215:25;;34254:20;34272:1;34254:20;:::i;:::-;34249:25;;34293:1;34290;34287:8;34284:2;;;34298:18;;:::i;:::-;34284:2;34343:1;34340;34336:9;34328:17;;34205:146;;;;:::o;34357:96::-;34394:7;34423:24;34441:5;34423:24;:::i;:::-;34412:35;;34402:51;;;:::o;34459:90::-;34493:7;34536:5;34529:13;34522:21;34511:32;;34501:48;;;:::o;34555:77::-;34592:7;34621:5;34610:16;;34600:32;;;:::o;34638:149::-;34674:7;34714:66;34707:5;34703:78;34692:89;;34682:105;;;:::o;34793:126::-;34830:7;34870:42;34863:5;34859:54;34848:65;;34838:81;;;:::o;34925:77::-;34962:7;34991:5;34980:16;;34970:32;;;:::o;35008:86::-;35043:7;35083:4;35076:5;35072:16;35061:27;;35051:43;;;:::o;35100:154::-;35184:6;35179:3;35174;35161:30;35246:1;35237:6;35232:3;35228:16;35221:27;35151:103;;;:::o;35260:307::-;35328:1;35338:113;35352:6;35349:1;35346:13;35338:113;;;35437:1;35432:3;35428:11;35422:18;35418:1;35413:3;35409:11;35402:39;35374:2;35371:1;35367:10;35362:15;;35338:113;;;35469:6;35466:1;35463:13;35460:2;;;35549:1;35540:6;35535:3;35531:16;35524:27;35460:2;35309:258;;;;:::o;35573:320::-;35617:6;35654:1;35648:4;35644:12;35634:22;;35701:1;35695:4;35691:12;35722:18;35712:2;;35778:4;35770:6;35766:17;35756:27;;35712:2;35840;35832:6;35829:14;35809:18;35806:38;35803:2;;;35859:18;;:::i;:::-;35803:2;35624:269;;;;:::o;35899:79::-;35938:7;35967:5;35956:16;;35946:32;;;:::o;35984:180::-;36032:77;36029:1;36022:88;36129:4;36126:1;36119:15;36153:4;36150:1;36143:15;36170:180;36218:77;36215:1;36208:88;36315:4;36312:1;36305:15;36339:4;36336:1;36329:15;36356:117;36465:1;36462;36455:12;36479:117;36588:1;36585;36578:12;36602:117;36711:1;36708;36701:12;36725:117;36834:1;36831;36824:12;36848:117;36957:1;36954;36947:12;36971:102;37012:6;37063:2;37059:7;37054:2;37047:5;37043:14;37039:28;37029:38;;37019:54;;;:::o;37079:174::-;37219:26;37215:1;37207:6;37203:14;37196:50;37185:68;:::o;37259:222::-;37399:34;37395:1;37387:6;37383:14;37376:58;37468:5;37463:2;37455:6;37451:15;37444:30;37365:116;:::o;37487:234::-;37627:34;37623:1;37615:6;37611:14;37604:58;37696:17;37691:2;37683:6;37679:15;37672:42;37593:128;:::o;37727:221::-;37867:34;37863:1;37855:6;37851:14;37844:58;37936:4;37931:2;37923:6;37919:15;37912:29;37833:115;:::o;37954:221::-;38094:34;38090:1;38082:6;38078:14;38071:58;38163:4;38158:2;38150:6;38146:15;38139:29;38060:115;:::o;38181:214::-;38321:66;38317:1;38309:6;38305:14;38298:90;38287:108;:::o;38401:179::-;38541:31;38537:1;38529:6;38525:14;38518:55;38507:73;:::o;38586:225::-;38726:34;38722:1;38714:6;38710:14;38703:58;38795:8;38790:2;38782:6;38778:15;38771:33;38692:119;:::o;38817:221::-;38957:34;38953:1;38945:6;38941:14;38934:58;39026:4;39021:2;39013:6;39009:15;39002:29;38923:115;:::o;39044:221::-;39184:34;39180:1;39172:6;39168:14;39161:58;39253:4;39248:2;39240:6;39236:15;39229:29;39150:115;:::o;39271:235::-;39411:34;39407:1;39399:6;39395:14;39388:58;39480:18;39475:2;39467:6;39463:15;39456:43;39377:129;:::o;39512:221::-;39652:34;39648:1;39640:6;39636:14;39629:58;39721:4;39716:2;39708:6;39704:15;39697:29;39618:115;:::o;39739:180::-;39879:32;39875:1;39867:6;39863:14;39856:56;39845:74;:::o;39925:227::-;40065:34;40061:1;40053:6;40049:14;40042:58;40134:10;40129:2;40121:6;40117:15;40110:35;40031:121;:::o;40158:223::-;40298:34;40294:1;40286:6;40282:14;40275:58;40367:6;40362:2;40354:6;40350:15;40343:31;40264:117;:::o;40387:220::-;40527:34;40523:1;40515:6;40511:14;40504:58;40596:3;40591:2;40583:6;40579:15;40572:28;40493:114;:::o;40613:224::-;40753:34;40749:1;40741:6;40737:14;40730:58;40822:7;40817:2;40809:6;40805:15;40798:32;40719:118;:::o;40843:223::-;40983:34;40979:1;40971:6;40967:14;40960:58;41052:6;41047:2;41039:6;41035:15;41028:31;40949:117;:::o;41072:221::-;41212:34;41208:1;41200:6;41196:14;41189:58;41281:4;41276:2;41268:6;41264:15;41257:29;41178:115;:::o;41299:224::-;41439:34;41435:1;41427:6;41423:14;41416:58;41508:7;41503:2;41495:6;41491:15;41484:32;41405:118;:::o;41529:234::-;41669:34;41665:1;41657:6;41653:14;41646:58;41738:17;41733:2;41725:6;41721:15;41714:42;41635:128;:::o;41769:181::-;41909:33;41905:1;41897:6;41893:14;41886:57;41875:75;:::o;41956:122::-;42029:24;42047:5;42029:24;:::i;:::-;42022:5;42019:35;42009:2;;42068:1;42065;42058:12;42009:2;41999:79;:::o;42084:122::-;42157:24;42175:5;42157:24;:::i;:::-;42150:5;42147:35;42137:2;;42196:1;42193;42186:12;42137:2;42127:79;:::o;42212:120::-;42284:23;42301:5;42284:23;:::i;:::-;42277:5;42274:34;42264:2;;42322:1;42319;42312:12;42264:2;42254:78;:::o;42338:122::-;42411:24;42429:5;42411:24;:::i;:::-;42404:5;42401:35;42391:2;;42450:1;42447;42440:12;42391:2;42381:79;:::o;42466:118::-;42537:22;42553:5;42537:22;:::i;:::-;42530:5;42527:33;42517:2;;42574:1;42571;42564:12;42517:2;42507:77;:::o

Swarm Source

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