Token TreasureMaps

NFT  

Overview ERC20

Price
$0.00 @ 0.000000 MOVR
Fully Diluted Market Cap
Total Supply:
1,245,095.823744 TMAP

Holders:
1,096 addresses
Balance
194.935621102561958853 TMAP

Value
$0.00
0xca9458001b07bf8f960bf897fe8c639c32056490
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Damned Pirates were conceptualised by Davy Jones. The team came about through online NFT communities & real life friendships. The goal, to build a community to rival that of any in Crypto.


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
1
Solarbeam
0XE413A631E8A9A10958D9B7C64157449EAE7C2064-0XF37626E2284742305858052615E94B380B23B3B7$0.0246
0.0000011 Btc
$149.83
162,257.977 0XE413A631E8A9A10958D9B7C64157449EAE7C2064
100.0000%
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TMAP

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol



pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

/**
 * @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/ERC165.sol



pragma solidity ^0.8.0;


/**
 * @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/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) 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 default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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");
        unchecked {
            _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");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/access/IAccessControl.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/access/AccessControl.sol



pragma solidity ^0.8.0;





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

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

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

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

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view 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 onlyRole(getRoleAdmin(role)) {
        _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 onlyRole(getRoleAdmin(role)) {
        _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 {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, 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: TMAP.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;



contract TMAP is ERC20, AccessControl {
  bytes32 public constant GOVERNANCE_ROLE = keccak256("GOVERNANCE");

  constructor() ERC20("TreasureMaps", "TMAP") {
    _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
    _setupRole(GOVERNANCE_ROLE, msg.sender);
  }

  function mint(address _to, uint256 _amount) external onlyRole(GOVERNANCE_ROLE) {
    _mint(_to, _amount);
  }

  function burn(address _to, uint256 _amount) external onlyRole(GOVERNANCE_ROLE) {
    _burn(_to, _amount);
  }
}

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"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE_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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","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":"_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":"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":"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":"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"}]

60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f54726561737572654d61707300000000000000000000000000000000000000008152506040518060400160405280600481526020017f544d4150000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000969291906200027a565b508060049080519060200190620000af9291906200027a565b505050620000c76000801b33620000ff60201b60201c565b620000f97f35a7846a2a701fff6f9d61a46ebff5da578c5dcee8bdf361c569f9ea4ee6477133620000ff60201b60201c565b6200038f565b6200011182826200011560201b60201c565b5050565b6200012782826200020760201b60201c565b620002035760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001a86200027260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620002889062000359565b90600052602060002090601f016020900481019282620002ac5760008555620002f8565b82601f10620002c757805160ff1916838001178555620002f8565b82800160010185558215620002f8579182015b82811115620002f7578251825591602001919060010190620002da565b5b5090506200030791906200030b565b5090565b5b80821115620003265760008160009055506001016200030c565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200037257607f821691505b602082108114156200038957620003886200032a565b5b50919050565b612658806200039f6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806340c10f19116100b8578063a217fddf1161007c578063a217fddf14610374578063a457c2d714610392578063a9059cbb146103c2578063d547741f146103f2578063dd62ed3e1461040e578063f36c8f5c1461043e57610137565b806340c10f19146102be57806370a08231146102da57806391d148541461030a57806395d89b411461033a5780639dc29fac1461035857610137565b8063248a9ca3116100ff578063248a9ca3146102085780632f2ff15d14610238578063313ce5671461025457806336568abe14610272578063395093511461028e57610137565b806301ffc9a71461013c57806306fdde031461016c578063095ea7b31461018a57806318160ddd146101ba57806323b872dd146101d8575b600080fd5b610156600480360381019061015191906118ac565b61045c565b60405161016391906118f4565b60405180910390f35b6101746104d6565b60405161018191906119a8565b60405180910390f35b6101a4600480360381019061019f9190611a5e565b610568565b6040516101b191906118f4565b60405180910390f35b6101c2610586565b6040516101cf9190611aad565b60405180910390f35b6101f260048036038101906101ed9190611ac8565b610590565b6040516101ff91906118f4565b60405180910390f35b610222600480360381019061021d9190611b51565b610688565b60405161022f9190611b8d565b60405180910390f35b610252600480360381019061024d9190611ba8565b6106a8565b005b61025c6106d1565b6040516102699190611c04565b60405180910390f35b61028c60048036038101906102879190611ba8565b6106da565b005b6102a860048036038101906102a39190611a5e565b61075d565b6040516102b591906118f4565b60405180910390f35b6102d860048036038101906102d39190611a5e565b610809565b005b6102f460048036038101906102ef9190611c1f565b61084a565b6040516103019190611aad565b60405180910390f35b610324600480360381019061031f9190611ba8565b610892565b60405161033191906118f4565b60405180910390f35b6103426108fd565b60405161034f91906119a8565b60405180910390f35b610372600480360381019061036d9190611a5e565b61098f565b005b61037c6109d0565b6040516103899190611b8d565b60405180910390f35b6103ac60048036038101906103a79190611a5e565b6109d7565b6040516103b991906118f4565b60405180910390f35b6103dc60048036038101906103d79190611a5e565b610ac2565b6040516103e991906118f4565b60405180910390f35b61040c60048036038101906104079190611ba8565b610ae0565b005b61042860048036038101906104239190611c4c565b610b09565b6040516104359190611aad565b60405180910390f35b610446610b90565b6040516104539190611b8d565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104cf57506104ce82610bb4565b5b9050919050565b6060600380546104e590611cbb565b80601f016020809104026020016040519081016040528092919081815260200182805461051190611cbb565b801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b600061057c610575610c1e565b8484610c26565b6001905092915050565b6000600254905090565b600061059d848484610df1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105e8610c1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065f90611d5f565b60405180910390fd5b61067c85610674610c1e565b858403610c26565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6106b182610688565b6106c2816106bd610c1e565b611072565b6106cc838361110f565b505050565b60006012905090565b6106e2610c1e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074690611df1565b60405180910390fd5b61075982826111f0565b5050565b60006107ff61076a610c1e565b848460016000610778610c1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107fa9190611e40565b610c26565b6001905092915050565b7f35a7846a2a701fff6f9d61a46ebff5da578c5dcee8bdf361c569f9ea4ee6477161083b81610836610c1e565b611072565b61084583836112d2565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805461090c90611cbb565b80601f016020809104026020016040519081016040528092919081815260200182805461093890611cbb565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b5050505050905090565b7f35a7846a2a701fff6f9d61a46ebff5da578c5dcee8bdf361c569f9ea4ee647716109c1816109bc610c1e565b611072565b6109cb8383611432565b505050565b6000801b81565b600080600160006109e6610c1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a90611f08565b60405180910390fd5b610ab7610aae610c1e565b85858403610c26565b600191505092915050565b6000610ad6610acf610c1e565b8484610df1565b6001905092915050565b610ae982610688565b610afa81610af5610c1e565b611072565b610b0483836111f0565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f35a7846a2a701fff6f9d61a46ebff5da578c5dcee8bdf361c569f9ea4ee6477181565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90611f9a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd9061202c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610de49190611aad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e58906120be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612150565b60405180910390fd5b610edc838383611609565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906121e2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ff59190611e40565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110599190611aad565b60405180910390a361106c84848461160e565b50505050565b61107c8282610892565b61110b576110a18173ffffffffffffffffffffffffffffffffffffffff166014611613565b6110af8360001c6020611613565b6040516020016110c09291906122d6565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110291906119a8565b60405180910390fd5b5050565b6111198282610892565b6111ec5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611191610c1e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6111fa8282610892565b156112ce5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611273610c1e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113399061235c565b60405180910390fd5b61134e60008383611609565b80600260008282546113609190611e40565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113b59190611e40565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141a9190611aad565b60405180910390a361142e6000838361160e565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611499906123ee565b60405180910390fd5b6114ae82600083611609565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90612480565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461158b91906124a0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115f09190611aad565b60405180910390a36116048360008461160e565b505050565b505050565b505050565b60606000600283600261162691906124d4565b6116309190611e40565b67ffffffffffffffff8111156116495761164861252e565b5b6040519080825280601f01601f19166020018201604052801561167b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106116b3576116b261255d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106117175761171661255d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261175791906124d4565b6117619190611e40565b90505b6001811115611801577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106117a3576117a261255d565b5b1a60f81b8282815181106117ba576117b961255d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806117fa9061258c565b9050611764565b5060008414611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90612602565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61188981611854565b811461189457600080fd5b50565b6000813590506118a681611880565b92915050565b6000602082840312156118c2576118c161184f565b5b60006118d084828501611897565b91505092915050565b60008115159050919050565b6118ee816118d9565b82525050565b600060208201905061190960008301846118e5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561194957808201518184015260208101905061192e565b83811115611958576000848401525b50505050565b6000601f19601f8301169050919050565b600061197a8261190f565b611984818561191a565b935061199481856020860161192b565b61199d8161195e565b840191505092915050565b600060208201905081810360008301526119c2818461196f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119f5826119ca565b9050919050565b611a05816119ea565b8114611a1057600080fd5b50565b600081359050611a22816119fc565b92915050565b6000819050919050565b611a3b81611a28565b8114611a4657600080fd5b50565b600081359050611a5881611a32565b92915050565b60008060408385031215611a7557611a7461184f565b5b6000611a8385828601611a13565b9250506020611a9485828601611a49565b9150509250929050565b611aa781611a28565b82525050565b6000602082019050611ac26000830184611a9e565b92915050565b600080600060608486031215611ae157611ae061184f565b5b6000611aef86828701611a13565b9350506020611b0086828701611a13565b9250506040611b1186828701611a49565b9150509250925092565b6000819050919050565b611b2e81611b1b565b8114611b3957600080fd5b50565b600081359050611b4b81611b25565b92915050565b600060208284031215611b6757611b6661184f565b5b6000611b7584828501611b3c565b91505092915050565b611b8781611b1b565b82525050565b6000602082019050611ba26000830184611b7e565b92915050565b60008060408385031215611bbf57611bbe61184f565b5b6000611bcd85828601611b3c565b9250506020611bde85828601611a13565b9150509250929050565b600060ff82169050919050565b611bfe81611be8565b82525050565b6000602082019050611c196000830184611bf5565b92915050565b600060208284031215611c3557611c3461184f565b5b6000611c4384828501611a13565b91505092915050565b60008060408385031215611c6357611c6261184f565b5b6000611c7185828601611a13565b9250506020611c8285828601611a13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611cd357607f821691505b60208210811415611ce757611ce6611c8c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611d4960288361191a565b9150611d5482611ced565b604082019050919050565b60006020820190508181036000830152611d7881611d3c565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611ddb602f8361191a565b9150611de682611d7f565b604082019050919050565b60006020820190508181036000830152611e0a81611dce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e4b82611a28565b9150611e5683611a28565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e8b57611e8a611e11565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ef260258361191a565b9150611efd82611e96565b604082019050919050565b60006020820190508181036000830152611f2181611ee5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611f8460248361191a565b9150611f8f82611f28565b604082019050919050565b60006020820190508181036000830152611fb381611f77565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061201660228361191a565b915061202182611fba565b604082019050919050565b6000602082019050818103600083015261204581612009565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006120a860258361191a565b91506120b38261204c565b604082019050919050565b600060208201905081810360008301526120d78161209b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061213a60238361191a565b9150612145826120de565b604082019050919050565b600060208201905081810360008301526121698161212d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121cc60268361191a565b91506121d782612170565b604082019050919050565b600060208201905081810360008301526121fb816121bf565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612243601783612202565b915061224e8261220d565b601782019050919050565b60006122648261190f565b61226e8185612202565b935061227e81856020860161192b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006122c0601183612202565b91506122cb8261228a565b601182019050919050565b60006122e182612236565b91506122ed8285612259565b91506122f8826122b3565b91506123048284612259565b91508190509392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612346601f8361191a565b915061235182612310565b602082019050919050565b6000602082019050818103600083015261237581612339565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006123d860218361191a565b91506123e38261237c565b604082019050919050565b60006020820190508181036000830152612407816123cb565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061246a60228361191a565b91506124758261240e565b604082019050919050565b600060208201905081810360008301526124998161245d565b9050919050565b60006124ab82611a28565b91506124b683611a28565b9250828210156124c9576124c8611e11565b5b828203905092915050565b60006124df82611a28565b91506124ea83611a28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561252357612522611e11565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061259782611a28565b915060008214156125ab576125aa611e11565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006125ec60208361191a565b91506125f7826125b6565b602082019050919050565b6000602082019050818103600083015261261b816125df565b905091905056fea2646970667358221220dae817b314fac3449a34b6688e2f9b48b91016fae7468c053a3a0944857251af64736f6c63430008090033

Deployed ByteCode Sourcemap

30448:497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25742:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10287:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12454:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11407:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13105:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27153:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27538:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11249:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28586:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14006:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30714:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11578:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26038:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10506:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30831:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25129:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14724:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11918:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27930:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12156:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30491:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25742:204;25827:4;25866:32;25851:47;;;:11;:47;;;;:87;;;;25902:36;25926:11;25902:23;:36::i;:::-;25851:87;25844:94;;25742:204;;;:::o;10287:100::-;10341:13;10374:5;10367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10287:100;:::o;12454:169::-;12537:4;12554:39;12563:12;:10;:12::i;:::-;12577:7;12586:6;12554:8;:39::i;:::-;12611:4;12604:11;;12454:169;;;;:::o;11407:108::-;11468:7;11495:12;;11488:19;;11407:108;:::o;13105:492::-;13245:4;13262:36;13272:6;13280:9;13291:6;13262:9;:36::i;:::-;13311:24;13338:11;:19;13350:6;13338:19;;;;;;;;;;;;;;;:33;13358:12;:10;:12::i;:::-;13338:33;;;;;;;;;;;;;;;;13311:60;;13410:6;13390:16;:26;;13382:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13497:57;13506:6;13514:12;:10;:12::i;:::-;13547:6;13528:16;:25;13497:8;:57::i;:::-;13585:4;13578:11;;;13105:492;;;;;:::o;27153:123::-;27219:7;27246:6;:12;27253:4;27246:12;;;;;;;;;;;:22;;;27239:29;;27153:123;;;:::o;27538:147::-;27621:18;27634:4;27621:12;:18::i;:::-;25620:30;25631:4;25637:12;:10;:12::i;:::-;25620:10;:30::i;:::-;27652:25:::1;27663:4;27669:7;27652:10;:25::i;:::-;27538:147:::0;;;:::o;11249:93::-;11307:5;11332:2;11325:9;;11249:93;:::o;28586:218::-;28693:12;:10;:12::i;:::-;28682:23;;:7;:23;;;28674:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28770:26;28782:4;28788:7;28770:11;:26::i;:::-;28586:218;;:::o;14006:215::-;14094:4;14111:80;14120:12;:10;:12::i;:::-;14134:7;14180:10;14143:11;:25;14155:12;:10;:12::i;:::-;14143:25;;;;;;;;;;;;;;;:34;14169:7;14143:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14111:8;:80::i;:::-;14209:4;14202:11;;14006:215;;;;:::o;30714:111::-;30533:23;25620:30;25631:4;25637:12;:10;:12::i;:::-;25620:10;:30::i;:::-;30800:19:::1;30806:3;30811:7;30800:5;:19::i;:::-;30714:111:::0;;;:::o;11578:127::-;11652:7;11679:9;:18;11689:7;11679:18;;;;;;;;;;;;;;;;11672:25;;11578:127;;;:::o;26038:139::-;26116:4;26140:6;:12;26147:4;26140:12;;;;;;;;;;;:20;;:29;26161:7;26140:29;;;;;;;;;;;;;;;;;;;;;;;;;26133:36;;26038:139;;;;:::o;10506:104::-;10562:13;10595:7;10588:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10506:104;:::o;30831:111::-;30533:23;25620:30;25631:4;25637:12;:10;:12::i;:::-;25620:10;:30::i;:::-;30917:19:::1;30923:3;30928:7;30917:5;:19::i;:::-;30831:111:::0;;;:::o;25129:49::-;25174:4;25129:49;;;:::o;14724:413::-;14817:4;14834:24;14861:11;:25;14873:12;:10;:12::i;:::-;14861:25;;;;;;;;;;;;;;;:34;14887:7;14861:34;;;;;;;;;;;;;;;;14834:61;;14934:15;14914:16;:35;;14906:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15027:67;15036:12;:10;:12::i;:::-;15050:7;15078:15;15059:16;:34;15027:8;:67::i;:::-;15125:4;15118:11;;;14724:413;;;;:::o;11918:175::-;12004:4;12021:42;12031:12;:10;:12::i;:::-;12045:9;12056:6;12021:9;:42::i;:::-;12081:4;12074:11;;11918:175;;;;:::o;27930:149::-;28014:18;28027:4;28014:12;:18::i;:::-;25620:30;25631:4;25637:12;:10;:12::i;:::-;25620:10;:30::i;:::-;28045:26:::1;28057:4;28063:7;28045:11;:26::i;:::-;27930:149:::0;;;:::o;12156:151::-;12245:7;12272:11;:18;12284:5;12272:18;;;;;;;;;;;;;;;:27;12291:7;12272:27;;;;;;;;;;;;;;;;12265:34;;12156:151;;;;:::o;30491:65::-;30533:23;30491:65;:::o;5141:157::-;5226:4;5265:25;5250:40;;;:11;:40;;;;5243:47;;5141:157;;;:::o;8000:98::-;8053:7;8080:10;8073:17;;8000:98;:::o;18408:380::-;18561:1;18544:19;;:5;:19;;;;18536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18642:1;18623:21;;:7;:21;;;;18615:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18726:6;18696:11;:18;18708:5;18696:18;;;;;;;;;;;;;;;:27;18715:7;18696:27;;;;;;;;;;;;;;;:36;;;;18764:7;18748:32;;18757:5;18748:32;;;18773:6;18748:32;;;;;;:::i;:::-;;;;;;;;18408:380;;;:::o;15627:733::-;15785:1;15767:20;;:6;:20;;;;15759:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15869:1;15848:23;;:9;:23;;;;15840:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15924:47;15945:6;15953:9;15964:6;15924:20;:47::i;:::-;15984:21;16008:9;:17;16018:6;16008:17;;;;;;;;;;;;;;;;15984:41;;16061:6;16044:13;:23;;16036:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16182:6;16166:13;:22;16146:9;:17;16156:6;16146:17;;;;;;;;;;;;;;;:42;;;;16234:6;16210:9;:20;16220:9;16210:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16275:9;16258:35;;16267:6;16258:35;;;16286:6;16258:35;;;;;;:::i;:::-;;;;;;;;16306:46;16326:6;16334:9;16345:6;16306:19;:46::i;:::-;15748:612;15627:733;;;:::o;26467:497::-;26548:22;26556:4;26562:7;26548;:22::i;:::-;26543:414;;26736:41;26764:7;26736:41;;26774:2;26736:19;:41::i;:::-;26850:38;26878:4;26870:13;;26885:2;26850:19;:38::i;:::-;26641:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26587:358;;;;;;;;;;;:::i;:::-;;;;;;;;26543:414;26467:497;;:::o;29890:229::-;29965:22;29973:4;29979:7;29965;:22::i;:::-;29960:152;;30036:4;30004:6;:12;30011:4;30004:12;;;;;;;;;;;:20;;:29;30025:7;30004:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30087:12;:10;:12::i;:::-;30060:40;;30078:7;30060:40;;30072:4;30060:40;;;;;;;;;;29960:152;29890:229;;:::o;30127:230::-;30202:22;30210:4;30216:7;30202;:22::i;:::-;30198:152;;;30273:5;30241:6;:12;30248:4;30241:12;;;;;;;;;;;:20;;:29;30262:7;30241:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30325:12;:10;:12::i;:::-;30298:40;;30316:7;30298:40;;30310:4;30298:40;;;;;;;;;;30198:152;30127:230;;:::o;16647:399::-;16750:1;16731:21;;:7;:21;;;;16723:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;16801:49;16830:1;16834:7;16843:6;16801:20;:49::i;:::-;16879:6;16863:12;;:22;;;;;;;:::i;:::-;;;;;;;;16918:6;16896:9;:18;16906:7;16896:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;16961:7;16940:37;;16957:1;16940:37;;;16970:6;16940:37;;;;;;:::i;:::-;;;;;;;;16990:48;17018:1;17022:7;17031:6;16990:19;:48::i;:::-;16647:399;;:::o;17379:591::-;17482:1;17463:21;;:7;:21;;;;17455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17535:49;17556:7;17573:1;17577:6;17535:20;:49::i;:::-;17597:22;17622:9;:18;17632:7;17622:18;;;;;;;;;;;;;;;;17597:43;;17677:6;17659:14;:24;;17651:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17796:6;17779:14;:23;17758:9;:18;17768:7;17758:18;;;;;;;;;;;;;;;:44;;;;17840:6;17824:12;;:22;;;;;;;:::i;:::-;;;;;;;;17890:1;17864:37;;17873:7;17864:37;;;17894:6;17864:37;;;;;;:::i;:::-;;;;;;;;17914:48;17934:7;17951:1;17955:6;17914:19;:48::i;:::-;17444:526;17379:591;;:::o;19388:125::-;;;;:::o;20117:124::-;;;;:::o;6917:451::-;6992:13;7018:19;7063:1;7054:6;7050:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7040:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7018:47;;7076:15;:6;7083:1;7076:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;7102;:6;7109:1;7102:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;7133:9;7158:1;7149:6;7145:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7133:26;;7128:135;7165:1;7161;:5;7128:135;;;7200:12;7221:3;7213:5;:11;7200:25;;;;;;;:::i;:::-;;;;;7188:6;7195:1;7188:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;7250:1;7240:11;;;;;7168:3;;;;:::i;:::-;;;7128:135;;;;7290:1;7281:5;:10;7273:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;7353:6;7339:21;;;6917:451;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:126::-;2945:7;2985:42;2978:5;2974:54;2963:65;;2908:126;;;:::o;3040:96::-;3077:7;3106:24;3124:5;3106:24;:::i;:::-;3095:35;;3040:96;;;:::o;3142:122::-;3215:24;3233:5;3215:24;:::i;:::-;3208:5;3205:35;3195:63;;3254:1;3251;3244:12;3195:63;3142:122;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:77::-;3452:7;3481:5;3470:16;;3415:77;;;:::o;3498:122::-;3571:24;3589:5;3571:24;:::i;:::-;3564:5;3561:35;3551:63;;3610:1;3607;3600:12;3551:63;3498:122;:::o;3626:139::-;3672:5;3710:6;3697:20;3688:29;;3726:33;3753:5;3726:33;:::i;:::-;3626:139;;;;:::o;3771:474::-;3839:6;3847;3896:2;3884:9;3875:7;3871:23;3867:32;3864:119;;;3902:79;;:::i;:::-;3864:119;4022:1;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3993:117;4149:2;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4120:118;3771:474;;;;;:::o;4251:118::-;4338:24;4356:5;4338:24;:::i;:::-;4333:3;4326:37;4251:118;;:::o;4375:222::-;4468:4;4506:2;4495:9;4491:18;4483:26;;4519:71;4587:1;4576:9;4572:17;4563:6;4519:71;:::i;:::-;4375:222;;;;:::o;4603:619::-;4680:6;4688;4696;4745:2;4733:9;4724:7;4720:23;4716:32;4713:119;;;4751:79;;:::i;:::-;4713:119;4871:1;4896:53;4941:7;4932:6;4921:9;4917:22;4896:53;:::i;:::-;4886:63;;4842:117;4998:2;5024:53;5069:7;5060:6;5049:9;5045:22;5024:53;:::i;:::-;5014:63;;4969:118;5126:2;5152:53;5197:7;5188:6;5177:9;5173:22;5152:53;:::i;:::-;5142:63;;5097:118;4603:619;;;;;:::o;5228:77::-;5265:7;5294:5;5283:16;;5228:77;;;:::o;5311:122::-;5384:24;5402:5;5384:24;:::i;:::-;5377:5;5374:35;5364:63;;5423:1;5420;5413:12;5364:63;5311:122;:::o;5439:139::-;5485:5;5523:6;5510:20;5501:29;;5539:33;5566:5;5539:33;:::i;:::-;5439:139;;;;:::o;5584:329::-;5643:6;5692:2;5680:9;5671:7;5667:23;5663:32;5660:119;;;5698:79;;:::i;:::-;5660:119;5818:1;5843:53;5888:7;5879:6;5868:9;5864:22;5843:53;:::i;:::-;5833:63;;5789:117;5584:329;;;;:::o;5919:118::-;6006:24;6024:5;6006:24;:::i;:::-;6001:3;5994:37;5919:118;;:::o;6043:222::-;6136:4;6174:2;6163:9;6159:18;6151:26;;6187:71;6255:1;6244:9;6240:17;6231:6;6187:71;:::i;:::-;6043:222;;;;:::o;6271:474::-;6339:6;6347;6396:2;6384:9;6375:7;6371:23;6367:32;6364:119;;;6402:79;;:::i;:::-;6364:119;6522:1;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6493:117;6649:2;6675:53;6720:7;6711:6;6700:9;6696:22;6675:53;:::i;:::-;6665:63;;6620:118;6271:474;;;;;:::o;6751:86::-;6786:7;6826:4;6819:5;6815:16;6804:27;;6751:86;;;:::o;6843:112::-;6926:22;6942:5;6926:22;:::i;:::-;6921:3;6914:35;6843:112;;:::o;6961:214::-;7050:4;7088:2;7077:9;7073:18;7065:26;;7101:67;7165:1;7154:9;7150:17;7141:6;7101:67;:::i;:::-;6961:214;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:474::-;7584:6;7592;7641:2;7629:9;7620:7;7616:23;7612:32;7609:119;;;7647:79;;:::i;:::-;7609:119;7767:1;7792:53;7837:7;7828:6;7817:9;7813:22;7792:53;:::i;:::-;7782:63;;7738:117;7894:2;7920:53;7965:7;7956:6;7945:9;7941:22;7920:53;:::i;:::-;7910:63;;7865:118;7516:474;;;;;:::o;7996:180::-;8044:77;8041:1;8034:88;8141:4;8138:1;8131:15;8165:4;8162:1;8155:15;8182:320;8226:6;8263:1;8257:4;8253:12;8243:22;;8310:1;8304:4;8300:12;8331:18;8321:81;;8387:4;8379:6;8375:17;8365:27;;8321:81;8449:2;8441:6;8438:14;8418:18;8415:38;8412:84;;;8468:18;;:::i;:::-;8412:84;8233:269;8182:320;;;:::o;8508:227::-;8648:34;8644:1;8636:6;8632:14;8625:58;8717:10;8712:2;8704:6;8700:15;8693:35;8508:227;:::o;8741:366::-;8883:3;8904:67;8968:2;8963:3;8904:67;:::i;:::-;8897:74;;8980:93;9069:3;8980:93;:::i;:::-;9098:2;9093:3;9089:12;9082:19;;8741:366;;;:::o;9113:419::-;9279:4;9317:2;9306:9;9302:18;9294:26;;9366:9;9360:4;9356:20;9352:1;9341:9;9337:17;9330:47;9394:131;9520:4;9394:131;:::i;:::-;9386:139;;9113:419;;;:::o;9538:234::-;9678:34;9674:1;9666:6;9662:14;9655:58;9747:17;9742:2;9734:6;9730:15;9723:42;9538:234;:::o;9778:366::-;9920:3;9941:67;10005:2;10000:3;9941:67;:::i;:::-;9934:74;;10017:93;10106:3;10017:93;:::i;:::-;10135:2;10130:3;10126:12;10119:19;;9778:366;;;:::o;10150:419::-;10316:4;10354:2;10343:9;10339:18;10331:26;;10403:9;10397:4;10393:20;10389:1;10378:9;10374:17;10367:47;10431:131;10557:4;10431:131;:::i;:::-;10423:139;;10150:419;;;:::o;10575:180::-;10623:77;10620:1;10613:88;10720:4;10717:1;10710:15;10744:4;10741:1;10734:15;10761:305;10801:3;10820:20;10838:1;10820:20;:::i;:::-;10815:25;;10854:20;10872:1;10854:20;:::i;:::-;10849:25;;11008:1;10940:66;10936:74;10933:1;10930:81;10927:107;;;11014:18;;:::i;:::-;10927:107;11058:1;11055;11051:9;11044:16;;10761:305;;;;:::o;11072:224::-;11212:34;11208:1;11200:6;11196:14;11189:58;11281:7;11276:2;11268:6;11264:15;11257:32;11072:224;:::o;11302:366::-;11444:3;11465:67;11529:2;11524:3;11465:67;:::i;:::-;11458:74;;11541:93;11630:3;11541:93;:::i;:::-;11659:2;11654:3;11650:12;11643:19;;11302:366;;;:::o;11674:419::-;11840:4;11878:2;11867:9;11863:18;11855:26;;11927:9;11921:4;11917:20;11913:1;11902:9;11898:17;11891:47;11955:131;12081:4;11955:131;:::i;:::-;11947:139;;11674:419;;;:::o;12099:223::-;12239:34;12235:1;12227:6;12223:14;12216:58;12308:6;12303:2;12295:6;12291:15;12284:31;12099:223;:::o;12328:366::-;12470:3;12491:67;12555:2;12550:3;12491:67;:::i;:::-;12484:74;;12567:93;12656:3;12567:93;:::i;:::-;12685:2;12680:3;12676:12;12669:19;;12328:366;;;:::o;12700:419::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12953:9;12947:4;12943:20;12939:1;12928:9;12924:17;12917:47;12981:131;13107:4;12981:131;:::i;:::-;12973:139;;12700:419;;;:::o;13125:221::-;13265:34;13261:1;13253:6;13249:14;13242:58;13334:4;13329:2;13321:6;13317:15;13310:29;13125:221;:::o;13352:366::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:419::-;13890:4;13928:2;13917:9;13913:18;13905:26;;13977:9;13971:4;13967:20;13963:1;13952:9;13948:17;13941:47;14005:131;14131:4;14005:131;:::i;:::-;13997:139;;13724:419;;;:::o;14149:224::-;14289:34;14285:1;14277:6;14273:14;14266:58;14358:7;14353:2;14345:6;14341:15;14334:32;14149:224;:::o;14379:366::-;14521:3;14542:67;14606:2;14601:3;14542:67;:::i;:::-;14535:74;;14618:93;14707:3;14618:93;:::i;:::-;14736:2;14731:3;14727:12;14720:19;;14379:366;;;:::o;14751:419::-;14917:4;14955:2;14944:9;14940:18;14932:26;;15004:9;14998:4;14994:20;14990:1;14979:9;14975:17;14968:47;15032:131;15158:4;15032:131;:::i;:::-;15024:139;;14751:419;;;:::o;15176:222::-;15316:34;15312:1;15304:6;15300:14;15293:58;15385:5;15380:2;15372:6;15368:15;15361:30;15176:222;:::o;15404:366::-;15546:3;15567:67;15631:2;15626:3;15567:67;:::i;:::-;15560:74;;15643:93;15732:3;15643:93;:::i;:::-;15761:2;15756:3;15752:12;15745:19;;15404:366;;;:::o;15776:419::-;15942:4;15980:2;15969:9;15965:18;15957:26;;16029:9;16023:4;16019:20;16015:1;16004:9;16000:17;15993:47;16057:131;16183:4;16057:131;:::i;:::-;16049:139;;15776:419;;;:::o;16201:225::-;16341:34;16337:1;16329:6;16325:14;16318:58;16410:8;16405:2;16397:6;16393:15;16386:33;16201:225;:::o;16432:366::-;16574:3;16595:67;16659:2;16654:3;16595:67;:::i;:::-;16588:74;;16671:93;16760:3;16671:93;:::i;:::-;16789:2;16784:3;16780:12;16773:19;;16432:366;;;:::o;16804:419::-;16970:4;17008:2;16997:9;16993:18;16985:26;;17057:9;17051:4;17047:20;17043:1;17032:9;17028:17;17021:47;17085:131;17211:4;17085:131;:::i;:::-;17077:139;;16804:419;;;:::o;17229:148::-;17331:11;17368:3;17353:18;;17229:148;;;;:::o;17383:173::-;17523:25;17519:1;17511:6;17507:14;17500:49;17383:173;:::o;17562:402::-;17722:3;17743:85;17825:2;17820:3;17743:85;:::i;:::-;17736:92;;17837:93;17926:3;17837:93;:::i;:::-;17955:2;17950:3;17946:12;17939:19;;17562:402;;;:::o;17970:377::-;18076:3;18104:39;18137:5;18104:39;:::i;:::-;18159:89;18241:6;18236:3;18159:89;:::i;:::-;18152:96;;18257:52;18302:6;18297:3;18290:4;18283:5;18279:16;18257:52;:::i;:::-;18334:6;18329:3;18325:16;18318:23;;18080:267;17970:377;;;;:::o;18353:167::-;18493:19;18489:1;18481:6;18477:14;18470:43;18353:167;:::o;18526:402::-;18686:3;18707:85;18789:2;18784:3;18707:85;:::i;:::-;18700:92;;18801:93;18890:3;18801:93;:::i;:::-;18919:2;18914:3;18910:12;18903:19;;18526:402;;;:::o;18934:967::-;19316:3;19338:148;19482:3;19338:148;:::i;:::-;19331:155;;19503:95;19594:3;19585:6;19503:95;:::i;:::-;19496:102;;19615:148;19759:3;19615:148;:::i;:::-;19608:155;;19780:95;19871:3;19862:6;19780:95;:::i;:::-;19773:102;;19892:3;19885:10;;18934:967;;;;;:::o;19907:181::-;20047:33;20043:1;20035:6;20031:14;20024:57;19907:181;:::o;20094:366::-;20236:3;20257:67;20321:2;20316:3;20257:67;:::i;:::-;20250:74;;20333:93;20422:3;20333:93;:::i;:::-;20451:2;20446:3;20442:12;20435:19;;20094:366;;;:::o;20466:419::-;20632:4;20670:2;20659:9;20655:18;20647:26;;20719:9;20713:4;20709:20;20705:1;20694:9;20690:17;20683:47;20747:131;20873:4;20747:131;:::i;:::-;20739:139;;20466:419;;;:::o;20891:220::-;21031:34;21027:1;21019:6;21015:14;21008:58;21100:3;21095:2;21087:6;21083:15;21076:28;20891:220;:::o;21117:366::-;21259:3;21280:67;21344:2;21339:3;21280:67;:::i;:::-;21273:74;;21356:93;21445:3;21356:93;:::i;:::-;21474:2;21469:3;21465:12;21458:19;;21117:366;;;:::o;21489:419::-;21655:4;21693:2;21682:9;21678:18;21670:26;;21742:9;21736:4;21732:20;21728:1;21717:9;21713:17;21706:47;21770:131;21896:4;21770:131;:::i;:::-;21762:139;;21489:419;;;:::o;21914:221::-;22054:34;22050:1;22042:6;22038:14;22031:58;22123:4;22118:2;22110:6;22106:15;22099:29;21914:221;:::o;22141:366::-;22283:3;22304:67;22368:2;22363:3;22304:67;:::i;:::-;22297:74;;22380:93;22469:3;22380:93;:::i;:::-;22498:2;22493:3;22489:12;22482:19;;22141:366;;;:::o;22513:419::-;22679:4;22717:2;22706:9;22702:18;22694:26;;22766:9;22760:4;22756:20;22752:1;22741:9;22737:17;22730:47;22794:131;22920:4;22794:131;:::i;:::-;22786:139;;22513:419;;;:::o;22938:191::-;22978:4;22998:20;23016:1;22998:20;:::i;:::-;22993:25;;23032:20;23050:1;23032:20;:::i;:::-;23027:25;;23071:1;23068;23065:8;23062:34;;;23076:18;;:::i;:::-;23062:34;23121:1;23118;23114:9;23106:17;;22938:191;;;;:::o;23135:348::-;23175:7;23198:20;23216:1;23198:20;:::i;:::-;23193:25;;23232:20;23250:1;23232:20;:::i;:::-;23227:25;;23420:1;23352:66;23348:74;23345:1;23342:81;23337:1;23330:9;23323:17;23319:105;23316:131;;;23427:18;;:::i;:::-;23316:131;23475:1;23472;23468:9;23457:20;;23135:348;;;;:::o;23489:180::-;23537:77;23534:1;23527:88;23634:4;23631:1;23624:15;23658:4;23655:1;23648:15;23675:180;23723:77;23720:1;23713:88;23820:4;23817:1;23810:15;23844:4;23841:1;23834:15;23861:171;23900:3;23923:24;23941:5;23923:24;:::i;:::-;23914:33;;23969:4;23962:5;23959:15;23956:41;;;23977:18;;:::i;:::-;23956:41;24024:1;24017:5;24013:13;24006:20;;23861:171;;;:::o;24038:182::-;24178:34;24174:1;24166:6;24162:14;24155:58;24038:182;:::o;24226:366::-;24368:3;24389:67;24453:2;24448:3;24389:67;:::i;:::-;24382:74;;24465:93;24554:3;24465:93;:::i;:::-;24583:2;24578:3;24574:12;24567:19;;24226:366;;;:::o;24598:419::-;24764:4;24802:2;24791:9;24787:18;24779:26;;24851:9;24845:4;24841:20;24837:1;24826:9;24822:17;24815:47;24879:131;25005:4;24879:131;:::i;:::-;24871:139;;24598:419;;;:::o

Swarm Source

ipfs://dae817b314fac3449a34b6688e2f9b48b91016fae7468c053a3a0944857251af
Loading