{"id":"340b72d06961c01a4f5376e3d6bb818e","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@openzeppelin/contracts/access/AccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (access/AccessControl.sol)\n\npragma solidity ^0.8.20;\n\nimport {IAccessControl} from \"./IAccessControl.sol\";\nimport {Context} from \"../utils/Context.sol\";\nimport {ERC165} from \"../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```solidity\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```solidity\n * function foo() public {\n *     require(hasRole(MY_ROLE, msg.sender));\n *     ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\n * to enforce additional security measures for this role.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n    struct RoleData {\n        mapping(address account => bool) hasRole;\n        bytes32 adminRole;\n    }\n\n    mapping(bytes32 role => RoleData) private _roles;\n\n    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n    /**\n     * @dev Modifier that checks that an account has a specific role. Reverts\n     * with an {AccessControlUnauthorizedAccount} error including the required role.\n     */\n    modifier onlyRole(bytes32 role) {\n        _checkRole(role);\n        _;\n    }\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev Returns `true` if `account` has been granted `role`.\n     */\n    function hasRole(bytes32 role, address account) public view virtual returns (bool) {\n        return _roles[role].hasRole[account];\n    }\n\n    /**\n     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`\n     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.\n     */\n    function _checkRole(bytes32 role) internal view virtual {\n        _checkRole(role, _msgSender());\n    }\n\n    /**\n     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`\n     * is missing `role`.\n     */\n    function _checkRole(bytes32 role, address account) internal view virtual {\n        if (!hasRole(role, account)) {\n            revert AccessControlUnauthorizedAccount(account, role);\n        }\n    }\n\n    /**\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\n     * {revokeRole}.\n     *\n     * To change a role's admin, use {_setRoleAdmin}.\n     */\n    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {\n        return _roles[role].adminRole;\n    }\n\n    /**\n     * @dev Grants `role` to `account`.\n     *\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     *\n     * May emit a {RoleGranted} event.\n     */\n    function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {\n        _grantRole(role, account);\n    }\n\n    /**\n     * @dev Revokes `role` from `account`.\n     *\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     *\n     * May emit a {RoleRevoked} event.\n     */\n    function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {\n        _revokeRole(role, account);\n    }\n\n    /**\n     * @dev Revokes `role` from the calling account.\n     *\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\n     * purpose is to provide a mechanism for accounts to lose their privileges\n     * if they are compromised (such as when a trusted device is misplaced).\n     *\n     * If the calling account had been revoked `role`, emits a {RoleRevoked}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must be `callerConfirmation`.\n     *\n     * May emit a {RoleRevoked} event.\n     */\n    function renounceRole(bytes32 role, address callerConfirmation) public virtual {\n        if (callerConfirmation != _msgSender()) {\n            revert AccessControlBadConfirmation();\n        }\n\n        _revokeRole(role, callerConfirmation);\n    }\n\n    /**\n     * @dev Sets `adminRole` as ``role``'s admin role.\n     *\n     * Emits a {RoleAdminChanged} event.\n     */\n    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n        bytes32 previousAdminRole = getRoleAdmin(role);\n        _roles[role].adminRole = adminRole;\n        emit RoleAdminChanged(role, previousAdminRole, adminRole);\n    }\n\n    /**\n     * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.\n     *\n     * Internal function without access restriction.\n     *\n     * May emit a {RoleGranted} event.\n     */\n    function _grantRole(bytes32 role, address account) internal virtual returns (bool) {\n        if (!hasRole(role, account)) {\n            _roles[role].hasRole[account] = true;\n            emit RoleGranted(role, account, _msgSender());\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.\n     *\n     * Internal function without access restriction.\n     *\n     * May emit a {RoleRevoked} event.\n     */\n    function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {\n        if (hasRole(role, account)) {\n            _roles[role].hasRole[account] = false;\n            emit RoleRevoked(role, account, _msgSender());\n            return true;\n        } else {\n            return false;\n        }\n    }\n}\n"},"@openzeppelin/contracts/access/IAccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (access/IAccessControl.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev External interface of AccessControl declared to support ERC-165 detection.\n */\ninterface IAccessControl {\n    /**\n     * @dev The `account` is missing a role.\n     */\n    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);\n\n    /**\n     * @dev The caller of a function is not the expected one.\n     *\n     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\n     */\n    error AccessControlBadConfirmation();\n\n    /**\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n     *\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n     * {RoleAdminChanged} not being emitted to signal this.\n     */\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n    /**\n     * @dev Emitted when `account` is granted `role`.\n     *\n     * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).\n     * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\n     */\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n    /**\n     * @dev Emitted when `account` is revoked `role`.\n     *\n     * `sender` is the account that originated the contract call:\n     *   - if using `revokeRole`, it is the admin role bearer\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\n     */\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n    /**\n     * @dev Returns `true` if `account` has been granted `role`.\n     */\n    function hasRole(bytes32 role, address account) external view returns (bool);\n\n    /**\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\n     * {revokeRole}.\n     *\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n     */\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n    /**\n     * @dev Grants `role` to `account`.\n     *\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     */\n    function grantRole(bytes32 role, address account) external;\n\n    /**\n     * @dev Revokes `role` from `account`.\n     *\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     */\n    function revokeRole(bytes32 role, address account) external;\n\n    /**\n     * @dev Revokes `role` from the calling account.\n     *\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\n     * purpose is to provide a mechanism for accounts to lose their privileges\n     * if they are compromised (such as when a trusted device is misplaced).\n     *\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must be `callerConfirmation`.\n     */\n    function renounceRole(bytes32 role, address callerConfirmation) external;\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/finance/VestingWallet.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (finance/VestingWallet.sol)\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"../token/ERC20/utils/SafeERC20.sol\";\nimport {Address} from \"../utils/Address.sol\";\nimport {Context} from \"../utils/Context.sol\";\nimport {Ownable} from \"../access/Ownable.sol\";\n\n/**\n * @dev A vesting wallet is an ownable contract that can receive native currency and ERC-20 tokens, and release these\n * assets to the wallet owner, also referred to as \"beneficiary\", according to a vesting schedule.\n *\n * Any assets transferred to this contract will follow the vesting schedule as if they were locked from the beginning.\n * Consequently, if the vesting has already started, any amount of tokens sent to this contract will (at least partly)\n * be immediately releasable.\n *\n * By setting the duration to 0, one can configure this contract to behave like an asset timelock that holds tokens for\n * a beneficiary until a specified time.\n *\n * NOTE: Since the wallet is {Ownable}, and ownership can be transferred, it is possible to sell unvested tokens.\n * Preventing this in a smart contract is difficult, considering that: 1) a beneficiary address could be a\n * counterfactually deployed contract, 2) there is likely to be a migration path for EOAs to become contracts in the\n * near future.\n *\n * NOTE: When using this contract with any token whose balance is adjusted automatically (i.e. a rebase token), make\n * sure to account the supply/balance adjustment in the vesting schedule to ensure the vested amount is as intended.\n *\n * NOTE: Chains with support for native ERC20s may allow the vesting wallet to withdraw the underlying asset as both an\n * ERC20 and as native currency. For example, if chain C supports token A and the wallet gets deposited 100 A, then\n * at 50% of the vesting period, the beneficiary can withdraw 50 A as ERC20 and 25 A as native currency (totaling 75 A).\n * Consider disabling one of the withdrawal methods.\n */\ncontract VestingWallet is Context, Ownable {\n    event EtherReleased(uint256 amount);\n    event ERC20Released(address indexed token, uint256 amount);\n\n    uint256 private _released;\n    mapping(address token => uint256) private _erc20Released;\n    uint64 private immutable _start;\n    uint64 private immutable _duration;\n\n    /**\n     * @dev Sets the beneficiary (owner), the start timestamp and the vesting duration (in seconds) of the vesting\n     * wallet.\n     */\n    constructor(address beneficiary, uint64 startTimestamp, uint64 durationSeconds) payable Ownable(beneficiary) {\n        _start = startTimestamp;\n        _duration = durationSeconds;\n    }\n\n    /**\n     * @dev The contract should be able to receive Eth.\n     */\n    receive() external payable virtual {}\n\n    /**\n     * @dev Getter for the start timestamp.\n     */\n    function start() public view virtual returns (uint256) {\n        return _start;\n    }\n\n    /**\n     * @dev Getter for the vesting duration.\n     */\n    function duration() public view virtual returns (uint256) {\n        return _duration;\n    }\n\n    /**\n     * @dev Getter for the end timestamp.\n     */\n    function end() public view virtual returns (uint256) {\n        return start() + duration();\n    }\n\n    /**\n     * @dev Amount of eth already released\n     */\n    function released() public view virtual returns (uint256) {\n        return _released;\n    }\n\n    /**\n     * @dev Amount of token already released\n     */\n    function released(address token) public view virtual returns (uint256) {\n        return _erc20Released[token];\n    }\n\n    /**\n     * @dev Getter for the amount of releasable eth.\n     */\n    function releasable() public view virtual returns (uint256) {\n        return vestedAmount(uint64(block.timestamp)) - released();\n    }\n\n    /**\n     * @dev Getter for the amount of releasable `token` tokens. `token` should be the address of an\n     * {IERC20} contract.\n     */\n    function releasable(address token) public view virtual returns (uint256) {\n        return vestedAmount(token, uint64(block.timestamp)) - released(token);\n    }\n\n    /**\n     * @dev Release the native token (ether) that have already vested.\n     *\n     * Emits a {EtherReleased} event.\n     */\n    function release() public virtual {\n        uint256 amount = releasable();\n        _released += amount;\n        emit EtherReleased(amount);\n        Address.sendValue(payable(owner()), amount);\n    }\n\n    /**\n     * @dev Release the tokens that have already vested.\n     *\n     * Emits a {ERC20Released} event.\n     */\n    function release(address token) public virtual {\n        uint256 amount = releasable(token);\n        _erc20Released[token] += amount;\n        emit ERC20Released(token, amount);\n        SafeERC20.safeTransfer(IERC20(token), owner(), amount);\n    }\n\n    /**\n     * @dev Calculates the amount of ether that has already vested. Default implementation is a linear vesting curve.\n     */\n    function vestedAmount(uint64 timestamp) public view virtual returns (uint256) {\n        return _vestingSchedule(address(this).balance + released(), timestamp);\n    }\n\n    /**\n     * @dev Calculates the amount of tokens that has already vested. Default implementation is a linear vesting curve.\n     */\n    function vestedAmount(address token, uint64 timestamp) public view virtual returns (uint256) {\n        return _vestingSchedule(IERC20(token).balanceOf(address(this)) + released(token), timestamp);\n    }\n\n    /**\n     * @dev Virtual implementation of the vesting formula. This returns the amount vested, as a function of time, for\n     * an asset given its total historical allocation.\n     */\n    function _vestingSchedule(uint256 totalAllocation, uint64 timestamp) internal view virtual returns (uint256) {\n        if (timestamp < start()) {\n            return 0;\n        } else if (timestamp >= end()) {\n            return totalAllocation;\n        } else {\n            return (totalAllocation * (timestamp - start())) / duration();\n        }\n    }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n    /*\n     * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n     * 0xb0202a11 ===\n     *   bytes4(keccak256('transferAndCall(address,uint256)')) ^\n     *   bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n     *   bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n     *   bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n     *   bytes4(keccak256('approveAndCall(address,uint256)')) ^\n     *   bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n     */\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferAndCall(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @param data Additional data with no specified format, sent in call to `to`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param from The address which you want to send tokens from.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param from The address which you want to send tokens from.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @param data Additional data with no specified format, sent in call to `to`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function approveAndCall(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     * @param data Additional data with no specified format, sent in call to `spender`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n"},"@openzeppelin/contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n    mapping(address account => uint256) private _balances;\n\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * Both values are immutable: they can only be set once during construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            _totalSupply += value;\n        } else {\n            uint256 fromBalance = _balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                _totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n     * true using the following override:\n     *\n     * ```solidity\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        _allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance < type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    /**\n     * @dev An operation with an ERC-20 token failed.\n     */\n    error SafeERC20FailedOperation(address token);\n\n    /**\n     * @dev Indicates a failed `decreaseAllowance` request.\n     */\n    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n    /**\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     */\n    function safeTransfer(IERC20 token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n    }\n\n    /**\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n     */\n    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n    }\n\n    /**\n     * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n     */\n    function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n        return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));\n    }\n\n    /**\n     * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n     */\n    function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n        return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n    }\n\n    /**\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     *\n     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n     * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n     */\n    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 oldAllowance = token.allowance(address(this), spender);\n        forceApprove(token, spender, oldAllowance + value);\n    }\n\n    /**\n     * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n     * value, non-reverting calls are assumed to be successful.\n     *\n     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n     * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n     */\n    function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n        unchecked {\n            uint256 currentAllowance = token.allowance(address(this), spender);\n            if (currentAllowance < requestedDecrease) {\n                revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n            }\n            forceApprove(token, spender, currentAllowance - requestedDecrease);\n        }\n    }\n\n    /**\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n     * to be set to zero before setting it to a non-zero value, such as USDT.\n     *\n     * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n     * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n     * set here.\n     */\n    function forceApprove(IERC20 token, address spender, uint256 value) internal {\n        bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n        if (!_callOptionalReturnBool(token, approvalCall)) {\n            _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n            _callOptionalReturn(token, approvalCall);\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n        if (to.code.length == 0) {\n            safeTransfer(token, to, value);\n        } else if (!token.transferAndCall(to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n     * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function transferFromAndCallRelaxed(\n        IERC1363 token,\n        address from,\n        address to,\n        uint256 value,\n        bytes memory data\n    ) internal {\n        if (to.code.length == 0) {\n            safeTransferFrom(token, from, to, value);\n        } else if (!token.transferFromAndCall(from, to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n     * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n     * once without retrying, and relies on the returned value to be true.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n        if (to.code.length == 0) {\n            forceApprove(token, to, value);\n        } else if (!token.approveAndCall(to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly (\"memory-safe\") {\n            let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            // bubble errors\n            if iszero(success) {\n                let ptr := mload(0x40)\n                returndatacopy(ptr, 0, returndatasize())\n                revert(ptr, returndatasize())\n            }\n            returnSize := returndatasize()\n            returnValue := mload(0)\n        }\n\n        if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n     */\n    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n        bool success;\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly (\"memory-safe\") {\n            success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            returnSize := returndatasize()\n            returnValue := mload(0)\n        }\n        return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n    }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev There's no code at `target` (it is not a contract).\n     */\n    error AddressEmptyCode(address target);\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        if (address(this).balance < amount) {\n            revert Errors.InsufficientBalance(address(this).balance, amount);\n        }\n\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\"\");\n        if (!success) {\n            _revert(returndata);\n        }\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason or custom error, it is bubbled\n     * up by this function (like regular Solidity function calls). However, if\n     * the call reverted with no returned reason, this function reverts with a\n     * {Errors.FailedCall} error.\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        if (address(this).balance < value) {\n            revert Errors.InsufficientBalance(address(this).balance, value);\n        }\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n     * of an unsuccessful call.\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata\n    ) internal view returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            // only check if target is a contract if the call was successful and the return data is empty\n            // otherwise we already know that it was a contract\n            if (returndata.length == 0 && target.code.length == 0) {\n                revert AddressEmptyCode(target);\n            }\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n     * revert reason or with a default {Errors.FailedCall} error.\n     */\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n     */\n    function _revert(bytes memory returndata) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            assembly (\"memory-safe\") {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert Errors.FailedCall();\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"@openzeppelin/contracts/utils/Errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n    /**\n     * @dev The ETH balance of the account is not enough to perform the operation.\n     */\n    error InsufficientBalance(uint256 balance, uint256 needed);\n\n    /**\n     * @dev A call to an address target failed. The target may have reverted.\n     */\n    error FailedCall();\n\n    /**\n     * @dev The deployment failed.\n     */\n    error FailedDeployment();\n\n    /**\n     * @dev A necessary precompile is missing.\n     */\n    error MissingPrecompile(address);\n}\n"},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n        return interfaceId == type(IERC165).interfaceId;\n    }\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/Pausable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n    bool private _paused;\n\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    /**\n     * @dev The operation failed because the contract is paused.\n     */\n    error EnforcedPause();\n\n    /**\n     * @dev The operation failed because the contract is not paused.\n     */\n    error ExpectedPause();\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        _requireNotPaused();\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        _requirePaused();\n        _;\n    }\n\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view virtual returns (bool) {\n        return _paused;\n    }\n\n    /**\n     * @dev Throws if the contract is paused.\n     */\n    function _requireNotPaused() internal view virtual {\n        if (paused()) {\n            revert EnforcedPause();\n        }\n    }\n\n    /**\n     * @dev Throws if the contract is not paused.\n     */\n    function _requirePaused() internal view virtual {\n        if (!paused()) {\n            revert ExpectedPause();\n        }\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        _paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        _paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n"},"@openzeppelin/contracts/utils/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    uint256 private _status;\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    constructor() {\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if (_status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        _status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == ENTERED;\n    }\n}\n"},"contracts/ExampleCrowdSale.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { CrowdSale } from \"./library/CrowdSale.sol\";\n\n/**\n * @title ExampleCrowdSale\n */\ncontract ExampleCrowdSale is CrowdSale {\n    constructor(\n        address priceFeed_,\n        address token_,\n        address payable wallet_,\n        uint256 usdRate_,\n        uint256 vestingEndDate_,\n        address vestingVault_\n    )\n        CrowdSale(priceFeed_, token_, wallet_, usdRate_, vestingEndDate_, vestingVault_)\n    { }\n}\n"},"contracts/ExampleToken.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { AccessControl } from \"@openzeppelin/contracts/access/AccessControl.sol\";\nimport { ERC165 } from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\n\ncontract ExampleToken is ERC165, ERC20, AccessControl {\n    constructor(string memory name_, string memory symbol_, uint256 supply_, address wallet_) ERC20(name_, symbol_) {\n        _grantRole(DEFAULT_ADMIN_ROLE, _msgSender());\n        // We will mint all tokens in one go, and send them to a wallet\n        _mint(wallet_, supply_);\n    }\n\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, AccessControl) returns (bool) {\n        return super.supportsInterface(interfaceId); // ERC165, AccessControl\n    }\n}\n"},"contracts/ExampleVestingVault.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { VestingVault } from \"./library/VestingVault.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ncontract ExampleVestingVault is VestingVault {\n    constructor(IERC20 token_) VestingVault(token_) { }\n}\n"},"contracts/ExampleVestingWallet.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { VestingWallet } from \"@openzeppelin/contracts/finance/VestingWallet.sol\";\n\ncontract ExampleVestingWallet is VestingWallet {\n    constructor(\n        address beneficiaryAddress,\n        uint64 startTimestamp,\n        uint64 durationSeconds\n    )\n        VestingWallet(beneficiaryAddress, startTimestamp, durationSeconds)\n    { }\n}\n"},"contracts/library/AggregatorV3Interface.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// source:\n// https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\npragma solidity ^0.8.24;\n\ninterface AggregatorV3Interface {\n    function decimals() external view returns (uint8);\n\n    function description() external view returns (string memory);\n\n    function version() external view returns (uint256);\n\n    // getRoundData and latestRoundData should both raise \"No data present\"\n    // if they do not have data to report, instead of returning unset values\n    // which could be misinterpreted as actual reported values.\n    function getRoundData(uint80 _roundId)\n        external\n        view\n        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\n\n    function latestRoundData()\n        external\n        view\n        returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\n}\n"},"contracts/library/CrowdSale.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { Context } from \"@openzeppelin/contracts/utils/Context.sol\";\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Pausable } from \"@openzeppelin/contracts/utils/Pausable.sol\";\nimport { AccessControl } from \"@openzeppelin/contracts/access/AccessControl.sol\";\nimport { ERC165 } from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport { ReentrancyGuard } from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport { AggregatorV3Interface } from \"./AggregatorV3Interface.sol\";\nimport { VestingVault } from \"./VestingVault.sol\";\nimport { ICrowdSale } from \"./ICrowdSale.sol\";\n\n/**\n * @title CrowdSale\n */\ncontract CrowdSale is Context, ERC165, Pausable, AccessControl, ReentrancyGuard, ICrowdSale {\n    bytes32 public constant WHITELISTED_ROLE = keccak256(\"WHITELISTED_ROLE\");\n\n    // The token being sold\n    IERC20 private _token;\n\n    // The price feed for conversion rates from Matic to USD\n    // Learn more: https://docs.chain.link/docs/matic-addresses/\n    AggregatorV3Interface internal priceFeed;\n\n    // Number of tokens for one USD\n    uint256 private _usdRate;\n\n    // Address where funds are collected\n    address payable private _wallet;\n\n    // Amount of wei raised\n    uint256 private _fundsRaised;\n\n    // vesting end date\n    uint256 private _vestingEndDate;\n\n    // vesting vault\n    VestingVault private _vestingVault;\n\n    struct Vesting {\n        uint256 amount;\n        uint256 cliff;\n    }\n\n    // Mapping of addresses to Vestings\n    mapping(address => Vesting) private _vested;\n\n    constructor(\n        address priceFeed_,\n        address token_,\n        address payable wallet_,\n        uint256 usdRate_,\n        uint256 vestingEndDate_,\n        address vestingVault_\n    ) {\n        require(wallet_ != address(0), \"Crowdsale: wallet is the zero address\");\n        require(token_ != address(0), \"Crowdsale: token is the zero address\");\n\n        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);\n        priceFeed = AggregatorV3Interface(priceFeed_);\n        _token = IERC20(token_);\n        _wallet = wallet_;\n        _usdRate = usdRate_;\n        _vestingEndDate = vestingEndDate_;\n        _vestingVault = VestingVault(vestingVault_);\n    }\n\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, AccessControl) returns (bool) {\n        return interfaceId == type(ICrowdSale).interfaceId || interfaceId == type(Pausable).interfaceId\n            || super.supportsInterface(interfaceId); // ERC165, AccessControl\n    }\n\n    /**\n     * @dev executed on a call to the contract if none of the other functions match the given function signature,\n     * or if no data was supplied at all and there is no receive Ether function\n     * Note that other contracts will transfer funds with a base gas stipend\n     * of 2300, which is not enough to call buyTokens. Consider calling\n     * buyTokens directly when purchasing tokens from a contract.\n     * Learn more: https://docs.soliditylang.org/en/latest/contracts.html#fallback-function\n     */\n    fallback() external payable {\n        buyTokens(_msgSender());\n    }\n\n    /**\n     * @dev is executed on a call to the contract with empty calldata\n     * Note that other contracts will transfer funds with a base gas stipend\n     * of 2300, which is not enough to call buyTokens. Consider calling\n     * buyTokens directly when purchasing tokens from a contract.\n     * Learn more: https://docs.soliditylang.org/en/latest/contracts.html#receive-ether-function\n     */\n    receive() external payable {\n        buyTokens(_msgSender());\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     * - The sender of the transaction must have the DEFAULT_ADMIN_ROLE\n     */\n    function pause() public whenNotPaused {\n        _pause();\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     * - The sender of the transaction must have the DEFAULT_ADMIN_ROLE\n     */\n    function unpause() public whenPaused {\n        _unpause();\n    }\n\n    /**\n     * @return the address of the token being sold.\n     */\n    function token() public view override returns (IERC20) {\n        return _token;\n    }\n\n    /**\n     * @return the address where funds are collected.\n     */\n    function wallet() public view override returns (address payable) {\n        return _wallet;\n    }\n\n    /**\n     * @return the amount of funds raised.\n     */\n    function fundsRaised() public view override returns (uint256) {\n        return _fundsRaised;\n    }\n\n    /**\n     * @return the amount tokens available to the crowdsale for selling.\n     */\n    function tokensAvailable() public view override returns (uint256) {\n        return token().balanceOf(address(this));\n    }\n\n    /**\n     * @dev utility function to allow the owner to handle private and bitcoin buyers\n     * This function has a non-reentrancy guard, so it shouldn't be called by\n     * another `nonReentrant` function.\n     * @param tokenAmount Number of tokens to be purchased\n     * @param beneficiary Recipient of the token purchase\n     */\n    function externalBuyTokens(\n        address beneficiary,\n        uint256 tokenAmount\n    )\n        public\n        override\n        nonReentrant\n        whenNotPaused\n        onlyRole(DEFAULT_ADMIN_ROLE)\n    {\n        uint256 weiAmount = getWeiAmount(tokenAmount);\n        preValidatePurchase(beneficiary, weiAmount);\n        _fundsRaised += weiAmount;\n        processPurchase(beneficiary, tokenAmount);\n        emit TokensPurchased(_msgSender(), beneficiary, weiAmount, tokenAmount);\n        updatePurchasingState(beneficiary, weiAmount);\n        postValidatePurchase(beneficiary, weiAmount);\n    }\n\n    /**\n     * @dev low level token purchase\n     * This function has a non-reentrancy guard, so it shouldn't be called by\n     * another `nonReentrant` function.\n     * @param beneficiary Recipient of the token purchase\n     */\n    function buyTokens(address beneficiary)\n        public\n        payable\n        override\n        nonReentrant\n        whenNotPaused\n        onlyRole(WHITELISTED_ROLE)\n    {\n        uint256 weiAmount = msg.value;\n        preValidatePurchase(beneficiary, weiAmount);\n\n        uint256 tokenAmount = getTokenAmount(weiAmount);\n\n        _fundsRaised += weiAmount;\n        processPurchase(beneficiary, tokenAmount);\n        emit TokensPurchased(_msgSender(), beneficiary, weiAmount, tokenAmount);\n        updatePurchasingState(beneficiary, weiAmount);\n        forwardFunds();\n        postValidatePurchase(beneficiary, weiAmount);\n    }\n\n    /**\n     * @dev Validates beneficiary and weiAmount before executing purchase\n     */\n    function preValidatePurchase(address beneficiary, uint256 weiAmount) internal view {\n        require(beneficiary != address(0), \"Crowdsale: beneficiary is the zero address\");\n        require(weiAmount != 0, \"Crowdsale: amount is 0\");\n        this; // silence state mutability warning without generating bytecode - see\n            // https://github.com/ethereum/solidity/issues/2691\n    }\n\n    /**\n     * @dev Executed when a purchase has been validated and is ready to be executed. Doesn't necessarily emit/send\n     * tokens.\n     * @param beneficiary Address receiving the tokens\n     * @param tokenAmount Number of tokens to be purchased\n     */\n    function processPurchase(address beneficiary, uint256 tokenAmount) internal {\n        if (_vestingEndDate > 0) {\n            _vestingVault.addBeneficiary(beneficiary, _vestingEndDate, tokenAmount);\n            deliverTokens(address(_vestingVault), tokenAmount);\n        } else {\n            deliverTokens(beneficiary, tokenAmount);\n        }\n    }\n\n    /**\n     * @dev Transfer of tokens from crowdsale to beneficiary. Override this method to modify the way in which the\n     * crowdsale ultimately gets and sends its tokens.\n     * @param beneficiary Address performing the token purchase\n     * @param tokenAmount Number of tokens to be transferred\n     */\n    function deliverTokens(address beneficiary, uint256 tokenAmount) internal {\n        bool success = _token.transfer(beneficiary, tokenAmount);\n        require(success, \"Transfer unsuccessful\");\n    }\n\n    /**\n     * @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid\n     * conditions are not met.\n     * @param beneficiary Address performing the token purchase\n     * @param weiAmount Value in wei involved in the purchase\n     */\n    function postValidatePurchase(address beneficiary, uint256 weiAmount) internal view {\n        // solhint-disable-previous-line no-empty-blocks\n    }\n\n    /**\n     * @dev Override for extensions that require an internal state to check for validity (current user contributions,\n     * etc.)\n     * @param beneficiary Address receiving the tokens\n     * @param weiAmount Value in wei involved in the purchase\n     */\n    function updatePurchasingState(address beneficiary, uint256 weiAmount) internal {\n        // solhint-disable-previous-line no-empty-blocks\n    }\n\n    /**\n     * @dev Converts the weiAmount into equivalent number of tokens\n     * @param weiAmount Value of wei for conversion\n     */\n    function getTokenAmount(uint256 weiAmount) public view returns (uint256) {\n        if (address(priceFeed) != address(0)) {\n            // slither-disable-next-line all\n            (, int256 price,,,) = priceFeed.latestRoundData();\n            return ((weiAmount * uint256(price)) * _usdRate) / 10 ** 8;\n        }\n        return ((weiAmount * 10) * _usdRate); // fixed rate of 10 USD per ETH\n    }\n\n    /**\n     * @dev Converts the tokenAmount into equivalent number of wei\n     * @param tokenAmount Number of tokens for convertion\n     */\n    function getWeiAmount(uint256 tokenAmount) public view returns (uint256) {\n        if (address(priceFeed) != address(0)) {\n            // slither-disable-next-line all\n            (, int256 price,,,) = priceFeed.latestRoundData();\n            return (tokenAmount * 10 ** 8) / (uint256(price) * _usdRate);\n        }\n        return (((tokenAmount) * _usdRate) / 10); // fixed rate of 10 USD per ETH\n    }\n\n    /**\n     * @dev Determines how ETH is stored/forwarded on purchases.\n     */\n    function forwardFunds() internal {\n        _wallet.transfer(msg.value);\n    }\n}\n"},"contracts/library/ICrowdSale.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/**\n * @title ICrowdSale\n */\ninterface ICrowdSale {\n    event TokensPurchased(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);\n\n    function token() external view returns (IERC20);\n\n    function wallet() external view returns (address payable);\n\n    function fundsRaised() external view returns (uint256);\n\n    function tokensAvailable() external view returns (uint256);\n\n    function buyTokens(address beneficiary) external payable;\n\n    function externalBuyTokens(address beneficiary, uint256 tokenAmount) external;\n}\n"},"contracts/library/IVestingVault.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IVestingVault {\n    struct Vesting {\n        // Beneficiary of tokens after they are released\n        address beneficiary;\n        // Timestamp when token release is enabled\n        uint256 releaseTime;\n        // Amount of tokens to release\n        uint256 tokenAmount;\n    }\n\n    event VestingLockedIn(address indexed beneficiary, uint256 releaseTime, uint256 tokenAmount);\n    event VestingReleased(address indexed beneficiary, uint256 releaseTime, uint256 tokenAmount);\n\n    function addBeneficiary(address beneficiary_, uint256 releaseTime_, uint256 tokenAmount_) external;\n\n    function token() external view returns (IERC20);\n\n    function vestingFor(address beneficary_) external view returns (Vesting[] memory);\n\n    function release() external;\n}\n"},"contracts/library/VestingVault.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { IVestingVault } from \"./IVestingVault.sol\";\nimport { AccessControl } from \"@openzeppelin/contracts/access/AccessControl.sol\";\nimport { ERC165 } from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/**\n * @title VestingVault\n */\ncontract VestingVault is IVestingVault, ERC165, AccessControl {\n    bytes32 public constant VAULT_CONTROLLER_ROLE = keccak256(\"VAULT_CONTROLLER_ROLE\");\n    IERC20 private immutable _token;\n    mapping(address => Vesting[]) private _vesting;\n\n    constructor(IERC20 token_) {\n        _token = token_;\n        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);\n        _setRoleAdmin(VAULT_CONTROLLER_ROLE, DEFAULT_ADMIN_ROLE);\n    }\n\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, AccessControl) returns (bool) {\n        return interfaceId == type(IVestingVault).interfaceId || super.supportsInterface(interfaceId); // ERC165\n    }\n\n    /**\n     * @dev function to create a vesting for the beneficiary\n     * @param beneficiary_ Beneficiary of tokens after they are released\n     * @param releaseTime_ Timestamp when token release is enabled\n     * @param tokenAmount_ Amount of tokens to release\n     */\n    function addBeneficiary(\n        address beneficiary_,\n        uint256 releaseTime_,\n        uint256 tokenAmount_\n    )\n        public\n        override\n        onlyRole(VAULT_CONTROLLER_ROLE)\n    {\n        Vesting[] memory vestings = _vesting[beneficiary_];\n\n        for (uint256 i = 0; i < vestings.length; i++) {\n            if (releaseTime_ == vestings[i].releaseTime) {\n                _vesting[beneficiary_][i].tokenAmount += tokenAmount_;\n                emit VestingLockedIn(beneficiary_, releaseTime_, tokenAmount_);\n                return;\n            }\n        }\n\n        _vesting[beneficiary_].push(Vesting(beneficiary_, releaseTime_, tokenAmount_));\n        emit VestingLockedIn(beneficiary_, releaseTime_, tokenAmount_);\n        return;\n    }\n\n    /**\n     * @return the address of the token being stored.\n     */\n    function token() public view override returns (IERC20) {\n        return _token;\n    }\n\n    /**\n     * @return the vesting for an address\n     * @param beneficiary_ the address for which the vesting is returned\n     */\n    function vestingFor(address beneficiary_) public view override returns (Vesting[] memory) {\n        return _vesting[beneficiary_];\n    }\n\n    /**\n     * @dev releases the tokens of the msg sender\n     */\n    function release() public override {\n        Vesting[] memory vestings = _vesting[_msgSender()];\n        uint256 tokensToRelease = 0;\n        for (uint256 i = 0; i < vestings.length; i++) {\n            if (vestings[i].releaseTime <= block.timestamp) {\n                tokensToRelease = tokensToRelease + vestings[i].tokenAmount;\n                emit VestingReleased(_msgSender(), vestings[i].releaseTime, vestings[i].tokenAmount);\n                _vesting[_msgSender()][i].tokenAmount = 0;\n            }\n        }\n        require(tokensToRelease > 0, \"VestingVault: Cannot release 0 tokens\");\n\n        bool success = token().transfer(_msgSender(), tokensToRelease);\n        require(success, \"Token transfer unsuccessful\");\n    }\n}\n"},"contracts/MockAggregatorV3.sol":{"content":"// SPDX-License-Identifier: FSL-1.1-MIT\npragma solidity ^0.8.24;\n\nimport \"./library/AggregatorV3Interface.sol\";\n\ncontract MockAggregatorV3 is AggregatorV3Interface {\n    int256 public answer;\n    uint80 public roundId;\n    uint256 public startedAt;\n    uint256 public updatedAt;\n    uint80 public answeredInRound;\n\n    function setLatestRoundData(\n        uint80 _roundId,\n        int256 _answer,\n        uint256 _startedAt,\n        uint256 _updatedAt,\n        uint80 _answeredInRound\n    )\n        public\n    {\n        roundId = _roundId;\n        answer = _answer;\n        startedAt = _startedAt;\n        updatedAt = _updatedAt;\n        answeredInRound = _answeredInRound;\n    }\n\n    function latestRoundData() external view override returns (uint80, int256, uint256, uint256, uint80) {\n        return (roundId, answer, startedAt, updatedAt, answeredInRound);\n    }\n\n    function getRoundData(uint80 _roundId) external view override returns (uint80, int256, uint256, uint256, uint80) {\n        return (_roundId, answer, startedAt, updatedAt, answeredInRound);\n    }\n\n    function decimals() external pure override returns (uint8) {\n        return 8;\n    }\n\n    function description() external pure override returns (string memory) {\n        return \"Mock Aggregator\";\n    }\n\n    function version() external pure override returns (uint256) {\n        return 1;\n    }\n}\n"}},"settings":{"viaIR":true,"optimizer":{"enabled":true,"runs":10000},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@openzeppelin/contracts/access/AccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","exportedSymbols":{"AccessControl":[295],"Context":[2437],"ERC165":[2660],"IAccessControl":[378]},"id":296,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"108:24:0"},{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","file":"./IAccessControl.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":296,"sourceUnit":379,"src":"134:52:0","symbolAliases":[{"foreign":{"id":2,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"142:14:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":296,"sourceUnit":2438,"src":"187:45:0","symbolAliases":[{"foreign":{"id":4,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2437,"src":"195:7:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"../utils/introspection/ERC165.sol","id":7,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":296,"sourceUnit":2661,"src":"233:57:0","symbolAliases":[{"foreign":{"id":6,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2660,"src":"241:6:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9,"name":"Context","nameLocations":["1988:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":2437,"src":"1988:7:0"},"id":10,"nodeType":"InheritanceSpecifier","src":"1988:7:0"},{"baseName":{"id":11,"name":"IAccessControl","nameLocations":["1997:14:0"],"nodeType":"IdentifierPath","referencedDeclaration":378,"src":"1997:14:0"},"id":12,"nodeType":"InheritanceSpecifier","src":"1997:14:0"},{"baseName":{"id":13,"name":"ERC165","nameLocations":["2013:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"2013:6:0"},"id":14,"nodeType":"InheritanceSpecifier","src":"2013:6:0"}],"canonicalName":"AccessControl","contractDependencies":[],"contractKind":"contract","documentation":{"id":8,"nodeType":"StructuredDocumentation","src":"292:1660:0","text":" @dev Contract module that allows children to implement role-based access\n control mechanisms. This is a lightweight version that doesn't allow enumerating role\n members except through off-chain means by accessing the contract event logs. Some\n applications may benefit from on-chain enumerability, for those cases see\n {AccessControlEnumerable}.\n Roles are referred to by their `bytes32` identifier. These should be exposed\n in the external API and be unique. The best way to achieve this is by\n using `public constant` hash digests:\n ```solidity\n bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n ```\n Roles can be used to represent a set of permissions. To restrict access to a\n function call, use {hasRole}:\n ```solidity\n function foo() public {\n     require(hasRole(MY_ROLE, msg.sender));\n     ...\n }\n ```\n Roles can be granted and revoked dynamically via the {grantRole} and\n {revokeRole} functions. Each role has an associated admin role, and only\n accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n that only accounts with this role will be able to grant or revoke other\n roles. More complex role relationships can be created by using\n {_setRoleAdmin}.\n WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n grant and revoke this role. Extra precautions should be taken to secure\n accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\n to enforce additional security measures for this role."},"fullyImplemented":true,"id":295,"linearizedBaseContracts":[295,2660,2672,378,2437],"name":"AccessControl","nameLocation":"1971:13:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"AccessControl.RoleData","id":21,"members":[{"constant":false,"id":18,"mutability":"mutable","name":"hasRole","nameLocation":"2085:7:0","nodeType":"VariableDeclaration","scope":21,"src":"2052:40:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":17,"keyName":"account","keyNameLocation":"2068:7:0","keyType":{"id":15,"name":"address","nodeType":"ElementaryTypeName","src":"2060:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2052:32:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16,"name":"bool","nodeType":"ElementaryTypeName","src":"2079:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":20,"mutability":"mutable","name":"adminRole","nameLocation":"2110:9:0","nodeType":"VariableDeclaration","scope":21,"src":"2102:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2102:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"RoleData","nameLocation":"2033:8:0","nodeType":"StructDefinition","scope":295,"src":"2026:100:0","visibility":"public"},{"constant":false,"id":26,"mutability":"mutable","name":"_roles","nameLocation":"2174:6:0","nodeType":"VariableDeclaration","scope":295,"src":"2132:48:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"typeName":{"id":25,"keyName":"role","keyNameLocation":"2148:4:0","keyType":{"id":22,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2140:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2132:33:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":24,"nodeType":"UserDefinedTypeName","pathNode":{"id":23,"name":"RoleData","nameLocations":["2156:8:0"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"2156:8:0"},"referencedDeclaration":21,"src":"2156:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage_ptr","typeString":"struct AccessControl.RoleData"}}},"visibility":"private"},{"constant":true,"functionSelector":"a217fddf","id":29,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"2211:18:0","nodeType":"VariableDeclaration","scope":295,"src":"2187:49:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2187:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":28,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2232:4:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"public"},{"body":{"id":39,"nodeType":"Block","src":"2454:44:0","statements":[{"expression":{"arguments":[{"id":35,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"2475:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":34,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[93,114],"referencedDeclaration":93,"src":"2464:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$__$","typeString":"function (bytes32) view"}},"id":36,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2464:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37,"nodeType":"ExpressionStatement","src":"2464:16:0"},{"id":38,"nodeType":"PlaceholderStatement","src":"2490:1:0"}]},"documentation":{"id":30,"nodeType":"StructuredDocumentation","src":"2243:174:0","text":" @dev Modifier that checks that an account has a specific role. Reverts\n with an {AccessControlUnauthorizedAccount} error including the required role."},"id":40,"name":"onlyRole","nameLocation":"2431:8:0","nodeType":"ModifierDefinition","parameters":{"id":33,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32,"mutability":"mutable","name":"role","nameLocation":"2448:4:0","nodeType":"VariableDeclaration","scope":40,"src":"2440:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2440:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2439:14:0"},"src":"2422:76:0","virtual":false,"visibility":"internal"},{"baseFunctions":[2659],"body":{"id":61,"nodeType":"Block","src":"2656:111:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":59,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":54,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"2673:11:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":51,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"2693:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$378_$","typeString":"type(contract IAccessControl)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$378_$","typeString":"type(contract IAccessControl)"}],"id":50,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2688:4:0","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":52,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2688:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IAccessControl_$378","typeString":"type(contract IAccessControl)"}},"id":53,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2709:11:0","memberName":"interfaceId","nodeType":"MemberAccess","src":"2688:32:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2673:47:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":57,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"2748:11:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2724:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControl_$295_$","typeString":"type(contract super AccessControl)"}},"id":56,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2730:17:0","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":2659,"src":"2724:23:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":58,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2724:36:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2673:87:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":48,"id":60,"nodeType":"Return","src":"2666:94:0"}]},"documentation":{"id":41,"nodeType":"StructuredDocumentation","src":"2504:56:0","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":62,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2574:17:0","nodeType":"FunctionDefinition","overrides":{"id":45,"nodeType":"OverrideSpecifier","overrides":[],"src":"2632:8:0"},"parameters":{"id":44,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43,"mutability":"mutable","name":"interfaceId","nameLocation":"2599:11:0","nodeType":"VariableDeclaration","scope":62,"src":"2592:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":42,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2592:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2591:20:0"},"returnParameters":{"id":48,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62,"src":"2650:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46,"name":"bool","nodeType":"ElementaryTypeName","src":"2650:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2649:6:0"},"scope":295,"src":"2565:202:0","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[345],"body":{"id":79,"nodeType":"Block","src":"2937:53:0","statements":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":72,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"2954:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":74,"indexExpression":{"id":73,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65,"src":"2961:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2954:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":75,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2967:7:0","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":18,"src":"2954:20:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":77,"indexExpression":{"id":76,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67,"src":"2975:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2954:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":71,"id":78,"nodeType":"Return","src":"2947:36:0"}]},"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"2773:76:0","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":80,"implemented":true,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"2863:7:0","nodeType":"FunctionDefinition","parameters":{"id":68,"nodeType":"ParameterList","parameters":[{"constant":false,"id":65,"mutability":"mutable","name":"role","nameLocation":"2879:4:0","nodeType":"VariableDeclaration","scope":80,"src":"2871:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":64,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2871:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":67,"mutability":"mutable","name":"account","nameLocation":"2893:7:0","nodeType":"VariableDeclaration","scope":80,"src":"2885:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"2885:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2870:31:0"},"returnParameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":80,"src":"2931:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":69,"name":"bool","nodeType":"ElementaryTypeName","src":"2931:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2930:6:0"},"scope":295,"src":"2854:136:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":92,"nodeType":"Block","src":"3255:47:0","statements":[{"expression":{"arguments":[{"id":87,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":83,"src":"3276:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":88,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"3282:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":89,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3282:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":86,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[93,114],"referencedDeclaration":114,"src":"3265:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) view"}},"id":90,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91,"nodeType":"ExpressionStatement","src":"3265:30:0"}]},"documentation":{"id":81,"nodeType":"StructuredDocumentation","src":"2996:198:0","text":" @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`\n is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier."},"id":93,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3208:10:0","nodeType":"FunctionDefinition","parameters":{"id":84,"nodeType":"ParameterList","parameters":[{"constant":false,"id":83,"mutability":"mutable","name":"role","nameLocation":"3227:4:0","nodeType":"VariableDeclaration","scope":93,"src":"3219:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":82,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3219:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3218:14:0"},"returnParameters":{"id":85,"nodeType":"ParameterList","parameters":[],"src":"3255:0:0"},"scope":295,"src":"3199:103:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":113,"nodeType":"Block","src":"3505:124:0","statements":[{"condition":{"id":105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3519:23:0","subExpression":{"arguments":[{"id":102,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":96,"src":"3528:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":103,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98,"src":"3534:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":101,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80,"src":"3520:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3520:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":112,"nodeType":"IfStatement","src":"3515:108:0","trueBody":{"id":111,"nodeType":"Block","src":"3544:79:0","statements":[{"errorCall":{"arguments":[{"id":107,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98,"src":"3598:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":108,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":96,"src":"3607:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":106,"name":"AccessControlUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":305,"src":"3565:32:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_bytes32_$returns$_t_error_$","typeString":"function (address,bytes32) pure returns (error)"}},"id":109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:47:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":110,"nodeType":"RevertStatement","src":"3558:54:0"}]}}]},"documentation":{"id":94,"nodeType":"StructuredDocumentation","src":"3308:119:0","text":" @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`\n is missing `role`."},"id":114,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3441:10:0","nodeType":"FunctionDefinition","parameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":96,"mutability":"mutable","name":"role","nameLocation":"3460:4:0","nodeType":"VariableDeclaration","scope":114,"src":"3452:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":95,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3452:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":98,"mutability":"mutable","name":"account","nameLocation":"3474:7:0","nodeType":"VariableDeclaration","scope":114,"src":"3466:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":97,"name":"address","nodeType":"ElementaryTypeName","src":"3466:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3451:31:0"},"returnParameters":{"id":100,"nodeType":"ParameterList","parameters":[],"src":"3505:0:0"},"scope":295,"src":"3432:197:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[353],"body":{"id":127,"nodeType":"Block","src":"3884:46:0","statements":[{"expression":{"expression":{"baseExpression":{"id":122,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"3901:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":124,"indexExpression":{"id":123,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"3908:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3901:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3914:9:0","memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":20,"src":"3901:22:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":121,"id":126,"nodeType":"Return","src":"3894:29:0"}]},"documentation":{"id":115,"nodeType":"StructuredDocumentation","src":"3635:170:0","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {_setRoleAdmin}."},"functionSelector":"248a9ca3","id":128,"implemented":true,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"3819:12:0","nodeType":"FunctionDefinition","parameters":{"id":118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":117,"mutability":"mutable","name":"role","nameLocation":"3840:4:0","nodeType":"VariableDeclaration","scope":128,"src":"3832:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":116,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3832:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3831:14:0"},"returnParameters":{"id":121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":128,"src":"3875:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":119,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3875:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3874:9:0"},"scope":295,"src":"3810:120:0","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[361],"body":{"id":146,"nodeType":"Block","src":"4320:42:0","statements":[{"expression":{"arguments":[{"id":142,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"4341:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":143,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"4347:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":141,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"4330:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4330:25:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":145,"nodeType":"ExpressionStatement","src":"4330:25:0"}]},"documentation":{"id":129,"nodeType":"StructuredDocumentation","src":"3936:285:0","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleGranted} event."},"functionSelector":"2f2ff15d","id":147,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":137,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"4313:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":136,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"4300:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4300:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":139,"kind":"modifierInvocation","modifierName":{"id":135,"name":"onlyRole","nameLocations":["4291:8:0"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"4291:8:0"},"nodeType":"ModifierInvocation","src":"4291:28:0"}],"name":"grantRole","nameLocation":"4235:9:0","nodeType":"FunctionDefinition","parameters":{"id":134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":131,"mutability":"mutable","name":"role","nameLocation":"4253:4:0","nodeType":"VariableDeclaration","scope":147,"src":"4245:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4245:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":133,"mutability":"mutable","name":"account","nameLocation":"4267:7:0","nodeType":"VariableDeclaration","scope":147,"src":"4259:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":132,"name":"address","nodeType":"ElementaryTypeName","src":"4259:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4244:31:0"},"returnParameters":{"id":140,"nodeType":"ParameterList","parameters":[],"src":"4320:0:0"},"scope":295,"src":"4226:136:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[369],"body":{"id":165,"nodeType":"Block","src":"4737:43:0","statements":[{"expression":{"arguments":[{"id":161,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"4759:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":162,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":152,"src":"4765:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":160,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":294,"src":"4747:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4747:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":164,"nodeType":"ExpressionStatement","src":"4747:26:0"}]},"documentation":{"id":148,"nodeType":"StructuredDocumentation","src":"4368:269:0","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleRevoked} event."},"functionSelector":"d547741f","id":166,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":156,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"4730:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":155,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"4717:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4717:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":158,"kind":"modifierInvocation","modifierName":{"id":154,"name":"onlyRole","nameLocations":["4708:8:0"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"4708:8:0"},"nodeType":"ModifierInvocation","src":"4708:28:0"}],"name":"revokeRole","nameLocation":"4651:10:0","nodeType":"FunctionDefinition","parameters":{"id":153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":150,"mutability":"mutable","name":"role","nameLocation":"4670:4:0","nodeType":"VariableDeclaration","scope":166,"src":"4662:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":149,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4662:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":152,"mutability":"mutable","name":"account","nameLocation":"4684:7:0","nodeType":"VariableDeclaration","scope":166,"src":"4676:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":151,"name":"address","nodeType":"ElementaryTypeName","src":"4676:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4661:31:0"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[],"src":"4737:0:0"},"scope":295,"src":"4642:138:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[377],"body":{"id":188,"nodeType":"Block","src":"5407:166:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":174,"name":"callerConfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":171,"src":"5421:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":175,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"5443:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5443:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5421:34:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":182,"nodeType":"IfStatement","src":"5417:102:0","trueBody":{"id":181,"nodeType":"Block","src":"5457:62:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":178,"name":"AccessControlBadConfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"5478:28:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5478:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":180,"nodeType":"RevertStatement","src":"5471:37:0"}]}},{"expression":{"arguments":[{"id":184,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":169,"src":"5541:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":185,"name":"callerConfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":171,"src":"5547:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":183,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":294,"src":"5529:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5529:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":187,"nodeType":"ExpressionStatement","src":"5529:37:0"}]},"documentation":{"id":167,"nodeType":"StructuredDocumentation","src":"4786:537:0","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been revoked `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `callerConfirmation`.\n May emit a {RoleRevoked} event."},"functionSelector":"36568abe","id":189,"implemented":true,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"5337:12:0","nodeType":"FunctionDefinition","parameters":{"id":172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":169,"mutability":"mutable","name":"role","nameLocation":"5358:4:0","nodeType":"VariableDeclaration","scope":189,"src":"5350:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5350:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":171,"mutability":"mutable","name":"callerConfirmation","nameLocation":"5372:18:0","nodeType":"VariableDeclaration","scope":189,"src":"5364:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":170,"name":"address","nodeType":"ElementaryTypeName","src":"5364:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5349:42:0"},"returnParameters":{"id":173,"nodeType":"ParameterList","parameters":[],"src":"5407:0:0"},"scope":295,"src":"5328:245:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":216,"nodeType":"Block","src":"5771:174:0","statements":[{"assignments":[198],"declarations":[{"constant":false,"id":198,"mutability":"mutable","name":"previousAdminRole","nameLocation":"5789:17:0","nodeType":"VariableDeclaration","scope":216,"src":"5781:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":197,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5781:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":202,"initialValue":{"arguments":[{"id":200,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"5822:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":199,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"5809:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5809:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5781:46:0"},{"expression":{"id":208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":203,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"5837:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":205,"indexExpression":{"id":204,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"5844:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5837:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5850:9:0","memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":20,"src":"5837:22:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":207,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":194,"src":"5862:9:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5837:34:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":209,"nodeType":"ExpressionStatement","src":"5837:34:0"},{"eventCall":{"arguments":[{"id":211,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"5903:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":212,"name":"previousAdminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":198,"src":"5909:17:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":213,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":194,"src":"5928:9:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":210,"name":"RoleAdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":317,"src":"5886:16:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32,bytes32)"}},"id":214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5886:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":215,"nodeType":"EmitStatement","src":"5881:57:0"}]},"documentation":{"id":190,"nodeType":"StructuredDocumentation","src":"5579:114:0","text":" @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."},"id":217,"implemented":true,"kind":"function","modifiers":[],"name":"_setRoleAdmin","nameLocation":"5707:13:0","nodeType":"FunctionDefinition","parameters":{"id":195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":192,"mutability":"mutable","name":"role","nameLocation":"5729:4:0","nodeType":"VariableDeclaration","scope":217,"src":"5721:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5721:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":194,"mutability":"mutable","name":"adminRole","nameLocation":"5743:9:0","nodeType":"VariableDeclaration","scope":217,"src":"5735:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5735:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5720:33:0"},"returnParameters":{"id":196,"nodeType":"ParameterList","parameters":[],"src":"5771:0:0"},"scope":295,"src":"5698:247:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":255,"nodeType":"Block","src":"6262:233:0","statements":[{"condition":{"id":231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6276:23:0","subExpression":{"arguments":[{"id":228,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"6285:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":229,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"6291:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":227,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80,"src":"6277:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6277:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":253,"nodeType":"Block","src":"6452:37:0","statements":[{"expression":{"hexValue":"66616c7365","id":251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6473:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":226,"id":252,"nodeType":"Return","src":"6466:12:0"}]},"id":254,"nodeType":"IfStatement","src":"6272:217:0","trueBody":{"id":250,"nodeType":"Block","src":"6301:145:0","statements":[{"expression":{"id":239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":232,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"6315:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":234,"indexExpression":{"id":233,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"6322:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6315:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6328:7:0","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":18,"src":"6315:20:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":237,"indexExpression":{"id":236,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"6336:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6315:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6347:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6315:36:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":240,"nodeType":"ExpressionStatement","src":"6315:36:0"},{"eventCall":{"arguments":[{"id":242,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"6382:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":243,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"6388:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":244,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"6397:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6397:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":241,"name":"RoleGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"6370:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6370:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":247,"nodeType":"EmitStatement","src":"6365:45:0"},{"expression":{"hexValue":"74727565","id":248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6431:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":226,"id":249,"nodeType":"Return","src":"6424:11:0"}]}}]},"documentation":{"id":218,"nodeType":"StructuredDocumentation","src":"5951:223:0","text":" @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.\n Internal function without access restriction.\n May emit a {RoleGranted} event."},"id":256,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRole","nameLocation":"6188:10:0","nodeType":"FunctionDefinition","parameters":{"id":223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":220,"mutability":"mutable","name":"role","nameLocation":"6207:4:0","nodeType":"VariableDeclaration","scope":256,"src":"6199:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":219,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6199:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":222,"mutability":"mutable","name":"account","nameLocation":"6221:7:0","nodeType":"VariableDeclaration","scope":256,"src":"6213:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":221,"name":"address","nodeType":"ElementaryTypeName","src":"6213:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6198:31:0"},"returnParameters":{"id":226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":256,"src":"6256:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":224,"name":"bool","nodeType":"ElementaryTypeName","src":"6256:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6255:6:0"},"scope":295,"src":"6179:316:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":293,"nodeType":"Block","src":"6816:233:0","statements":[{"condition":{"arguments":[{"id":267,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6838:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":268,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6844:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":266,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80,"src":"6830:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6830:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":291,"nodeType":"Block","src":"7006:37:0","statements":[{"expression":{"hexValue":"66616c7365","id":289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7027:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":265,"id":290,"nodeType":"Return","src":"7020:12:0"}]},"id":292,"nodeType":"IfStatement","src":"6826:217:0","trueBody":{"id":288,"nodeType":"Block","src":"6854:146:0","statements":[{"expression":{"id":277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":270,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"6868:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":272,"indexExpression":{"id":271,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6875:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6881:7:0","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":18,"src":"6868:20:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":275,"indexExpression":{"id":274,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6889:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6868:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6900:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6868:37:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":278,"nodeType":"ExpressionStatement","src":"6868:37:0"},{"eventCall":{"arguments":[{"id":280,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6936:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":281,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6942:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":282,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"6951:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6951:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":279,"name":"RoleRevoked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":335,"src":"6924:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6924:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":285,"nodeType":"EmitStatement","src":"6919:45:0"},{"expression":{"hexValue":"74727565","id":286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6985:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":265,"id":287,"nodeType":"Return","src":"6978:11:0"}]}}]},"documentation":{"id":257,"nodeType":"StructuredDocumentation","src":"6501:226:0","text":" @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.\n Internal function without access restriction.\n May emit a {RoleRevoked} event."},"id":294,"implemented":true,"kind":"function","modifiers":[],"name":"_revokeRole","nameLocation":"6741:11:0","nodeType":"FunctionDefinition","parameters":{"id":262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":259,"mutability":"mutable","name":"role","nameLocation":"6761:4:0","nodeType":"VariableDeclaration","scope":294,"src":"6753:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":258,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6753:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":261,"mutability":"mutable","name":"account","nameLocation":"6775:7:0","nodeType":"VariableDeclaration","scope":294,"src":"6767:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":260,"name":"address","nodeType":"ElementaryTypeName","src":"6767:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6752:31:0"},"returnParameters":{"id":265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":294,"src":"6810:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":263,"name":"bool","nodeType":"ElementaryTypeName","src":"6810:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6809:6:0"},"scope":295,"src":"6732:317:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":296,"src":"1953:5098:0","usedErrors":[305,308],"usedEvents":[317,326,335]}],"src":"108:6944:0"},"id":0},"@openzeppelin/contracts/access/IAccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","exportedSymbols":{"IAccessControl":[378]},"id":379,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":297,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccessControl","contractDependencies":[],"contractKind":"interface","documentation":{"id":298,"nodeType":"StructuredDocumentation","src":"135:90:1","text":" @dev External interface of AccessControl declared to support ERC-165 detection."},"fullyImplemented":false,"id":378,"linearizedBaseContracts":[378],"name":"IAccessControl","nameLocation":"236:14:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"257:56:1","text":" @dev The `account` is missing a role."},"errorSelector":"e2517d3f","id":305,"name":"AccessControlUnauthorizedAccount","nameLocation":"324:32:1","nodeType":"ErrorDefinition","parameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"account","nameLocation":"365:7:1","nodeType":"VariableDeclaration","scope":305,"src":"357:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":300,"name":"address","nodeType":"ElementaryTypeName","src":"357:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":303,"mutability":"mutable","name":"neededRole","nameLocation":"382:10:1","nodeType":"VariableDeclaration","scope":305,"src":"374:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"374:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"356:37:1"},"src":"318:76:1"},{"documentation":{"id":306,"nodeType":"StructuredDocumentation","src":"400:148:1","text":" @dev The caller of a function is not the expected one.\n NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."},"errorSelector":"6697b232","id":308,"name":"AccessControlBadConfirmation","nameLocation":"559:28:1","nodeType":"ErrorDefinition","parameters":{"id":307,"nodeType":"ParameterList","parameters":[],"src":"587:2:1"},"src":"553:37:1"},{"anonymous":false,"documentation":{"id":309,"nodeType":"StructuredDocumentation","src":"596:254:1","text":" @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted to signal this."},"eventSelector":"bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff","id":317,"name":"RoleAdminChanged","nameLocation":"861:16:1","nodeType":"EventDefinition","parameters":{"id":316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":311,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"894:4:1","nodeType":"VariableDeclaration","scope":317,"src":"878:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":310,"name":"bytes32","nodeType":"ElementaryTypeName","src":"878:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":313,"indexed":true,"mutability":"mutable","name":"previousAdminRole","nameLocation":"916:17:1","nodeType":"VariableDeclaration","scope":317,"src":"900:33:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":312,"name":"bytes32","nodeType":"ElementaryTypeName","src":"900:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":315,"indexed":true,"mutability":"mutable","name":"newAdminRole","nameLocation":"951:12:1","nodeType":"VariableDeclaration","scope":317,"src":"935:28:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"935:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"877:87:1"},"src":"855:110:1"},{"anonymous":false,"documentation":{"id":318,"nodeType":"StructuredDocumentation","src":"971:295:1","text":" @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).\n Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"eventSelector":"2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d","id":326,"name":"RoleGranted","nameLocation":"1277:11:1","nodeType":"EventDefinition","parameters":{"id":325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":320,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1305:4:1","nodeType":"VariableDeclaration","scope":326,"src":"1289:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1289:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":322,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1327:7:1","nodeType":"VariableDeclaration","scope":326,"src":"1311:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":321,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":324,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1352:6:1","nodeType":"VariableDeclaration","scope":326,"src":"1336:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":323,"name":"address","nodeType":"ElementaryTypeName","src":"1336:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1288:71:1"},"src":"1271:89:1"},{"anonymous":false,"documentation":{"id":327,"nodeType":"StructuredDocumentation","src":"1366:275:1","text":" @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n   - if using `revokeRole`, it is the admin role bearer\n   - if using `renounceRole`, it is the role bearer (i.e. `account`)"},"eventSelector":"f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b","id":335,"name":"RoleRevoked","nameLocation":"1652:11:1","nodeType":"EventDefinition","parameters":{"id":334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":329,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1680:4:1","nodeType":"VariableDeclaration","scope":335,"src":"1664:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":328,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1664:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":331,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1702:7:1","nodeType":"VariableDeclaration","scope":335,"src":"1686:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":330,"name":"address","nodeType":"ElementaryTypeName","src":"1686:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":333,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1727:6:1","nodeType":"VariableDeclaration","scope":335,"src":"1711:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"1711:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1663:71:1"},"src":"1646:89:1"},{"documentation":{"id":336,"nodeType":"StructuredDocumentation","src":"1741:76:1","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":345,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1831:7:1","nodeType":"FunctionDefinition","parameters":{"id":341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":338,"mutability":"mutable","name":"role","nameLocation":"1847:4:1","nodeType":"VariableDeclaration","scope":345,"src":"1839:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1839:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"account","nameLocation":"1861:7:1","nodeType":"VariableDeclaration","scope":345,"src":"1853:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":339,"name":"address","nodeType":"ElementaryTypeName","src":"1853:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1838:31:1"},"returnParameters":{"id":344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":343,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":345,"src":"1893:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":342,"name":"bool","nodeType":"ElementaryTypeName","src":"1893:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1892:6:1"},"scope":378,"src":"1822:77:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":346,"nodeType":"StructuredDocumentation","src":"1905:184:1","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."},"functionSelector":"248a9ca3","id":353,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"2103:12:1","nodeType":"FunctionDefinition","parameters":{"id":349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":348,"mutability":"mutable","name":"role","nameLocation":"2124:4:1","nodeType":"VariableDeclaration","scope":353,"src":"2116:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":347,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2116:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2115:14:1"},"returnParameters":{"id":352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":353,"src":"2153:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2153:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2152:9:1"},"scope":378,"src":"2094:68:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":354,"nodeType":"StructuredDocumentation","src":"2168:239:1","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"2f2ff15d","id":361,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"2421:9:1","nodeType":"FunctionDefinition","parameters":{"id":359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":356,"mutability":"mutable","name":"role","nameLocation":"2439:4:1","nodeType":"VariableDeclaration","scope":361,"src":"2431:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2431:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":358,"mutability":"mutable","name":"account","nameLocation":"2453:7:1","nodeType":"VariableDeclaration","scope":361,"src":"2445:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":357,"name":"address","nodeType":"ElementaryTypeName","src":"2445:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2430:31:1"},"returnParameters":{"id":360,"nodeType":"ParameterList","parameters":[],"src":"2470:0:1"},"scope":378,"src":"2412:59:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":362,"nodeType":"StructuredDocumentation","src":"2477:223:1","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"d547741f","id":369,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"2714:10:1","nodeType":"FunctionDefinition","parameters":{"id":367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":364,"mutability":"mutable","name":"role","nameLocation":"2733:4:1","nodeType":"VariableDeclaration","scope":369,"src":"2725:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2725:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"account","nameLocation":"2747:7:1","nodeType":"VariableDeclaration","scope":369,"src":"2739:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":365,"name":"address","nodeType":"ElementaryTypeName","src":"2739:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2724:31:1"},"returnParameters":{"id":368,"nodeType":"ParameterList","parameters":[],"src":"2764:0:1"},"scope":378,"src":"2705:60:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":370,"nodeType":"StructuredDocumentation","src":"2771:491:1","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `callerConfirmation`."},"functionSelector":"36568abe","id":377,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"3276:12:1","nodeType":"FunctionDefinition","parameters":{"id":375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":372,"mutability":"mutable","name":"role","nameLocation":"3297:4:1","nodeType":"VariableDeclaration","scope":377,"src":"3289:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":371,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3289:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":374,"mutability":"mutable","name":"callerConfirmation","nameLocation":"3311:18:1","nodeType":"VariableDeclaration","scope":377,"src":"3303:26:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":373,"name":"address","nodeType":"ElementaryTypeName","src":"3303:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3288:42:1"},"returnParameters":{"id":376,"nodeType":"ParameterList","parameters":[],"src":"3339:0:1"},"scope":378,"src":"3267:73:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":379,"src":"226:3116:1","usedErrors":[305,308],"usedEvents":[317,326,335]}],"src":"109:3234:1"},"id":1},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[2437],"Ownable":[526]},"id":527,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":380,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:2"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":382,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":527,"sourceUnit":2438,"src":"128:45:2","symbolAliases":[{"foreign":{"id":381,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2437,"src":"136:7:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":384,"name":"Context","nameLocations":["692:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":2437,"src":"692:7:2"},"id":385,"nodeType":"InheritanceSpecifier","src":"692:7:2"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"175:487:2","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":526,"linearizedBaseContracts":[526,2437],"name":"Ownable","nameLocation":"681:7:2","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":387,"mutability":"mutable","name":"_owner","nameLocation":"722:6:2","nodeType":"VariableDeclaration","scope":526,"src":"706:22:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":386,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":388,"nodeType":"StructuredDocumentation","src":"735:85:2","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":392,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:2","nodeType":"ErrorDefinition","parameters":{"id":391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":390,"mutability":"mutable","name":"account","nameLocation":"866:7:2","nodeType":"VariableDeclaration","scope":392,"src":"858:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":389,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:2"},"src":"825:50:2"},{"documentation":{"id":393,"nodeType":"StructuredDocumentation","src":"881:82:2","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":397,"name":"OwnableInvalidOwner","nameLocation":"974:19:2","nodeType":"ErrorDefinition","parameters":{"id":396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":395,"mutability":"mutable","name":"owner","nameLocation":"1002:5:2","nodeType":"VariableDeclaration","scope":397,"src":"994:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":394,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:2"},"src":"968:41:2"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":403,"name":"OwnershipTransferred","nameLocation":"1021:20:2","nodeType":"EventDefinition","parameters":{"id":402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":399,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:2","nodeType":"VariableDeclaration","scope":403,"src":"1042:29:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":398,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":401,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:2","nodeType":"VariableDeclaration","scope":403,"src":"1073:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:2"},"src":"1015:84:2"},{"body":{"id":428,"nodeType":"Block","src":"1259:153:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":409,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"1273:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":410,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:2","typeDescriptions":{}}},"id":413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":423,"nodeType":"IfStatement","src":"1269:95:2","trueBody":{"id":422,"nodeType":"Block","src":"1301:63:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":416,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:2","typeDescriptions":{}}},"id":419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":415,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"1322:19:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":421,"nodeType":"RevertStatement","src":"1315:38:2"}]}},{"expression":{"arguments":[{"id":425,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"1392:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":424,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"1373:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":427,"nodeType":"ExpressionStatement","src":"1373:32:2"}]},"documentation":{"id":404,"nodeType":"StructuredDocumentation","src":"1105:115:2","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":429,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":406,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:2","nodeType":"VariableDeclaration","scope":429,"src":"1237:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":405,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:2"},"returnParameters":{"id":408,"nodeType":"ParameterList","parameters":[],"src":"1259:0:2"},"scope":526,"src":"1225:187:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":436,"nodeType":"Block","src":"1521:41:2","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":432,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":463,"src":"1531:11:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":434,"nodeType":"ExpressionStatement","src":"1531:13:2"},{"id":435,"nodeType":"PlaceholderStatement","src":"1554:1:2"}]},"documentation":{"id":430,"nodeType":"StructuredDocumentation","src":"1418:77:2","text":" @dev Throws if called by any account other than the owner."},"id":437,"name":"onlyOwner","nameLocation":"1509:9:2","nodeType":"ModifierDefinition","parameters":{"id":431,"nodeType":"ParameterList","parameters":[],"src":"1518:2:2"},"src":"1500:62:2","virtual":false,"visibility":"internal"},{"body":{"id":445,"nodeType":"Block","src":"1693:30:2","statements":[{"expression":{"id":443,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":387,"src":"1710:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":442,"id":444,"nodeType":"Return","src":"1703:13:2"}]},"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"1568:65:2","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":446,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:2","nodeType":"FunctionDefinition","parameters":{"id":439,"nodeType":"ParameterList","parameters":[],"src":"1652:2:2"},"returnParameters":{"id":442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":446,"src":"1684:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":440,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:2"},"scope":526,"src":"1638:85:2","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":462,"nodeType":"Block","src":"1841:117:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":450,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":446,"src":"1855:5:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":452,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"1866:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":461,"nodeType":"IfStatement","src":"1851:101:2","trueBody":{"id":460,"nodeType":"Block","src":"1880:72:2","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":456,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"1928:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":455,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"1901:26:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":459,"nodeType":"RevertStatement","src":"1894:47:2"}]}}]},"documentation":{"id":447,"nodeType":"StructuredDocumentation","src":"1729:62:2","text":" @dev Throws if the sender is not the owner."},"id":463,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:2","nodeType":"FunctionDefinition","parameters":{"id":448,"nodeType":"ParameterList","parameters":[],"src":"1816:2:2"},"returnParameters":{"id":449,"nodeType":"ParameterList","parameters":[],"src":"1841:0:2"},"scope":526,"src":"1796:162:2","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":476,"nodeType":"Block","src":"2347:47:2","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":470,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:2","typeDescriptions":{}}},"id":473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":469,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"2357:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":475,"nodeType":"ExpressionStatement","src":"2357:30:2"}]},"documentation":{"id":464,"nodeType":"StructuredDocumentation","src":"1964:324:2","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":477,"implemented":true,"kind":"function","modifiers":[{"id":467,"kind":"modifierInvocation","modifierName":{"id":466,"name":"onlyOwner","nameLocations":["2337:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"2337:9:2"},"nodeType":"ModifierInvocation","src":"2337:9:2"}],"name":"renounceOwnership","nameLocation":"2302:17:2","nodeType":"FunctionDefinition","parameters":{"id":465,"nodeType":"ParameterList","parameters":[],"src":"2319:2:2"},"returnParameters":{"id":468,"nodeType":"ParameterList","parameters":[],"src":"2347:0:2"},"scope":526,"src":"2293:101:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":504,"nodeType":"Block","src":"2613:145:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":485,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"2627:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":486,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:2","typeDescriptions":{}}},"id":489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":499,"nodeType":"IfStatement","src":"2623:91:2","trueBody":{"id":498,"nodeType":"Block","src":"2651:63:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:2","typeDescriptions":{}}},"id":495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":491,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"2672:19:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":497,"nodeType":"RevertStatement","src":"2665:38:2"}]}},{"expression":{"arguments":[{"id":501,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"2742:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":500,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"2723:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":503,"nodeType":"ExpressionStatement","src":"2723:28:2"}]},"documentation":{"id":478,"nodeType":"StructuredDocumentation","src":"2400:138:2","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":505,"implemented":true,"kind":"function","modifiers":[{"id":483,"kind":"modifierInvocation","modifierName":{"id":482,"name":"onlyOwner","nameLocations":["2603:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"2603:9:2"},"nodeType":"ModifierInvocation","src":"2603:9:2"}],"name":"transferOwnership","nameLocation":"2552:17:2","nodeType":"FunctionDefinition","parameters":{"id":481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":480,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:2","nodeType":"VariableDeclaration","scope":505,"src":"2570:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":479,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:2"},"returnParameters":{"id":484,"nodeType":"ParameterList","parameters":[],"src":"2613:0:2"},"scope":526,"src":"2543:215:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":524,"nodeType":"Block","src":"2975:124:2","statements":[{"assignments":[512],"declarations":[{"constant":false,"id":512,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:2","nodeType":"VariableDeclaration","scope":524,"src":"2985:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":514,"initialValue":{"id":513,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":387,"src":"3004:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:2"},{"expression":{"id":517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":515,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":387,"src":"3020:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":516,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":508,"src":"3029:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":518,"nodeType":"ExpressionStatement","src":"3020:17:2"},{"eventCall":{"arguments":[{"id":520,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":512,"src":"3073:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":521,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":508,"src":"3083:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":519,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"3052:20:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":523,"nodeType":"EmitStatement","src":"3047:45:2"}]},"documentation":{"id":506,"nodeType":"StructuredDocumentation","src":"2764:143:2","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":525,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:2","nodeType":"FunctionDefinition","parameters":{"id":509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":508,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:2","nodeType":"VariableDeclaration","scope":525,"src":"2940:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":507,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:2"},"returnParameters":{"id":510,"nodeType":"ParameterList","parameters":[],"src":"2975:0:2"},"scope":526,"src":"2912:187:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":527,"src":"663:2438:2","usedErrors":[392,397],"usedEvents":[403]}],"src":"102:3000:2"},"id":2},"@openzeppelin/contracts/finance/VestingWallet.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/finance/VestingWallet.sol","exportedSymbols":{"Address":[2407],"Context":[2437],"IERC20":[1657],"Ownable":[526],"SafeERC20":[2147],"VestingWallet":[837]},"id":838,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":528,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"108:24:3"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":530,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":838,"sourceUnit":1658,"src":"134:49:3","symbolAliases":[{"foreign":{"id":529,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"142:6:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"../token/ERC20/utils/SafeERC20.sol","id":532,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":838,"sourceUnit":2148,"src":"184:61:3","symbolAliases":[{"foreign":{"id":531,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"192:9:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../utils/Address.sol","id":534,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":838,"sourceUnit":2408,"src":"246:45:3","symbolAliases":[{"foreign":{"id":533,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2407,"src":"254:7:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":536,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":838,"sourceUnit":2438,"src":"292:45:3","symbolAliases":[{"foreign":{"id":535,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2437,"src":"300:7:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"../access/Ownable.sol","id":538,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":838,"sourceUnit":527,"src":"338:46:3","symbolAliases":[{"foreign":{"id":537,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"346:7:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":540,"name":"Context","nameLocations":["2079:7:3"],"nodeType":"IdentifierPath","referencedDeclaration":2437,"src":"2079:7:3"},"id":541,"nodeType":"InheritanceSpecifier","src":"2079:7:3"},{"baseName":{"id":542,"name":"Ownable","nameLocations":["2088:7:3"],"nodeType":"IdentifierPath","referencedDeclaration":526,"src":"2088:7:3"},"id":543,"nodeType":"InheritanceSpecifier","src":"2088:7:3"}],"canonicalName":"VestingWallet","contractDependencies":[],"contractKind":"contract","documentation":{"id":539,"nodeType":"StructuredDocumentation","src":"386:1666:3","text":" @dev A vesting wallet is an ownable contract that can receive native currency and ERC-20 tokens, and release these\n assets to the wallet owner, also referred to as \"beneficiary\", according to a vesting schedule.\n Any assets transferred to this contract will follow the vesting schedule as if they were locked from the beginning.\n Consequently, if the vesting has already started, any amount of tokens sent to this contract will (at least partly)\n be immediately releasable.\n By setting the duration to 0, one can configure this contract to behave like an asset timelock that holds tokens for\n a beneficiary until a specified time.\n NOTE: Since the wallet is {Ownable}, and ownership can be transferred, it is possible to sell unvested tokens.\n Preventing this in a smart contract is difficult, considering that: 1) a beneficiary address could be a\n counterfactually deployed contract, 2) there is likely to be a migration path for EOAs to become contracts in the\n near future.\n NOTE: When using this contract with any token whose balance is adjusted automatically (i.e. a rebase token), make\n sure to account the supply/balance adjustment in the vesting schedule to ensure the vested amount is as intended.\n NOTE: Chains with support for native ERC20s may allow the vesting wallet to withdraw the underlying asset as both an\n ERC20 and as native currency. For example, if chain C supports token A and the wallet gets deposited 100 A, then\n at 50% of the vesting period, the beneficiary can withdraw 50 A as ERC20 and 25 A as native currency (totaling 75 A).\n Consider disabling one of the withdrawal methods."},"fullyImplemented":true,"id":837,"linearizedBaseContracts":[837,526,2437],"name":"VestingWallet","nameLocation":"2062:13:3","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"da9d4e5f101b8b9b1c5b76d0c5a9f7923571acfc02376aa076b75a8c080c956b","id":547,"name":"EtherReleased","nameLocation":"2108:13:3","nodeType":"EventDefinition","parameters":{"id":546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":545,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2130:6:3","nodeType":"VariableDeclaration","scope":547,"src":"2122:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":544,"name":"uint256","nodeType":"ElementaryTypeName","src":"2122:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2121:16:3"},"src":"2102:36:3"},{"anonymous":false,"eventSelector":"c0e523490dd523c33b1878c9eb14ff46991e3f5b2cd33710918618f2a39cba1b","id":553,"name":"ERC20Released","nameLocation":"2149:13:3","nodeType":"EventDefinition","parameters":{"id":552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":549,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2179:5:3","nodeType":"VariableDeclaration","scope":553,"src":"2163:21:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":548,"name":"address","nodeType":"ElementaryTypeName","src":"2163:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":551,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2194:6:3","nodeType":"VariableDeclaration","scope":553,"src":"2186:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":550,"name":"uint256","nodeType":"ElementaryTypeName","src":"2186:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2162:39:3"},"src":"2143:59:3"},{"constant":false,"id":555,"mutability":"mutable","name":"_released","nameLocation":"2224:9:3","nodeType":"VariableDeclaration","scope":837,"src":"2208:25:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":554,"name":"uint256","nodeType":"ElementaryTypeName","src":"2208:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":559,"mutability":"mutable","name":"_erc20Released","nameLocation":"2281:14:3","nodeType":"VariableDeclaration","scope":837,"src":"2239:56:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":558,"keyName":"token","keyNameLocation":"2255:5:3","keyType":{"id":556,"name":"address","nodeType":"ElementaryTypeName","src":"2247:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2239:33:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":557,"name":"uint256","nodeType":"ElementaryTypeName","src":"2264:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":561,"mutability":"immutable","name":"_start","nameLocation":"2326:6:3","nodeType":"VariableDeclaration","scope":837,"src":"2301:31:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":560,"name":"uint64","nodeType":"ElementaryTypeName","src":"2301:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"private"},{"constant":false,"id":563,"mutability":"immutable","name":"_duration","nameLocation":"2363:9:3","nodeType":"VariableDeclaration","scope":837,"src":"2338:34:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":562,"name":"uint64","nodeType":"ElementaryTypeName","src":"2338:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"private"},{"body":{"id":584,"nodeType":"Block","src":"2634:77:3","statements":[{"expression":{"id":578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":576,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2644:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":577,"name":"startTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":568,"src":"2653:14:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"2644:23:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":579,"nodeType":"ExpressionStatement","src":"2644:23:3"},{"expression":{"id":582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":580,"name":"_duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2677:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":581,"name":"durationSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":570,"src":"2689:15:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"2677:27:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":583,"nodeType":"ExpressionStatement","src":"2677:27:3"}]},"documentation":{"id":564,"nodeType":"StructuredDocumentation","src":"2379:141:3","text":" @dev Sets the beneficiary (owner), the start timestamp and the vesting duration (in seconds) of the vesting\n wallet."},"id":585,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":573,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":566,"src":"2621:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":574,"kind":"baseConstructorSpecifier","modifierName":{"id":572,"name":"Ownable","nameLocations":["2613:7:3"],"nodeType":"IdentifierPath","referencedDeclaration":526,"src":"2613:7:3"},"nodeType":"ModifierInvocation","src":"2613:20:3"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":566,"mutability":"mutable","name":"beneficiary","nameLocation":"2545:11:3","nodeType":"VariableDeclaration","scope":585,"src":"2537:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":565,"name":"address","nodeType":"ElementaryTypeName","src":"2537:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":568,"mutability":"mutable","name":"startTimestamp","nameLocation":"2565:14:3","nodeType":"VariableDeclaration","scope":585,"src":"2558:21:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":567,"name":"uint64","nodeType":"ElementaryTypeName","src":"2558:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":570,"mutability":"mutable","name":"durationSeconds","nameLocation":"2588:15:3","nodeType":"VariableDeclaration","scope":585,"src":"2581:22:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":569,"name":"uint64","nodeType":"ElementaryTypeName","src":"2581:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"2536:68:3"},"returnParameters":{"id":575,"nodeType":"ParameterList","parameters":[],"src":"2634:0:3"},"scope":837,"src":"2525:186:3","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":589,"nodeType":"Block","src":"2824:2:3","statements":[]},"documentation":{"id":586,"nodeType":"StructuredDocumentation","src":"2717:67:3","text":" @dev The contract should be able to receive Eth."},"id":590,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":587,"nodeType":"ParameterList","parameters":[],"src":"2796:2:3"},"returnParameters":{"id":588,"nodeType":"ParameterList","parameters":[],"src":"2824:0:3"},"scope":837,"src":"2789:37:3","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":598,"nodeType":"Block","src":"2947:30:3","statements":[{"expression":{"id":596,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2964:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":595,"id":597,"nodeType":"Return","src":"2957:13:3"}]},"documentation":{"id":591,"nodeType":"StructuredDocumentation","src":"2832:55:3","text":" @dev Getter for the start timestamp."},"functionSelector":"be9a6555","id":599,"implemented":true,"kind":"function","modifiers":[],"name":"start","nameLocation":"2901:5:3","nodeType":"FunctionDefinition","parameters":{"id":592,"nodeType":"ParameterList","parameters":[],"src":"2906:2:3"},"returnParameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":599,"src":"2938:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":593,"name":"uint256","nodeType":"ElementaryTypeName","src":"2938:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2937:9:3"},"scope":837,"src":"2892:85:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":607,"nodeType":"Block","src":"3102:33:3","statements":[{"expression":{"id":605,"name":"_duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"3119:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":604,"id":606,"nodeType":"Return","src":"3112:16:3"}]},"documentation":{"id":600,"nodeType":"StructuredDocumentation","src":"2983:56:3","text":" @dev Getter for the vesting duration."},"functionSelector":"0fb5a6b4","id":608,"implemented":true,"kind":"function","modifiers":[],"name":"duration","nameLocation":"3053:8:3","nodeType":"FunctionDefinition","parameters":{"id":601,"nodeType":"ParameterList","parameters":[],"src":"3061:2:3"},"returnParameters":{"id":604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":603,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":608,"src":"3093:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":602,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3092:9:3"},"scope":837,"src":"3044:91:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":620,"nodeType":"Block","src":"3252:44:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":614,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"3269:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3269:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":616,"name":"duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":608,"src":"3279:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3269:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":613,"id":619,"nodeType":"Return","src":"3262:27:3"}]},"documentation":{"id":609,"nodeType":"StructuredDocumentation","src":"3141:53:3","text":" @dev Getter for the end timestamp."},"functionSelector":"efbe1c1c","id":621,"implemented":true,"kind":"function","modifiers":[],"name":"end","nameLocation":"3208:3:3","nodeType":"FunctionDefinition","parameters":{"id":610,"nodeType":"ParameterList","parameters":[],"src":"3211:2:3"},"returnParameters":{"id":613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":621,"src":"3243:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":611,"name":"uint256","nodeType":"ElementaryTypeName","src":"3243:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3242:9:3"},"scope":837,"src":"3199:97:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":629,"nodeType":"Block","src":"3419:33:3","statements":[{"expression":{"id":627,"name":"_released","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":555,"src":"3436:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":626,"id":628,"nodeType":"Return","src":"3429:16:3"}]},"documentation":{"id":622,"nodeType":"StructuredDocumentation","src":"3302:54:3","text":" @dev Amount of eth already released"},"functionSelector":"96132521","id":630,"implemented":true,"kind":"function","modifiers":[],"name":"released","nameLocation":"3370:8:3","nodeType":"FunctionDefinition","parameters":{"id":623,"nodeType":"ParameterList","parameters":[],"src":"3378:2:3"},"returnParameters":{"id":626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":630,"src":"3410:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":624,"name":"uint256","nodeType":"ElementaryTypeName","src":"3410:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3409:9:3"},"scope":837,"src":"3361:91:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":642,"nodeType":"Block","src":"3590:45:3","statements":[{"expression":{"baseExpression":{"id":638,"name":"_erc20Released","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":559,"src":"3607:14:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":640,"indexExpression":{"id":639,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":633,"src":"3622:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3607:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":637,"id":641,"nodeType":"Return","src":"3600:28:3"}]},"documentation":{"id":631,"nodeType":"StructuredDocumentation","src":"3458:56:3","text":" @dev Amount of token already released"},"functionSelector":"9852595c","id":643,"implemented":true,"kind":"function","modifiers":[],"name":"released","nameLocation":"3528:8:3","nodeType":"FunctionDefinition","parameters":{"id":634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":633,"mutability":"mutable","name":"token","nameLocation":"3545:5:3","nodeType":"VariableDeclaration","scope":643,"src":"3537:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":632,"name":"address","nodeType":"ElementaryTypeName","src":"3537:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3536:15:3"},"returnParameters":{"id":637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":643,"src":"3581:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":635,"name":"uint256","nodeType":"ElementaryTypeName","src":"3581:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3580:9:3"},"scope":837,"src":"3519:116:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":660,"nodeType":"Block","src":"3770:74:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":652,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3807:5:3","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3813:9:3","memberName":"timestamp","nodeType":"MemberAccess","src":"3807:15:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3800:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":650,"name":"uint64","nodeType":"ElementaryTypeName","src":"3800:6:3","typeDescriptions":{}}},"id":654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3800:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":649,"name":"vestedAmount","nodeType":"Identifier","overloadedDeclarations":[768,796],"referencedDeclaration":768,"src":"3787:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$returns$_t_uint256_$","typeString":"function (uint64) view returns (uint256)"}},"id":655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3787:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":656,"name":"released","nodeType":"Identifier","overloadedDeclarations":[630,643],"referencedDeclaration":630,"src":"3827:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3827:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3787:50:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":648,"id":659,"nodeType":"Return","src":"3780:57:3"}]},"documentation":{"id":644,"nodeType":"StructuredDocumentation","src":"3641:64:3","text":" @dev Getter for the amount of releasable eth."},"functionSelector":"fbccedae","id":661,"implemented":true,"kind":"function","modifiers":[],"name":"releasable","nameLocation":"3719:10:3","nodeType":"FunctionDefinition","parameters":{"id":645,"nodeType":"ParameterList","parameters":[],"src":"3729:2:3"},"returnParameters":{"id":648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":661,"src":"3761:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":646,"name":"uint256","nodeType":"ElementaryTypeName","src":"3761:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3760:9:3"},"scope":837,"src":"3710:134:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":682,"nodeType":"Block","src":"4065:86:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":670,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":664,"src":"4095:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":673,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4109:5:3","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4115:9:3","memberName":"timestamp","nodeType":"MemberAccess","src":"4109:15:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4102:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":671,"name":"uint64","nodeType":"ElementaryTypeName","src":"4102:6:3","typeDescriptions":{}}},"id":675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4102:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":669,"name":"vestedAmount","nodeType":"Identifier","overloadedDeclarations":[768,796],"referencedDeclaration":796,"src":"4082:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint64_$returns$_t_uint256_$","typeString":"function (address,uint64) view returns (uint256)"}},"id":676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4082:44:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":678,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":664,"src":"4138:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":677,"name":"released","nodeType":"Identifier","overloadedDeclarations":[630,643],"referencedDeclaration":643,"src":"4129:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4129:15:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4082:62:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":668,"id":681,"nodeType":"Return","src":"4075:69:3"}]},"documentation":{"id":662,"nodeType":"StructuredDocumentation","src":"3850:137:3","text":" @dev Getter for the amount of releasable `token` tokens. `token` should be the address of an\n {IERC20} contract."},"functionSelector":"a3f8eace","id":683,"implemented":true,"kind":"function","modifiers":[],"name":"releasable","nameLocation":"4001:10:3","nodeType":"FunctionDefinition","parameters":{"id":665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":664,"mutability":"mutable","name":"token","nameLocation":"4020:5:3","nodeType":"VariableDeclaration","scope":683,"src":"4012:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":663,"name":"address","nodeType":"ElementaryTypeName","src":"4012:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4011:15:3"},"returnParameters":{"id":668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":683,"src":"4056:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":666,"name":"uint256","nodeType":"ElementaryTypeName","src":"4056:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4055:9:3"},"scope":837,"src":"3992:159:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":711,"nodeType":"Block","src":"4323:164:3","statements":[{"assignments":[688],"declarations":[{"constant":false,"id":688,"mutability":"mutable","name":"amount","nameLocation":"4341:6:3","nodeType":"VariableDeclaration","scope":711,"src":"4333:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":687,"name":"uint256","nodeType":"ElementaryTypeName","src":"4333:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":691,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":689,"name":"releasable","nodeType":"Identifier","overloadedDeclarations":[661,683],"referencedDeclaration":661,"src":"4350:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4350:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4333:29:3"},{"expression":{"id":694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":692,"name":"_released","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":555,"src":"4372:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":693,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"4385:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4372:19:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":695,"nodeType":"ExpressionStatement","src":"4372:19:3"},{"eventCall":{"arguments":[{"id":697,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"4420:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":696,"name":"EtherReleased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"4406:13:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4406:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":699,"nodeType":"EmitStatement","src":"4401:26:3"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":705,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":446,"src":"4463:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4463:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":704,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4455:8:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":703,"name":"address","nodeType":"ElementaryTypeName","src":"4455:8:3","stateMutability":"payable","typeDescriptions":{}}},"id":707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4455:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":708,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"4473:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":700,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2407,"src":"4437:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$2407_$","typeString":"type(library Address)"}},"id":702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4445:9:3","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":2205,"src":"4437:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4437:43:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":710,"nodeType":"ExpressionStatement","src":"4437:43:3"}]},"documentation":{"id":684,"nodeType":"StructuredDocumentation","src":"4157:127:3","text":" @dev Release the native token (ether) that have already vested.\n Emits a {EtherReleased} event."},"functionSelector":"86d1a69f","id":712,"implemented":true,"kind":"function","modifiers":[],"name":"release","nameLocation":"4298:7:3","nodeType":"FunctionDefinition","parameters":{"id":685,"nodeType":"ParameterList","parameters":[],"src":"4305:2:3"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[],"src":"4323:0:3"},"scope":837,"src":"4289:198:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":746,"nodeType":"Block","src":"4658:199:3","statements":[{"assignments":[719],"declarations":[{"constant":false,"id":719,"mutability":"mutable","name":"amount","nameLocation":"4676:6:3","nodeType":"VariableDeclaration","scope":746,"src":"4668:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":718,"name":"uint256","nodeType":"ElementaryTypeName","src":"4668:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":723,"initialValue":{"arguments":[{"id":721,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":715,"src":"4696:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":720,"name":"releasable","nodeType":"Identifier","overloadedDeclarations":[661,683],"referencedDeclaration":683,"src":"4685:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4685:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4668:34:3"},{"expression":{"id":728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":724,"name":"_erc20Released","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":559,"src":"4712:14:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":726,"indexExpression":{"id":725,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":715,"src":"4727:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4712:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":727,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":719,"src":"4737:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4712:31:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":729,"nodeType":"ExpressionStatement","src":"4712:31:3"},{"eventCall":{"arguments":[{"id":731,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":715,"src":"4772:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":732,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":719,"src":"4779:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":730,"name":"ERC20Released","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":553,"src":"4758:13:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4758:28:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":734,"nodeType":"EmitStatement","src":"4753:33:3"},{"expression":{"arguments":[{"arguments":[{"id":739,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":715,"src":"4826:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":738,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"4819:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1657_$","typeString":"type(contract IERC20)"}},"id":740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4819:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"id":741,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":446,"src":"4834:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4834:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":743,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":719,"src":"4843:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":735,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"4796:9:3","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$2147_$","typeString":"type(library SafeERC20)"}},"id":737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4806:12:3","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":1728,"src":"4796:22:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4796:54:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":745,"nodeType":"ExpressionStatement","src":"4796:54:3"}]},"documentation":{"id":713,"nodeType":"StructuredDocumentation","src":"4493:113:3","text":" @dev Release the tokens that have already vested.\n Emits a {ERC20Released} event."},"functionSelector":"19165587","id":747,"implemented":true,"kind":"function","modifiers":[],"name":"release","nameLocation":"4620:7:3","nodeType":"FunctionDefinition","parameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":715,"mutability":"mutable","name":"token","nameLocation":"4636:5:3","nodeType":"VariableDeclaration","scope":747,"src":"4628:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":714,"name":"address","nodeType":"ElementaryTypeName","src":"4628:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4627:15:3"},"returnParameters":{"id":717,"nodeType":"ParameterList","parameters":[],"src":"4658:0:3"},"scope":837,"src":"4611:246:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":767,"nodeType":"Block","src":"5075:87:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":758,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5117:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_VestingWallet_$837","typeString":"contract VestingWallet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VestingWallet_$837","typeString":"contract VestingWallet"}],"id":757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5109:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":756,"name":"address","nodeType":"ElementaryTypeName","src":"5109:7:3","typeDescriptions":{}}},"id":759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5109:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5123:7:3","memberName":"balance","nodeType":"MemberAccess","src":"5109:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":761,"name":"released","nodeType":"Identifier","overloadedDeclarations":[630,643],"referencedDeclaration":630,"src":"5133:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5133:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5109:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":764,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":750,"src":"5145:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":755,"name":"_vestingSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":836,"src":"5092:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint64_$returns$_t_uint256_$","typeString":"function (uint256,uint64) view returns (uint256)"}},"id":765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5092:63:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":754,"id":766,"nodeType":"Return","src":"5085:70:3"}]},"documentation":{"id":748,"nodeType":"StructuredDocumentation","src":"4863:129:3","text":" @dev Calculates the amount of ether that has already vested. Default implementation is a linear vesting curve."},"functionSelector":"0a17b06b","id":768,"implemented":true,"kind":"function","modifiers":[],"name":"vestedAmount","nameLocation":"5006:12:3","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":750,"mutability":"mutable","name":"timestamp","nameLocation":"5026:9:3","nodeType":"VariableDeclaration","scope":768,"src":"5019:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":749,"name":"uint64","nodeType":"ElementaryTypeName","src":"5019:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"5018:18:3"},"returnParameters":{"id":754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":768,"src":"5066:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":752,"name":"uint256","nodeType":"ElementaryTypeName","src":"5066:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5065:9:3"},"scope":837,"src":"4997:165:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":795,"nodeType":"Block","src":"5396:109:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":785,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5462:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_VestingWallet_$837","typeString":"contract VestingWallet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VestingWallet_$837","typeString":"contract VestingWallet"}],"id":784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5454:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"5454:7:3","typeDescriptions":{}}},"id":786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5454:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":780,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":771,"src":"5437:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":779,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"5430:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1657_$","typeString":"type(contract IERC20)"}},"id":781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5430:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5444:9:3","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1614,"src":"5430:23:3","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5430:38:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":789,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":771,"src":"5480:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":788,"name":"released","nodeType":"Identifier","overloadedDeclarations":[630,643],"referencedDeclaration":643,"src":"5471:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5471:15:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5430:56:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":792,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":773,"src":"5488:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":778,"name":"_vestingSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":836,"src":"5413:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint64_$returns$_t_uint256_$","typeString":"function (uint256,uint64) view returns (uint256)"}},"id":793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5413:85:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":777,"id":794,"nodeType":"Return","src":"5406:92:3"}]},"documentation":{"id":769,"nodeType":"StructuredDocumentation","src":"5168:130:3","text":" @dev Calculates the amount of tokens that has already vested. Default implementation is a linear vesting curve."},"functionSelector":"810ec23b","id":796,"implemented":true,"kind":"function","modifiers":[],"name":"vestedAmount","nameLocation":"5312:12:3","nodeType":"FunctionDefinition","parameters":{"id":774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":771,"mutability":"mutable","name":"token","nameLocation":"5333:5:3","nodeType":"VariableDeclaration","scope":796,"src":"5325:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":770,"name":"address","nodeType":"ElementaryTypeName","src":"5325:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":773,"mutability":"mutable","name":"timestamp","nameLocation":"5347:9:3","nodeType":"VariableDeclaration","scope":796,"src":"5340:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":772,"name":"uint64","nodeType":"ElementaryTypeName","src":"5340:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"5324:33:3"},"returnParameters":{"id":777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":776,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":796,"src":"5387:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":775,"name":"uint256","nodeType":"ElementaryTypeName","src":"5387:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5386:9:3"},"scope":837,"src":"5303:202:3","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":835,"nodeType":"Block","src":"5809:243:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":806,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"5823:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":807,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"5835:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5835:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5823:19:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":813,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"5887:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":814,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":621,"src":"5900:3:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5900:5:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5887:18:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":832,"nodeType":"Block","src":"5960:86:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":820,"name":"totalAllocation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"5982:15:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":821,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6001:9:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":822,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"6013:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6013:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6001:19:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":825,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6000:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5982:39:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":827,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5981:41:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":828,"name":"duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":608,"src":"6025:8:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6025:10:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5981:54:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":805,"id":831,"nodeType":"Return","src":"5974:61:3"}]},"id":833,"nodeType":"IfStatement","src":"5883:163:3","trueBody":{"id":819,"nodeType":"Block","src":"5907:47:3","statements":[{"expression":{"id":817,"name":"totalAllocation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"5928:15:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":805,"id":818,"nodeType":"Return","src":"5921:22:3"}]}},"id":834,"nodeType":"IfStatement","src":"5819:227:3","trueBody":{"id":812,"nodeType":"Block","src":"5844:33:3","statements":[{"expression":{"hexValue":"30","id":810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5865:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":805,"id":811,"nodeType":"Return","src":"5858:8:3"}]}}]},"documentation":{"id":797,"nodeType":"StructuredDocumentation","src":"5511:184:3","text":" @dev Virtual implementation of the vesting formula. This returns the amount vested, as a function of time, for\n an asset given its total historical allocation."},"id":836,"implemented":true,"kind":"function","modifiers":[],"name":"_vestingSchedule","nameLocation":"5709:16:3","nodeType":"FunctionDefinition","parameters":{"id":802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"totalAllocation","nameLocation":"5734:15:3","nodeType":"VariableDeclaration","scope":836,"src":"5726:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":798,"name":"uint256","nodeType":"ElementaryTypeName","src":"5726:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":801,"mutability":"mutable","name":"timestamp","nameLocation":"5758:9:3","nodeType":"VariableDeclaration","scope":836,"src":"5751:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":800,"name":"uint64","nodeType":"ElementaryTypeName","src":"5751:6:3","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"5725:43:3"},"returnParameters":{"id":805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":804,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":836,"src":"5800:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":803,"name":"uint256","nodeType":"ElementaryTypeName","src":"5800:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5799:9:3"},"scope":837,"src":"5700:352:3","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":838,"src":"2053:4001:3","usedErrors":[392,397,1695,2447,2450],"usedEvents":[403,547,553]}],"src":"108:5947:3"},"id":3},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","exportedSymbols":{"IERC1363":[919],"IERC165":[2672],"IERC20":[1657]},"id":920,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":839,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:4"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","file":"./IERC20.sol","id":841,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":920,"sourceUnit":928,"src":"133:36:4","symbolAliases":[{"foreign":{"id":840,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"141:6:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","file":"./IERC165.sol","id":843,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":920,"sourceUnit":924,"src":"170:38:4","symbolAliases":[{"foreign":{"id":842,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"178:7:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":845,"name":"IERC20","nameLocations":["590:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"590:6:4"},"id":846,"nodeType":"InheritanceSpecifier","src":"590:6:4"},{"baseName":{"id":847,"name":"IERC165","nameLocations":["598:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":2672,"src":"598:7:4"},"id":848,"nodeType":"InheritanceSpecifier","src":"598:7:4"}],"canonicalName":"IERC1363","contractDependencies":[],"contractKind":"interface","documentation":{"id":844,"nodeType":"StructuredDocumentation","src":"210:357:4","text":" @title IERC1363\n @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction."},"fullyImplemented":false,"id":919,"linearizedBaseContracts":[919,2672,1657],"name":"IERC1363","nameLocation":"578:8:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":849,"nodeType":"StructuredDocumentation","src":"1148:370:4","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"1296ee62","id":858,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"1532:15:4","nodeType":"FunctionDefinition","parameters":{"id":854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":851,"mutability":"mutable","name":"to","nameLocation":"1556:2:4","nodeType":"VariableDeclaration","scope":858,"src":"1548:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":850,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":853,"mutability":"mutable","name":"value","nameLocation":"1568:5:4","nodeType":"VariableDeclaration","scope":858,"src":"1560:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":852,"name":"uint256","nodeType":"ElementaryTypeName","src":"1560:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1547:27:4"},"returnParameters":{"id":857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":856,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":858,"src":"1593:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":855,"name":"bool","nodeType":"ElementaryTypeName","src":"1593:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1592:6:4"},"scope":919,"src":"1523:76:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":859,"nodeType":"StructuredDocumentation","src":"1605:453:4","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"4000aea0","id":870,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"2072:15:4","nodeType":"FunctionDefinition","parameters":{"id":866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"to","nameLocation":"2096:2:4","nodeType":"VariableDeclaration","scope":870,"src":"2088:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":860,"name":"address","nodeType":"ElementaryTypeName","src":"2088:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":863,"mutability":"mutable","name":"value","nameLocation":"2108:5:4","nodeType":"VariableDeclaration","scope":870,"src":"2100:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":862,"name":"uint256","nodeType":"ElementaryTypeName","src":"2100:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":865,"mutability":"mutable","name":"data","nameLocation":"2130:4:4","nodeType":"VariableDeclaration","scope":870,"src":"2115:19:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":864,"name":"bytes","nodeType":"ElementaryTypeName","src":"2115:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2087:48:4"},"returnParameters":{"id":869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":868,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":870,"src":"2154:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":867,"name":"bool","nodeType":"ElementaryTypeName","src":"2154:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2153:6:4"},"scope":919,"src":"2063:97:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":871,"nodeType":"StructuredDocumentation","src":"2166:453:4","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"d8fbe994","id":882,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"2633:19:4","nodeType":"FunctionDefinition","parameters":{"id":878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":873,"mutability":"mutable","name":"from","nameLocation":"2661:4:4","nodeType":"VariableDeclaration","scope":882,"src":"2653:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":872,"name":"address","nodeType":"ElementaryTypeName","src":"2653:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":875,"mutability":"mutable","name":"to","nameLocation":"2675:2:4","nodeType":"VariableDeclaration","scope":882,"src":"2667:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":874,"name":"address","nodeType":"ElementaryTypeName","src":"2667:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":877,"mutability":"mutable","name":"value","nameLocation":"2687:5:4","nodeType":"VariableDeclaration","scope":882,"src":"2679:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":876,"name":"uint256","nodeType":"ElementaryTypeName","src":"2679:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2652:41:4"},"returnParameters":{"id":881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":882,"src":"2712:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":879,"name":"bool","nodeType":"ElementaryTypeName","src":"2712:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2711:6:4"},"scope":919,"src":"2624:94:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":883,"nodeType":"StructuredDocumentation","src":"2724:536:4","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"c1d34b89","id":896,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"3274:19:4","nodeType":"FunctionDefinition","parameters":{"id":892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":885,"mutability":"mutable","name":"from","nameLocation":"3302:4:4","nodeType":"VariableDeclaration","scope":896,"src":"3294:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":884,"name":"address","nodeType":"ElementaryTypeName","src":"3294:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":887,"mutability":"mutable","name":"to","nameLocation":"3316:2:4","nodeType":"VariableDeclaration","scope":896,"src":"3308:10:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":886,"name":"address","nodeType":"ElementaryTypeName","src":"3308:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"value","nameLocation":"3328:5:4","nodeType":"VariableDeclaration","scope":896,"src":"3320:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"3320:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":891,"mutability":"mutable","name":"data","nameLocation":"3350:4:4","nodeType":"VariableDeclaration","scope":896,"src":"3335:19:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":890,"name":"bytes","nodeType":"ElementaryTypeName","src":"3335:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3293:62:4"},"returnParameters":{"id":895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":894,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":896,"src":"3374:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":893,"name":"bool","nodeType":"ElementaryTypeName","src":"3374:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3373:6:4"},"scope":919,"src":"3265:115:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":897,"nodeType":"StructuredDocumentation","src":"3386:390:4","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"3177029f","id":906,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"3790:14:4","nodeType":"FunctionDefinition","parameters":{"id":902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":899,"mutability":"mutable","name":"spender","nameLocation":"3813:7:4","nodeType":"VariableDeclaration","scope":906,"src":"3805:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":898,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":901,"mutability":"mutable","name":"value","nameLocation":"3830:5:4","nodeType":"VariableDeclaration","scope":906,"src":"3822:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":900,"name":"uint256","nodeType":"ElementaryTypeName","src":"3822:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3804:32:4"},"returnParameters":{"id":905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":906,"src":"3855:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":903,"name":"bool","nodeType":"ElementaryTypeName","src":"3855:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3854:6:4"},"scope":919,"src":"3781:80:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":907,"nodeType":"StructuredDocumentation","src":"3867:478:4","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @param data Additional data with no specified format, sent in call to `spender`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"cae9ca51","id":918,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"4359:14:4","nodeType":"FunctionDefinition","parameters":{"id":914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":909,"mutability":"mutable","name":"spender","nameLocation":"4382:7:4","nodeType":"VariableDeclaration","scope":918,"src":"4374:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":908,"name":"address","nodeType":"ElementaryTypeName","src":"4374:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":911,"mutability":"mutable","name":"value","nameLocation":"4399:5:4","nodeType":"VariableDeclaration","scope":918,"src":"4391:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":910,"name":"uint256","nodeType":"ElementaryTypeName","src":"4391:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"data","nameLocation":"4421:4:4","nodeType":"VariableDeclaration","scope":918,"src":"4406:19:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":912,"name":"bytes","nodeType":"ElementaryTypeName","src":"4406:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4373:53:4"},"returnParameters":{"id":917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":916,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":918,"src":"4445:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":915,"name":"bool","nodeType":"ElementaryTypeName","src":"4445:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4444:6:4"},"scope":919,"src":"4350:101:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":920,"src":"568:3885:4","usedErrors":[],"usedEvents":[1591,1600]}],"src":"107:4347:4"},"id":4},"@openzeppelin/contracts/interfaces/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","exportedSymbols":{"IERC165":[2672]},"id":924,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":921,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:5"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../utils/introspection/IERC165.sol","id":923,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":924,"sourceUnit":2673,"src":"132:59:5","symbolAliases":[{"foreign":{"id":922,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"140:7:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"106:86:5"},"id":5},"@openzeppelin/contracts/interfaces/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","exportedSymbols":{"IERC20":[1657]},"id":928,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":925,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":927,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":928,"sourceUnit":1658,"src":"131:49:6","symbolAliases":[{"foreign":{"id":926,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"139:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"105:76:6"},"id":6},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[1064],"IERC20Errors":[969],"IERC721Errors":[1017]},"id":1065,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":929,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:7"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":930,"nodeType":"StructuredDocumentation","src":"138:141:7","text":" @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."},"fullyImplemented":true,"id":969,"linearizedBaseContracts":[969],"name":"IERC20Errors","nameLocation":"290:12:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":931,"nodeType":"StructuredDocumentation","src":"309:309:7","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":939,"name":"ERC20InsufficientBalance","nameLocation":"629:24:7","nodeType":"ErrorDefinition","parameters":{"id":938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":933,"mutability":"mutable","name":"sender","nameLocation":"662:6:7","nodeType":"VariableDeclaration","scope":939,"src":"654:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":932,"name":"address","nodeType":"ElementaryTypeName","src":"654:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":935,"mutability":"mutable","name":"balance","nameLocation":"678:7:7","nodeType":"VariableDeclaration","scope":939,"src":"670:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":934,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":937,"mutability":"mutable","name":"needed","nameLocation":"695:6:7","nodeType":"VariableDeclaration","scope":939,"src":"687:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":936,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"653:49:7"},"src":"623:80:7"},{"documentation":{"id":940,"nodeType":"StructuredDocumentation","src":"709:152:7","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":944,"name":"ERC20InvalidSender","nameLocation":"872:18:7","nodeType":"ErrorDefinition","parameters":{"id":943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"sender","nameLocation":"899:6:7","nodeType":"VariableDeclaration","scope":944,"src":"891:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":941,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"890:16:7"},"src":"866:41:7"},{"documentation":{"id":945,"nodeType":"StructuredDocumentation","src":"913:159:7","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":949,"name":"ERC20InvalidReceiver","nameLocation":"1083:20:7","nodeType":"ErrorDefinition","parameters":{"id":948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":947,"mutability":"mutable","name":"receiver","nameLocation":"1112:8:7","nodeType":"VariableDeclaration","scope":949,"src":"1104:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":946,"name":"address","nodeType":"ElementaryTypeName","src":"1104:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:18:7"},"src":"1077:45:7"},{"documentation":{"id":950,"nodeType":"StructuredDocumentation","src":"1128:345:7","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":958,"name":"ERC20InsufficientAllowance","nameLocation":"1484:26:7","nodeType":"ErrorDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":952,"mutability":"mutable","name":"spender","nameLocation":"1519:7:7","nodeType":"VariableDeclaration","scope":958,"src":"1511:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":951,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":954,"mutability":"mutable","name":"allowance","nameLocation":"1536:9:7","nodeType":"VariableDeclaration","scope":958,"src":"1528:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":953,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":956,"mutability":"mutable","name":"needed","nameLocation":"1555:6:7","nodeType":"VariableDeclaration","scope":958,"src":"1547:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":955,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1510:52:7"},"src":"1478:85:7"},{"documentation":{"id":959,"nodeType":"StructuredDocumentation","src":"1569:174:7","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":963,"name":"ERC20InvalidApprover","nameLocation":"1754:20:7","nodeType":"ErrorDefinition","parameters":{"id":962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":961,"mutability":"mutable","name":"approver","nameLocation":"1783:8:7","nodeType":"VariableDeclaration","scope":963,"src":"1775:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":960,"name":"address","nodeType":"ElementaryTypeName","src":"1775:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1774:18:7"},"src":"1748:45:7"},{"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"1799:195:7","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":968,"name":"ERC20InvalidSpender","nameLocation":"2005:19:7","nodeType":"ErrorDefinition","parameters":{"id":967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"spender","nameLocation":"2033:7:7","nodeType":"VariableDeclaration","scope":968,"src":"2025:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"2025:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2024:17:7"},"src":"1999:43:7"}],"scope":1065,"src":"280:1764:7","usedErrors":[939,944,949,958,963,968],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":970,"nodeType":"StructuredDocumentation","src":"2046:143:7","text":" @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."},"fullyImplemented":true,"id":1017,"linearizedBaseContracts":[1017],"name":"IERC721Errors","nameLocation":"2200:13:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":971,"nodeType":"StructuredDocumentation","src":"2220:219:7","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":975,"name":"ERC721InvalidOwner","nameLocation":"2450:18:7","nodeType":"ErrorDefinition","parameters":{"id":974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":973,"mutability":"mutable","name":"owner","nameLocation":"2477:5:7","nodeType":"VariableDeclaration","scope":975,"src":"2469:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":972,"name":"address","nodeType":"ElementaryTypeName","src":"2469:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2468:15:7"},"src":"2444:40:7"},{"documentation":{"id":976,"nodeType":"StructuredDocumentation","src":"2490:132:7","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":980,"name":"ERC721NonexistentToken","nameLocation":"2633:22:7","nodeType":"ErrorDefinition","parameters":{"id":979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":978,"mutability":"mutable","name":"tokenId","nameLocation":"2664:7:7","nodeType":"VariableDeclaration","scope":980,"src":"2656:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":977,"name":"uint256","nodeType":"ElementaryTypeName","src":"2656:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2655:17:7"},"src":"2627:46:7"},{"documentation":{"id":981,"nodeType":"StructuredDocumentation","src":"2679:289:7","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":989,"name":"ERC721IncorrectOwner","nameLocation":"2979:20:7","nodeType":"ErrorDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":983,"mutability":"mutable","name":"sender","nameLocation":"3008:6:7","nodeType":"VariableDeclaration","scope":989,"src":"3000:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":982,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":985,"mutability":"mutable","name":"tokenId","nameLocation":"3024:7:7","nodeType":"VariableDeclaration","scope":989,"src":"3016:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":984,"name":"uint256","nodeType":"ElementaryTypeName","src":"3016:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":987,"mutability":"mutable","name":"owner","nameLocation":"3041:5:7","nodeType":"VariableDeclaration","scope":989,"src":"3033:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":986,"name":"address","nodeType":"ElementaryTypeName","src":"3033:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2999:48:7"},"src":"2973:75:7"},{"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"3054:152:7","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":994,"name":"ERC721InvalidSender","nameLocation":"3217:19:7","nodeType":"ErrorDefinition","parameters":{"id":993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"mutability":"mutable","name":"sender","nameLocation":"3245:6:7","nodeType":"VariableDeclaration","scope":994,"src":"3237:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":991,"name":"address","nodeType":"ElementaryTypeName","src":"3237:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3236:16:7"},"src":"3211:42:7"},{"documentation":{"id":995,"nodeType":"StructuredDocumentation","src":"3259:159:7","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":999,"name":"ERC721InvalidReceiver","nameLocation":"3429:21:7","nodeType":"ErrorDefinition","parameters":{"id":998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":997,"mutability":"mutable","name":"receiver","nameLocation":"3459:8:7","nodeType":"VariableDeclaration","scope":999,"src":"3451:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":996,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:7"},"src":"3423:46:7"},{"documentation":{"id":1000,"nodeType":"StructuredDocumentation","src":"3475:247:7","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":1006,"name":"ERC721InsufficientApproval","nameLocation":"3733:26:7","nodeType":"ErrorDefinition","parameters":{"id":1005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1002,"mutability":"mutable","name":"operator","nameLocation":"3768:8:7","nodeType":"VariableDeclaration","scope":1006,"src":"3760:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1001,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1004,"mutability":"mutable","name":"tokenId","nameLocation":"3786:7:7","nodeType":"VariableDeclaration","scope":1006,"src":"3778:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1003,"name":"uint256","nodeType":"ElementaryTypeName","src":"3778:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3759:35:7"},"src":"3727:68:7"},{"documentation":{"id":1007,"nodeType":"StructuredDocumentation","src":"3801:174:7","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":1011,"name":"ERC721InvalidApprover","nameLocation":"3986:21:7","nodeType":"ErrorDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"mutability":"mutable","name":"approver","nameLocation":"4016:8:7","nodeType":"VariableDeclaration","scope":1011,"src":"4008:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"4008:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4007:18:7"},"src":"3980:46:7"},{"documentation":{"id":1012,"nodeType":"StructuredDocumentation","src":"4032:197:7","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":1016,"name":"ERC721InvalidOperator","nameLocation":"4240:21:7","nodeType":"ErrorDefinition","parameters":{"id":1015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1014,"mutability":"mutable","name":"operator","nameLocation":"4270:8:7","nodeType":"VariableDeclaration","scope":1016,"src":"4262:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1013,"name":"address","nodeType":"ElementaryTypeName","src":"4262:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4261:18:7"},"src":"4234:46:7"}],"scope":1065,"src":"2190:2092:7","usedErrors":[975,980,989,994,999,1006,1011,1016],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1018,"nodeType":"StructuredDocumentation","src":"4284:145:7","text":" @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."},"fullyImplemented":true,"id":1064,"linearizedBaseContracts":[1064],"name":"IERC1155Errors","nameLocation":"4440:14:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1019,"nodeType":"StructuredDocumentation","src":"4461:361:7","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":1029,"name":"ERC1155InsufficientBalance","nameLocation":"4833:26:7","nodeType":"ErrorDefinition","parameters":{"id":1028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1021,"mutability":"mutable","name":"sender","nameLocation":"4868:6:7","nodeType":"VariableDeclaration","scope":1029,"src":"4860:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1020,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1023,"mutability":"mutable","name":"balance","nameLocation":"4884:7:7","nodeType":"VariableDeclaration","scope":1029,"src":"4876:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1022,"name":"uint256","nodeType":"ElementaryTypeName","src":"4876:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1025,"mutability":"mutable","name":"needed","nameLocation":"4901:6:7","nodeType":"VariableDeclaration","scope":1029,"src":"4893:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1024,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1027,"mutability":"mutable","name":"tokenId","nameLocation":"4917:7:7","nodeType":"VariableDeclaration","scope":1029,"src":"4909:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1026,"name":"uint256","nodeType":"ElementaryTypeName","src":"4909:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4859:66:7"},"src":"4827:99:7"},{"documentation":{"id":1030,"nodeType":"StructuredDocumentation","src":"4932:152:7","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":1034,"name":"ERC1155InvalidSender","nameLocation":"5095:20:7","nodeType":"ErrorDefinition","parameters":{"id":1033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1032,"mutability":"mutable","name":"sender","nameLocation":"5124:6:7","nodeType":"VariableDeclaration","scope":1034,"src":"5116:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1031,"name":"address","nodeType":"ElementaryTypeName","src":"5116:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5115:16:7"},"src":"5089:43:7"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"5138:159:7","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":1039,"name":"ERC1155InvalidReceiver","nameLocation":"5308:22:7","nodeType":"ErrorDefinition","parameters":{"id":1038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1037,"mutability":"mutable","name":"receiver","nameLocation":"5339:8:7","nodeType":"VariableDeclaration","scope":1039,"src":"5331:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1036,"name":"address","nodeType":"ElementaryTypeName","src":"5331:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5330:18:7"},"src":"5302:47:7"},{"documentation":{"id":1040,"nodeType":"StructuredDocumentation","src":"5355:256:7","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":1046,"name":"ERC1155MissingApprovalForAll","nameLocation":"5622:28:7","nodeType":"ErrorDefinition","parameters":{"id":1045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1042,"mutability":"mutable","name":"operator","nameLocation":"5659:8:7","nodeType":"VariableDeclaration","scope":1046,"src":"5651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1041,"name":"address","nodeType":"ElementaryTypeName","src":"5651:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1044,"mutability":"mutable","name":"owner","nameLocation":"5677:5:7","nodeType":"VariableDeclaration","scope":1046,"src":"5669:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1043,"name":"address","nodeType":"ElementaryTypeName","src":"5669:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5650:33:7"},"src":"5616:68:7"},{"documentation":{"id":1047,"nodeType":"StructuredDocumentation","src":"5690:174:7","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":1051,"name":"ERC1155InvalidApprover","nameLocation":"5875:22:7","nodeType":"ErrorDefinition","parameters":{"id":1050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1049,"mutability":"mutable","name":"approver","nameLocation":"5906:8:7","nodeType":"VariableDeclaration","scope":1051,"src":"5898:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1048,"name":"address","nodeType":"ElementaryTypeName","src":"5898:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5897:18:7"},"src":"5869:47:7"},{"documentation":{"id":1052,"nodeType":"StructuredDocumentation","src":"5922:197:7","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":1056,"name":"ERC1155InvalidOperator","nameLocation":"6130:22:7","nodeType":"ErrorDefinition","parameters":{"id":1055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1054,"mutability":"mutable","name":"operator","nameLocation":"6161:8:7","nodeType":"VariableDeclaration","scope":1056,"src":"6153:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1053,"name":"address","nodeType":"ElementaryTypeName","src":"6153:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6152:18:7"},"src":"6124:47:7"},{"documentation":{"id":1057,"nodeType":"StructuredDocumentation","src":"6177:280:7","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":1063,"name":"ERC1155InvalidArrayLength","nameLocation":"6468:25:7","nodeType":"ErrorDefinition","parameters":{"id":1062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1059,"mutability":"mutable","name":"idsLength","nameLocation":"6502:9:7","nodeType":"VariableDeclaration","scope":1063,"src":"6494:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1058,"name":"uint256","nodeType":"ElementaryTypeName","src":"6494:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1061,"mutability":"mutable","name":"valuesLength","nameLocation":"6521:12:7","nodeType":"VariableDeclaration","scope":1063,"src":"6513:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1060,"name":"uint256","nodeType":"ElementaryTypeName","src":"6513:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6493:41:7"},"src":"6462:73:7"}],"scope":1065,"src":"4430:2107:7","usedErrors":[1029,1034,1039,1046,1051,1056,1063],"usedEvents":[]}],"src":"112:6426:7"},"id":7},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[2437],"ERC20":[1579],"IERC20":[1657],"IERC20Errors":[969],"IERC20Metadata":[1683]},"id":1580,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1066,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:8"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":1068,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1580,"sourceUnit":1658,"src":"131:36:8","symbolAliases":[{"foreign":{"id":1067,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"139:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"./extensions/IERC20Metadata.sol","id":1070,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1580,"sourceUnit":1684,"src":"168:63:8","symbolAliases":[{"foreign":{"id":1069,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1683,"src":"176:14:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":1072,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1580,"sourceUnit":2438,"src":"232:48:8","symbolAliases":[{"foreign":{"id":1071,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2437,"src":"240:7:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":1074,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1580,"sourceUnit":1065,"src":"281:65:8","symbolAliases":[{"foreign":{"id":1073,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":969,"src":"289:12:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":1076,"name":"Context","nameLocations":["1133:7:8"],"nodeType":"IdentifierPath","referencedDeclaration":2437,"src":"1133:7:8"},"id":1077,"nodeType":"InheritanceSpecifier","src":"1133:7:8"},{"baseName":{"id":1078,"name":"IERC20","nameLocations":["1142:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"1142:6:8"},"id":1079,"nodeType":"InheritanceSpecifier","src":"1142:6:8"},{"baseName":{"id":1080,"name":"IERC20Metadata","nameLocations":["1150:14:8"],"nodeType":"IdentifierPath","referencedDeclaration":1683,"src":"1150:14:8"},"id":1081,"nodeType":"InheritanceSpecifier","src":"1150:14:8"},{"baseName":{"id":1082,"name":"IERC20Errors","nameLocations":["1166:12:8"],"nodeType":"IdentifierPath","referencedDeclaration":969,"src":"1166:12:8"},"id":1083,"nodeType":"InheritanceSpecifier","src":"1166:12:8"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":1075,"nodeType":"StructuredDocumentation","src":"348:757:8","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications."},"fullyImplemented":true,"id":1579,"linearizedBaseContracts":[1579,969,1683,1657,2437],"name":"ERC20","nameLocation":"1124:5:8","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":1087,"mutability":"mutable","name":"_balances","nameLocation":"1229:9:8","nodeType":"VariableDeclaration","scope":1579,"src":"1185:53:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":1086,"keyName":"account","keyNameLocation":"1201:7:8","keyType":{"id":1084,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1185:35:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1212:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":1093,"mutability":"mutable","name":"_allowances","nameLocation":"1317:11:8","nodeType":"VariableDeclaration","scope":1579,"src":"1245:83:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":1092,"keyName":"account","keyNameLocation":"1261:7:8","keyType":{"id":1088,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1245:63:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1091,"keyName":"spender","keyNameLocation":"1288:7:8","keyType":{"id":1089,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1272:35:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1090,"name":"uint256","nodeType":"ElementaryTypeName","src":"1299:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":1095,"mutability":"mutable","name":"_totalSupply","nameLocation":"1351:12:8","nodeType":"VariableDeclaration","scope":1579,"src":"1335:28:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1094,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":1097,"mutability":"mutable","name":"_name","nameLocation":"1385:5:8","nodeType":"VariableDeclaration","scope":1579,"src":"1370:20:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":1096,"name":"string","nodeType":"ElementaryTypeName","src":"1370:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":1099,"mutability":"mutable","name":"_symbol","nameLocation":"1411:7:8","nodeType":"VariableDeclaration","scope":1579,"src":"1396:22:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":1098,"name":"string","nodeType":"ElementaryTypeName","src":"1396:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":1115,"nodeType":"Block","src":"1638:57:8","statements":[{"expression":{"id":1109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1107,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1097,"src":"1648:5:8","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1108,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1102,"src":"1656:5:8","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1648:13:8","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":1110,"nodeType":"ExpressionStatement","src":"1648:13:8"},{"expression":{"id":1113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1111,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1099,"src":"1671:7:8","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1112,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1104,"src":"1681:7:8","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1671:17:8","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":1114,"nodeType":"ExpressionStatement","src":"1671:17:8"}]},"documentation":{"id":1100,"nodeType":"StructuredDocumentation","src":"1425:152:8","text":" @dev Sets the values for {name} and {symbol}.\n Both values are immutable: they can only be set once during construction."},"id":1116,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":1105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1102,"mutability":"mutable","name":"name_","nameLocation":"1608:5:8","nodeType":"VariableDeclaration","scope":1116,"src":"1594:19:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1101,"name":"string","nodeType":"ElementaryTypeName","src":"1594:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1104,"mutability":"mutable","name":"symbol_","nameLocation":"1629:7:8","nodeType":"VariableDeclaration","scope":1116,"src":"1615:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1103,"name":"string","nodeType":"ElementaryTypeName","src":"1615:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1593:44:8"},"returnParameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"1638:0:8"},"scope":1579,"src":"1582:113:8","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1670],"body":{"id":1124,"nodeType":"Block","src":"1820:29:8","statements":[{"expression":{"id":1122,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1097,"src":"1837:5:8","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":1121,"id":1123,"nodeType":"Return","src":"1830:12:8"}]},"documentation":{"id":1117,"nodeType":"StructuredDocumentation","src":"1701:54:8","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":1125,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"1769:4:8","nodeType":"FunctionDefinition","parameters":{"id":1118,"nodeType":"ParameterList","parameters":[],"src":"1773:2:8"},"returnParameters":{"id":1121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1125,"src":"1805:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1119,"name":"string","nodeType":"ElementaryTypeName","src":"1805:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1804:15:8"},"scope":1579,"src":"1760:89:8","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1676],"body":{"id":1133,"nodeType":"Block","src":"2024:31:8","statements":[{"expression":{"id":1131,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1099,"src":"2041:7:8","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":1130,"id":1132,"nodeType":"Return","src":"2034:14:8"}]},"documentation":{"id":1126,"nodeType":"StructuredDocumentation","src":"1855:102:8","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":1134,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"1971:6:8","nodeType":"FunctionDefinition","parameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"1977:2:8"},"returnParameters":{"id":1130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1134,"src":"2009:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1128,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2008:15:8"},"scope":1579,"src":"1962:93:8","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1682],"body":{"id":1142,"nodeType":"Block","src":"2744:26:8","statements":[{"expression":{"hexValue":"3138","id":1140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2761:2:8","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":1139,"id":1141,"nodeType":"Return","src":"2754:9:8"}]},"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"2061:622:8","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":1143,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2697:8:8","nodeType":"FunctionDefinition","parameters":{"id":1136,"nodeType":"ParameterList","parameters":[],"src":"2705:2:8"},"returnParameters":{"id":1139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1143,"src":"2737:5:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1137,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:8","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2736:7:8"},"scope":1579,"src":"2688:82:8","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1606],"body":{"id":1151,"nodeType":"Block","src":"2891:36:8","statements":[{"expression":{"id":1149,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1095,"src":"2908:12:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1148,"id":1150,"nodeType":"Return","src":"2901:19:8"}]},"documentation":{"id":1144,"nodeType":"StructuredDocumentation","src":"2776:49:8","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":1152,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2839:11:8","nodeType":"FunctionDefinition","parameters":{"id":1145,"nodeType":"ParameterList","parameters":[],"src":"2850:2:8"},"returnParameters":{"id":1148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1152,"src":"2882:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1146,"name":"uint256","nodeType":"ElementaryTypeName","src":"2882:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2881:9:8"},"scope":1579,"src":"2830:97:8","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1614],"body":{"id":1164,"nodeType":"Block","src":"3059:42:8","statements":[{"expression":{"baseExpression":{"id":1160,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1087,"src":"3076:9:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1162,"indexExpression":{"id":1161,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"3086:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3076:18:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1159,"id":1163,"nodeType":"Return","src":"3069:25:8"}]},"documentation":{"id":1153,"nodeType":"StructuredDocumentation","src":"2933:47:8","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":1165,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2994:9:8","nodeType":"FunctionDefinition","parameters":{"id":1156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1155,"mutability":"mutable","name":"account","nameLocation":"3012:7:8","nodeType":"VariableDeclaration","scope":1165,"src":"3004:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1154,"name":"address","nodeType":"ElementaryTypeName","src":"3004:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3003:17:8"},"returnParameters":{"id":1159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1165,"src":"3050:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1157,"name":"uint256","nodeType":"ElementaryTypeName","src":"3050:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3049:9:8"},"scope":1579,"src":"2985:116:8","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1624],"body":{"id":1188,"nodeType":"Block","src":"3371:103:8","statements":[{"assignments":[1176],"declarations":[{"constant":false,"id":1176,"mutability":"mutable","name":"owner","nameLocation":"3389:5:8","nodeType":"VariableDeclaration","scope":1188,"src":"3381:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1175,"name":"address","nodeType":"ElementaryTypeName","src":"3381:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1179,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1177,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"3397:10:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3397:12:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3381:28:8"},{"expression":{"arguments":[{"id":1181,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"3429:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1182,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1168,"src":"3436:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1183,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1170,"src":"3440:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1180,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1309,"src":"3419:9:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3419:27:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1185,"nodeType":"ExpressionStatement","src":"3419:27:8"},{"expression":{"hexValue":"74727565","id":1186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3463:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":1174,"id":1187,"nodeType":"Return","src":"3456:11:8"}]},"documentation":{"id":1166,"nodeType":"StructuredDocumentation","src":"3107:184:8","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`."},"functionSelector":"a9059cbb","id":1189,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3305:8:8","nodeType":"FunctionDefinition","parameters":{"id":1171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"to","nameLocation":"3322:2:8","nodeType":"VariableDeclaration","scope":1189,"src":"3314:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1167,"name":"address","nodeType":"ElementaryTypeName","src":"3314:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1170,"mutability":"mutable","name":"value","nameLocation":"3334:5:8","nodeType":"VariableDeclaration","scope":1189,"src":"3326:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1169,"name":"uint256","nodeType":"ElementaryTypeName","src":"3326:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3313:27:8"},"returnParameters":{"id":1174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1189,"src":"3365:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1172,"name":"bool","nodeType":"ElementaryTypeName","src":"3365:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3364:6:8"},"scope":1579,"src":"3296:178:8","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1634],"body":{"id":1205,"nodeType":"Block","src":"3621:51:8","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":1199,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1093,"src":"3638:11:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1201,"indexExpression":{"id":1200,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1192,"src":"3650:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3638:18:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1203,"indexExpression":{"id":1202,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1194,"src":"3657:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3638:27:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1198,"id":1204,"nodeType":"Return","src":"3631:34:8"}]},"documentation":{"id":1190,"nodeType":"StructuredDocumentation","src":"3480:47:8","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":1206,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3541:9:8","nodeType":"FunctionDefinition","parameters":{"id":1195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1192,"mutability":"mutable","name":"owner","nameLocation":"3559:5:8","nodeType":"VariableDeclaration","scope":1206,"src":"3551:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1191,"name":"address","nodeType":"ElementaryTypeName","src":"3551:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1194,"mutability":"mutable","name":"spender","nameLocation":"3574:7:8","nodeType":"VariableDeclaration","scope":1206,"src":"3566:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1193,"name":"address","nodeType":"ElementaryTypeName","src":"3566:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3550:32:8"},"returnParameters":{"id":1198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1206,"src":"3612:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1196,"name":"uint256","nodeType":"ElementaryTypeName","src":"3612:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3611:9:8"},"scope":1579,"src":"3532:140:8","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1644],"body":{"id":1229,"nodeType":"Block","src":"4058:107:8","statements":[{"assignments":[1217],"declarations":[{"constant":false,"id":1217,"mutability":"mutable","name":"owner","nameLocation":"4076:5:8","nodeType":"VariableDeclaration","scope":1229,"src":"4068:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1216,"name":"address","nodeType":"ElementaryTypeName","src":"4068:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1220,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1218,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"4084:10:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4084:12:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4068:28:8"},{"expression":{"arguments":[{"id":1222,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1217,"src":"4115:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1223,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1209,"src":"4122:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1224,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1211,"src":"4131:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1221,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[1470,1530],"referencedDeclaration":1470,"src":"4106:8:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4106:31:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1226,"nodeType":"ExpressionStatement","src":"4106:31:8"},{"expression":{"hexValue":"74727565","id":1227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4154:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":1215,"id":1228,"nodeType":"Return","src":"4147:11:8"}]},"documentation":{"id":1207,"nodeType":"StructuredDocumentation","src":"3678:296:8","text":" @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":1230,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3988:7:8","nodeType":"FunctionDefinition","parameters":{"id":1212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1209,"mutability":"mutable","name":"spender","nameLocation":"4004:7:8","nodeType":"VariableDeclaration","scope":1230,"src":"3996:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1208,"name":"address","nodeType":"ElementaryTypeName","src":"3996:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1211,"mutability":"mutable","name":"value","nameLocation":"4021:5:8","nodeType":"VariableDeclaration","scope":1230,"src":"4013:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1210,"name":"uint256","nodeType":"ElementaryTypeName","src":"4013:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3995:32:8"},"returnParameters":{"id":1215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1230,"src":"4052:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1213,"name":"bool","nodeType":"ElementaryTypeName","src":"4052:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4051:6:8"},"scope":1579,"src":"3979:186:8","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1656],"body":{"id":1261,"nodeType":"Block","src":"4850:151:8","statements":[{"assignments":[1243],"declarations":[{"constant":false,"id":1243,"mutability":"mutable","name":"spender","nameLocation":"4868:7:8","nodeType":"VariableDeclaration","scope":1261,"src":"4860:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1242,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1246,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1244,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"4878:10:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4878:12:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4860:30:8"},{"expression":{"arguments":[{"id":1248,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1233,"src":"4916:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1249,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1243,"src":"4922:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1250,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1237,"src":"4931:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1247,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1578,"src":"4900:15:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4900:37:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1252,"nodeType":"ExpressionStatement","src":"4900:37:8"},{"expression":{"arguments":[{"id":1254,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1233,"src":"4957:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1255,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1235,"src":"4963:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1256,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1237,"src":"4967:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1253,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1309,"src":"4947:9:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4947:26:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1258,"nodeType":"ExpressionStatement","src":"4947:26:8"},{"expression":{"hexValue":"74727565","id":1259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4990:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":1241,"id":1260,"nodeType":"Return","src":"4983:11:8"}]},"documentation":{"id":1231,"nodeType":"StructuredDocumentation","src":"4171:581:8","text":" @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`."},"functionSelector":"23b872dd","id":1262,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4766:12:8","nodeType":"FunctionDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1233,"mutability":"mutable","name":"from","nameLocation":"4787:4:8","nodeType":"VariableDeclaration","scope":1262,"src":"4779:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1232,"name":"address","nodeType":"ElementaryTypeName","src":"4779:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1235,"mutability":"mutable","name":"to","nameLocation":"4801:2:8","nodeType":"VariableDeclaration","scope":1262,"src":"4793:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1234,"name":"address","nodeType":"ElementaryTypeName","src":"4793:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1237,"mutability":"mutable","name":"value","nameLocation":"4813:5:8","nodeType":"VariableDeclaration","scope":1262,"src":"4805:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1236,"name":"uint256","nodeType":"ElementaryTypeName","src":"4805:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4778:41:8"},"returnParameters":{"id":1241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1262,"src":"4844:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1239,"name":"bool","nodeType":"ElementaryTypeName","src":"4844:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4843:6:8"},"scope":1579,"src":"4757:244:8","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1308,"nodeType":"Block","src":"5443:231:8","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1272,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1265,"src":"5457:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5473:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1274,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5465:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1273,"name":"address","nodeType":"ElementaryTypeName","src":"5465:7:8","typeDescriptions":{}}},"id":1276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5465:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5457:18:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1286,"nodeType":"IfStatement","src":"5453:86:8","trueBody":{"id":1285,"nodeType":"Block","src":"5477:62:8","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5525:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5517:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1279,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:8","typeDescriptions":{}}},"id":1282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5517:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1278,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":944,"src":"5498:18:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5498:30:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1284,"nodeType":"RevertStatement","src":"5491:37:8"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1287,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"5552:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5566:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5558:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"5558:7:8","typeDescriptions":{}}},"id":1291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5558:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5552:16:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1301,"nodeType":"IfStatement","src":"5548:86:8","trueBody":{"id":1300,"nodeType":"Block","src":"5570:64:8","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5620:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5612:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1294,"name":"address","nodeType":"ElementaryTypeName","src":"5612:7:8","typeDescriptions":{}}},"id":1297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5612:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1293,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":949,"src":"5591:20:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5591:32:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1299,"nodeType":"RevertStatement","src":"5584:39:8"}]}},{"expression":{"arguments":[{"id":1303,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1265,"src":"5651:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1304,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"5657:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1305,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1269,"src":"5661:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1302,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1386,"src":"5643:7:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5643:24:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1307,"nodeType":"ExpressionStatement","src":"5643:24:8"}]},"documentation":{"id":1263,"nodeType":"StructuredDocumentation","src":"5007:362:8","text":" @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":1309,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"5383:9:8","nodeType":"FunctionDefinition","parameters":{"id":1270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1265,"mutability":"mutable","name":"from","nameLocation":"5401:4:8","nodeType":"VariableDeclaration","scope":1309,"src":"5393:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1264,"name":"address","nodeType":"ElementaryTypeName","src":"5393:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1267,"mutability":"mutable","name":"to","nameLocation":"5415:2:8","nodeType":"VariableDeclaration","scope":1309,"src":"5407:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1266,"name":"address","nodeType":"ElementaryTypeName","src":"5407:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1269,"mutability":"mutable","name":"value","nameLocation":"5427:5:8","nodeType":"VariableDeclaration","scope":1309,"src":"5419:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1268,"name":"uint256","nodeType":"ElementaryTypeName","src":"5419:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5392:41:8"},"returnParameters":{"id":1271,"nodeType":"ParameterList","parameters":[],"src":"5443:0:8"},"scope":1579,"src":"5374:300:8","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1385,"nodeType":"Block","src":"6064:1032:8","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1319,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"6078:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6094:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6086:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1320,"name":"address","nodeType":"ElementaryTypeName","src":"6086:7:8","typeDescriptions":{}}},"id":1323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6086:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6078:18:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1356,"nodeType":"Block","src":"6252:362:8","statements":[{"assignments":[1331],"declarations":[{"constant":false,"id":1331,"mutability":"mutable","name":"fromBalance","nameLocation":"6274:11:8","nodeType":"VariableDeclaration","scope":1356,"src":"6266:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1330,"name":"uint256","nodeType":"ElementaryTypeName","src":"6266:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1335,"initialValue":{"baseExpression":{"id":1332,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1087,"src":"6288:9:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1334,"indexExpression":{"id":1333,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"6298:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6288:15:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6266:37:8"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1336,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"6321:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1337,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"6335:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6321:19:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1346,"nodeType":"IfStatement","src":"6317:115:8","trueBody":{"id":1345,"nodeType":"Block","src":"6342:90:8","statements":[{"errorCall":{"arguments":[{"id":1340,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"6392:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1341,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"6398:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1342,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"6411:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1339,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":939,"src":"6367:24:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":1343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6367:50:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1344,"nodeType":"RevertStatement","src":"6360:57:8"}]}},{"id":1355,"nodeType":"UncheckedBlock","src":"6445:159:8","statements":[{"expression":{"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1347,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1087,"src":"6552:9:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1349,"indexExpression":{"id":1348,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"6562:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6552:15:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1350,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"6570:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1351,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"6584:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6570:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6552:37:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1354,"nodeType":"ExpressionStatement","src":"6552:37:8"}]}]},"id":1357,"nodeType":"IfStatement","src":"6074:540:8","trueBody":{"id":1329,"nodeType":"Block","src":"6098:148:8","statements":[{"expression":{"id":1327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1325,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1095,"src":"6214:12:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"6230:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6214:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1328,"nodeType":"ExpressionStatement","src":"6214:21:8"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1358,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1314,"src":"6628:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6642:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6634:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1359,"name":"address","nodeType":"ElementaryTypeName","src":"6634:7:8","typeDescriptions":{}}},"id":1362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6634:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6628:16:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1377,"nodeType":"Block","src":"6843:206:8","statements":[{"id":1376,"nodeType":"UncheckedBlock","src":"6857:182:8","statements":[{"expression":{"id":1374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1370,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1087,"src":"7002:9:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1372,"indexExpression":{"id":1371,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1314,"src":"7012:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7002:13:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":1373,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"7019:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7002:22:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1375,"nodeType":"ExpressionStatement","src":"7002:22:8"}]}]},"id":1378,"nodeType":"IfStatement","src":"6624:425:8","trueBody":{"id":1369,"nodeType":"Block","src":"6646:191:8","statements":[{"id":1368,"nodeType":"UncheckedBlock","src":"6660:167:8","statements":[{"expression":{"id":1366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1364,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1095,"src":"6791:12:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":1365,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"6807:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6791:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1367,"nodeType":"ExpressionStatement","src":"6791:21:8"}]}]}},{"eventCall":{"arguments":[{"id":1380,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"7073:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1381,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1314,"src":"7079:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1382,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"7083:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1379,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1591,"src":"7064:8:8","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7064:25:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1384,"nodeType":"EmitStatement","src":"7059:30:8"}]},"documentation":{"id":1310,"nodeType":"StructuredDocumentation","src":"5680:304:8","text":" @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event."},"id":1386,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"5998:7:8","nodeType":"FunctionDefinition","parameters":{"id":1317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1312,"mutability":"mutable","name":"from","nameLocation":"6014:4:8","nodeType":"VariableDeclaration","scope":1386,"src":"6006:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1311,"name":"address","nodeType":"ElementaryTypeName","src":"6006:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1314,"mutability":"mutable","name":"to","nameLocation":"6028:2:8","nodeType":"VariableDeclaration","scope":1386,"src":"6020:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1313,"name":"address","nodeType":"ElementaryTypeName","src":"6020:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1316,"mutability":"mutable","name":"value","nameLocation":"6040:5:8","nodeType":"VariableDeclaration","scope":1386,"src":"6032:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1315,"name":"uint256","nodeType":"ElementaryTypeName","src":"6032:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6005:41:8"},"returnParameters":{"id":1318,"nodeType":"ParameterList","parameters":[],"src":"6064:0:8"},"scope":1579,"src":"5989:1107:8","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1418,"nodeType":"Block","src":"7495:152:8","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1394,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"7509:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7528:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7520:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1395,"name":"address","nodeType":"ElementaryTypeName","src":"7520:7:8","typeDescriptions":{}}},"id":1398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7520:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7509:21:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1408,"nodeType":"IfStatement","src":"7505:91:8","trueBody":{"id":1407,"nodeType":"Block","src":"7532:64:8","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7582:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1402,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7574:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1401,"name":"address","nodeType":"ElementaryTypeName","src":"7574:7:8","typeDescriptions":{}}},"id":1404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7574:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1400,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":949,"src":"7553:20:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7553:32:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1406,"nodeType":"RevertStatement","src":"7546:39:8"}]}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":1412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7621:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7613:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1410,"name":"address","nodeType":"ElementaryTypeName","src":"7613:7:8","typeDescriptions":{}}},"id":1413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7613:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1414,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1389,"src":"7625:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1391,"src":"7634:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1409,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1386,"src":"7605:7:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7605:35:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1417,"nodeType":"ExpressionStatement","src":"7605:35:8"}]},"documentation":{"id":1387,"nodeType":"StructuredDocumentation","src":"7102:332:8","text":" @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":1419,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7448:5:8","nodeType":"FunctionDefinition","parameters":{"id":1392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1389,"mutability":"mutable","name":"account","nameLocation":"7462:7:8","nodeType":"VariableDeclaration","scope":1419,"src":"7454:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1388,"name":"address","nodeType":"ElementaryTypeName","src":"7454:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1391,"mutability":"mutable","name":"value","nameLocation":"7479:5:8","nodeType":"VariableDeclaration","scope":1419,"src":"7471:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1390,"name":"uint256","nodeType":"ElementaryTypeName","src":"7471:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7453:32:8"},"returnParameters":{"id":1393,"nodeType":"ParameterList","parameters":[],"src":"7495:0:8"},"scope":1579,"src":"7439:208:8","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1451,"nodeType":"Block","src":"8021:150:8","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1427,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1422,"src":"8035:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8054:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8046:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1428,"name":"address","nodeType":"ElementaryTypeName","src":"8046:7:8","typeDescriptions":{}}},"id":1431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8046:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8035:21:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1441,"nodeType":"IfStatement","src":"8031:89:8","trueBody":{"id":1440,"nodeType":"Block","src":"8058:62:8","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8106:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8098:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1434,"name":"address","nodeType":"ElementaryTypeName","src":"8098:7:8","typeDescriptions":{}}},"id":1437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8098:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1433,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":944,"src":"8079:18:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8079:30:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1439,"nodeType":"RevertStatement","src":"8072:37:8"}]}},{"expression":{"arguments":[{"id":1443,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1422,"src":"8137:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8154:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1445,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8146:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1444,"name":"address","nodeType":"ElementaryTypeName","src":"8146:7:8","typeDescriptions":{}}},"id":1447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8146:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1448,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1424,"src":"8158:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1442,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1386,"src":"8129:7:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8129:35:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1450,"nodeType":"ExpressionStatement","src":"8129:35:8"}]},"documentation":{"id":1420,"nodeType":"StructuredDocumentation","src":"7653:307:8","text":" @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead"},"id":1452,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7974:5:8","nodeType":"FunctionDefinition","parameters":{"id":1425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1422,"mutability":"mutable","name":"account","nameLocation":"7988:7:8","nodeType":"VariableDeclaration","scope":1452,"src":"7980:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1421,"name":"address","nodeType":"ElementaryTypeName","src":"7980:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1424,"mutability":"mutable","name":"value","nameLocation":"8005:5:8","nodeType":"VariableDeclaration","scope":1452,"src":"7997:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1423,"name":"uint256","nodeType":"ElementaryTypeName","src":"7997:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7979:32:8"},"returnParameters":{"id":1426,"nodeType":"ParameterList","parameters":[],"src":"8021:0:8"},"scope":1579,"src":"7965:206:8","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1469,"nodeType":"Block","src":"8781:54:8","statements":[{"expression":{"arguments":[{"id":1463,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"8800:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1464,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1457,"src":"8807:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1465,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1459,"src":"8816:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":1466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8823:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1462,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[1470,1530],"referencedDeclaration":1530,"src":"8791:8:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":1467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8791:37:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1468,"nodeType":"ExpressionStatement","src":"8791:37:8"}]},"documentation":{"id":1453,"nodeType":"StructuredDocumentation","src":"8177:525:8","text":" @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":1470,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8716:8:8","nodeType":"FunctionDefinition","parameters":{"id":1460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"owner","nameLocation":"8733:5:8","nodeType":"VariableDeclaration","scope":1470,"src":"8725:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1454,"name":"address","nodeType":"ElementaryTypeName","src":"8725:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"spender","nameLocation":"8748:7:8","nodeType":"VariableDeclaration","scope":1470,"src":"8740:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1456,"name":"address","nodeType":"ElementaryTypeName","src":"8740:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1459,"mutability":"mutable","name":"value","nameLocation":"8765:5:8","nodeType":"VariableDeclaration","scope":1470,"src":"8757:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1458,"name":"uint256","nodeType":"ElementaryTypeName","src":"8757:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8724:47:8"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[],"src":"8781:0:8"},"scope":1579,"src":"8707:128:8","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1529,"nodeType":"Block","src":"9780:334:8","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1482,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1473,"src":"9794:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9811:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9803:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1483,"name":"address","nodeType":"ElementaryTypeName","src":"9803:7:8","typeDescriptions":{}}},"id":1486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9803:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9794:19:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1496,"nodeType":"IfStatement","src":"9790:89:8","trueBody":{"id":1495,"nodeType":"Block","src":"9815:64:8","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9865:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9857:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1489,"name":"address","nodeType":"ElementaryTypeName","src":"9857:7:8","typeDescriptions":{}}},"id":1492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9857:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1488,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":963,"src":"9836:20:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9836:32:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1494,"nodeType":"RevertStatement","src":"9829:39:8"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1497,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1475,"src":"9892:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9911:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9903:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1498,"name":"address","nodeType":"ElementaryTypeName","src":"9903:7:8","typeDescriptions":{}}},"id":1501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9903:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9892:21:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1511,"nodeType":"IfStatement","src":"9888:90:8","trueBody":{"id":1510,"nodeType":"Block","src":"9915:63:8","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9964:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9956:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1504,"name":"address","nodeType":"ElementaryTypeName","src":"9956:7:8","typeDescriptions":{}}},"id":1507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9956:10:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1503,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"9936:19:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9936:31:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1509,"nodeType":"RevertStatement","src":"9929:38:8"}]}},{"expression":{"id":1518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1512,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1093,"src":"9987:11:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1515,"indexExpression":{"id":1513,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1473,"src":"9999:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9987:18:8","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1516,"indexExpression":{"id":1514,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1475,"src":"10006:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9987:27:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1517,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1477,"src":"10017:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9987:35:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1519,"nodeType":"ExpressionStatement","src":"9987:35:8"},{"condition":{"id":1520,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1479,"src":"10036:9:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1528,"nodeType":"IfStatement","src":"10032:76:8","trueBody":{"id":1527,"nodeType":"Block","src":"10047:61:8","statements":[{"eventCall":{"arguments":[{"id":1522,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1473,"src":"10075:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1523,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1475,"src":"10082:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1524,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1477,"src":"10091:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1521,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1600,"src":"10066:8:8","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10066:31:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1526,"nodeType":"EmitStatement","src":"10061:36:8"}]}}]},"documentation":{"id":1471,"nodeType":"StructuredDocumentation","src":"8841:836:8","text":" @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}."},"id":1530,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"9691:8:8","nodeType":"FunctionDefinition","parameters":{"id":1480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1473,"mutability":"mutable","name":"owner","nameLocation":"9708:5:8","nodeType":"VariableDeclaration","scope":1530,"src":"9700:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1472,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1475,"mutability":"mutable","name":"spender","nameLocation":"9723:7:8","nodeType":"VariableDeclaration","scope":1530,"src":"9715:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1474,"name":"address","nodeType":"ElementaryTypeName","src":"9715:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1477,"mutability":"mutable","name":"value","nameLocation":"9740:5:8","nodeType":"VariableDeclaration","scope":1530,"src":"9732:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1476,"name":"uint256","nodeType":"ElementaryTypeName","src":"9732:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1479,"mutability":"mutable","name":"emitEvent","nameLocation":"9752:9:8","nodeType":"VariableDeclaration","scope":1530,"src":"9747:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1478,"name":"bool","nodeType":"ElementaryTypeName","src":"9747:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9699:63:8"},"returnParameters":{"id":1481,"nodeType":"ParameterList","parameters":[],"src":"9780:0:8"},"scope":1579,"src":"9682:432:8","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1577,"nodeType":"Block","src":"10485:387:8","statements":[{"assignments":[1541],"declarations":[{"constant":false,"id":1541,"mutability":"mutable","name":"currentAllowance","nameLocation":"10503:16:8","nodeType":"VariableDeclaration","scope":1577,"src":"10495:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1540,"name":"uint256","nodeType":"ElementaryTypeName","src":"10495:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1546,"initialValue":{"arguments":[{"id":1543,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1533,"src":"10532:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1544,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1535,"src":"10539:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1542,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1206,"src":"10522:9:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":1545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10522:25:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10495:52:8"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1547,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1541,"src":"10561:16:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":1550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10585:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1549,"name":"uint256","nodeType":"ElementaryTypeName","src":"10585:7:8","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":1548,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10580:4:8","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10580:13:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":1552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10594:3:8","memberName":"max","nodeType":"MemberAccess","src":"10580:17:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10561:36:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1576,"nodeType":"IfStatement","src":"10557:309:8","trueBody":{"id":1575,"nodeType":"Block","src":"10599:267:8","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1554,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1541,"src":"10617:16:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1555,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1537,"src":"10636:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10617:24:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1564,"nodeType":"IfStatement","src":"10613:130:8","trueBody":{"id":1563,"nodeType":"Block","src":"10643:100:8","statements":[{"errorCall":{"arguments":[{"id":1558,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1535,"src":"10695:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1559,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1541,"src":"10704:16:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1560,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1537,"src":"10722:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1557,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":958,"src":"10668:26:8","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":1561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10668:60:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1562,"nodeType":"RevertStatement","src":"10661:67:8"}]}},{"id":1574,"nodeType":"UncheckedBlock","src":"10756:100:8","statements":[{"expression":{"arguments":[{"id":1566,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1533,"src":"10793:5:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1567,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1535,"src":"10800:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1568,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1541,"src":"10809:16:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1569,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1537,"src":"10828:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10809:24:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":1571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10835:5:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1565,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[1470,1530],"referencedDeclaration":1530,"src":"10784:8:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":1572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10784:57:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1573,"nodeType":"ExpressionStatement","src":"10784:57:8"}]}]}}]},"documentation":{"id":1531,"nodeType":"StructuredDocumentation","src":"10120:271:8","text":" @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event."},"id":1578,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"10405:15:8","nodeType":"FunctionDefinition","parameters":{"id":1538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1533,"mutability":"mutable","name":"owner","nameLocation":"10429:5:8","nodeType":"VariableDeclaration","scope":1578,"src":"10421:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1532,"name":"address","nodeType":"ElementaryTypeName","src":"10421:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1535,"mutability":"mutable","name":"spender","nameLocation":"10444:7:8","nodeType":"VariableDeclaration","scope":1578,"src":"10436:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1534,"name":"address","nodeType":"ElementaryTypeName","src":"10436:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1537,"mutability":"mutable","name":"value","nameLocation":"10461:5:8","nodeType":"VariableDeclaration","scope":1578,"src":"10453:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"10453:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10420:47:8"},"returnParameters":{"id":1539,"nodeType":"ParameterList","parameters":[],"src":"10485:0:8"},"scope":1579,"src":"10396:476:8","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":1580,"src":"1106:9768:8","usedErrors":[939,944,949,958,963,968],"usedEvents":[1591,1600]}],"src":"105:10770:8"},"id":8},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[1657]},"id":1658,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1581,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":1582,"nodeType":"StructuredDocumentation","src":"132:71:9","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":1657,"linearizedBaseContracts":[1657],"name":"IERC20","nameLocation":"214:6:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1583,"nodeType":"StructuredDocumentation","src":"227:158:9","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":1591,"name":"Transfer","nameLocation":"396:8:9","nodeType":"EventDefinition","parameters":{"id":1590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1585,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"421:4:9","nodeType":"VariableDeclaration","scope":1591,"src":"405:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1584,"name":"address","nodeType":"ElementaryTypeName","src":"405:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1587,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"443:2:9","nodeType":"VariableDeclaration","scope":1591,"src":"427:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1586,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1589,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"455:5:9","nodeType":"VariableDeclaration","scope":1591,"src":"447:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1588,"name":"uint256","nodeType":"ElementaryTypeName","src":"447:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:57:9"},"src":"390:72:9"},{"anonymous":false,"documentation":{"id":1592,"nodeType":"StructuredDocumentation","src":"468:148:9","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":1600,"name":"Approval","nameLocation":"627:8:9","nodeType":"EventDefinition","parameters":{"id":1599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1594,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"652:5:9","nodeType":"VariableDeclaration","scope":1600,"src":"636:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1593,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1596,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"675:7:9","nodeType":"VariableDeclaration","scope":1600,"src":"659:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1595,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1598,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"692:5:9","nodeType":"VariableDeclaration","scope":1600,"src":"684:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1597,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"635:63:9"},"src":"621:78:9"},{"documentation":{"id":1601,"nodeType":"StructuredDocumentation","src":"705:65:9","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"784:11:9","nodeType":"FunctionDefinition","parameters":{"id":1602,"nodeType":"ParameterList","parameters":[],"src":"795:2:9"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1606,"src":"821:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"820:9:9"},"scope":1657,"src":"775:55:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1607,"nodeType":"StructuredDocumentation","src":"836:71:9","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":1614,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:9","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"account","nameLocation":"939:7:9","nodeType":"VariableDeclaration","scope":1614,"src":"931:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1608,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:9"},"returnParameters":{"id":1613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1614,"src":"971:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1611,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:9"},"scope":1657,"src":"912:68:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1615,"nodeType":"StructuredDocumentation","src":"986:213:9","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":1624,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:9","nodeType":"FunctionDefinition","parameters":{"id":1620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1617,"mutability":"mutable","name":"to","nameLocation":"1230:2:9","nodeType":"VariableDeclaration","scope":1624,"src":"1222:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1616,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1619,"mutability":"mutable","name":"value","nameLocation":"1242:5:9","nodeType":"VariableDeclaration","scope":1624,"src":"1234:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1618,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:27:9"},"returnParameters":{"id":1623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1624,"src":"1267:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1621,"name":"bool","nodeType":"ElementaryTypeName","src":"1267:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1266:6:9"},"scope":1657,"src":"1204:69:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1625,"nodeType":"StructuredDocumentation","src":"1279:264:9","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":1634,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1557:9:9","nodeType":"FunctionDefinition","parameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1627,"mutability":"mutable","name":"owner","nameLocation":"1575:5:9","nodeType":"VariableDeclaration","scope":1634,"src":"1567:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1626,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1629,"mutability":"mutable","name":"spender","nameLocation":"1590:7:9","nodeType":"VariableDeclaration","scope":1634,"src":"1582:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1628,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:32:9"},"returnParameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1634,"src":"1622:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1631,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:9"},"scope":1657,"src":"1548:83:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1635,"nodeType":"StructuredDocumentation","src":"1637:667:9","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":1644,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2318:7:9","nodeType":"FunctionDefinition","parameters":{"id":1640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1637,"mutability":"mutable","name":"spender","nameLocation":"2334:7:9","nodeType":"VariableDeclaration","scope":1644,"src":"2326:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1636,"name":"address","nodeType":"ElementaryTypeName","src":"2326:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1639,"mutability":"mutable","name":"value","nameLocation":"2351:5:9","nodeType":"VariableDeclaration","scope":1644,"src":"2343:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1638,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:32:9"},"returnParameters":{"id":1643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1642,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1644,"src":"2376:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1641,"name":"bool","nodeType":"ElementaryTypeName","src":"2376:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2375:6:9"},"scope":1657,"src":"2309:73:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1645,"nodeType":"StructuredDocumentation","src":"2388:297:9","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":1656,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2699:12:9","nodeType":"FunctionDefinition","parameters":{"id":1652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1647,"mutability":"mutable","name":"from","nameLocation":"2720:4:9","nodeType":"VariableDeclaration","scope":1656,"src":"2712:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1646,"name":"address","nodeType":"ElementaryTypeName","src":"2712:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1649,"mutability":"mutable","name":"to","nameLocation":"2734:2:9","nodeType":"VariableDeclaration","scope":1656,"src":"2726:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1648,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1651,"mutability":"mutable","name":"value","nameLocation":"2746:5:9","nodeType":"VariableDeclaration","scope":1656,"src":"2738:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1650,"name":"uint256","nodeType":"ElementaryTypeName","src":"2738:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2711:41:9"},"returnParameters":{"id":1655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1654,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1656,"src":"2771:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1653,"name":"bool","nodeType":"ElementaryTypeName","src":"2771:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2770:6:9"},"scope":1657,"src":"2690:87:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1658,"src":"204:2575:9","usedErrors":[],"usedEvents":[1591,1600]}],"src":"106:2674:9"},"id":9},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[1657],"IERC20Metadata":[1683]},"id":1684,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1659,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:10"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":1661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1684,"sourceUnit":1658,"src":"151:37:10","symbolAliases":[{"foreign":{"id":1660,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"159:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1663,"name":"IERC20","nameLocations":["306:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"306:6:10"},"id":1664,"nodeType":"InheritanceSpecifier","src":"306:6:10"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":1662,"nodeType":"StructuredDocumentation","src":"190:87:10","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":1683,"linearizedBaseContracts":[1683,1657],"name":"IERC20Metadata","nameLocation":"288:14:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1665,"nodeType":"StructuredDocumentation","src":"319:54:10","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":1670,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:10","nodeType":"FunctionDefinition","parameters":{"id":1666,"nodeType":"ParameterList","parameters":[],"src":"391:2:10"},"returnParameters":{"id":1669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1670,"src":"417:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1667,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:10"},"scope":1683,"src":"378:54:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1671,"nodeType":"StructuredDocumentation","src":"438:56:10","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":1676,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:10","nodeType":"FunctionDefinition","parameters":{"id":1672,"nodeType":"ParameterList","parameters":[],"src":"514:2:10"},"returnParameters":{"id":1675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1674,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1676,"src":"540:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1673,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:10"},"scope":1683,"src":"499:56:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1677,"nodeType":"StructuredDocumentation","src":"561:65:10","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":1682,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:10","nodeType":"FunctionDefinition","parameters":{"id":1678,"nodeType":"ParameterList","parameters":[],"src":"648:2:10"},"returnParameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1682,"src":"674:5:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1679,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:10"},"scope":1683,"src":"631:50:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1684,"src":"278:405:10","usedErrors":[],"usedEvents":[1591,1600]}],"src":"125:559:10"},"id":10},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"IERC1363":[919],"IERC20":[1657],"SafeERC20":[2147]},"id":2148,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1685,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:11"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":1687,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2148,"sourceUnit":1658,"src":"141:37:11","symbolAliases":[{"foreign":{"id":1686,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"149:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","file":"../../../interfaces/IERC1363.sol","id":1689,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2148,"sourceUnit":920,"src":"179:58:11","symbolAliases":[{"foreign":{"id":1688,"name":"IERC1363","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":919,"src":"187:8:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":1690,"nodeType":"StructuredDocumentation","src":"239:458:11","text":" @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":2147,"linearizedBaseContracts":[2147],"name":"SafeERC20","nameLocation":"706:9:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1691,"nodeType":"StructuredDocumentation","src":"722:65:11","text":" @dev An operation with an ERC-20 token failed."},"errorSelector":"5274afe7","id":1695,"name":"SafeERC20FailedOperation","nameLocation":"798:24:11","nodeType":"ErrorDefinition","parameters":{"id":1694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1693,"mutability":"mutable","name":"token","nameLocation":"831:5:11","nodeType":"VariableDeclaration","scope":1695,"src":"823:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1692,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"822:15:11"},"src":"792:46:11"},{"documentation":{"id":1696,"nodeType":"StructuredDocumentation","src":"844:71:11","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":1704,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"926:32:11","nodeType":"ErrorDefinition","parameters":{"id":1703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1698,"mutability":"mutable","name":"spender","nameLocation":"967:7:11","nodeType":"VariableDeclaration","scope":1704,"src":"959:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1697,"name":"address","nodeType":"ElementaryTypeName","src":"959:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1700,"mutability":"mutable","name":"currentAllowance","nameLocation":"984:16:11","nodeType":"VariableDeclaration","scope":1704,"src":"976:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1699,"name":"uint256","nodeType":"ElementaryTypeName","src":"976:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1702,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1010:17:11","nodeType":"VariableDeclaration","scope":1704,"src":"1002:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1701,"name":"uint256","nodeType":"ElementaryTypeName","src":"1002:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"958:70:11"},"src":"920:109:11"},{"body":{"id":1727,"nodeType":"Block","src":"1291:88:11","statements":[{"expression":{"arguments":[{"id":1716,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1708,"src":"1321:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":1719,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1708,"src":"1343:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1349:8:11","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1624,"src":"1343:14:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":1721,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1710,"src":"1360:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"1364:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1723,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1359:11:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":1717,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1328:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1332:10:11","memberName":"encodeCall","nodeType":"MemberAccess","src":"1328:14:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1328:43:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1715,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2105,"src":"1301:19:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":1725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1301:71:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1726,"nodeType":"ExpressionStatement","src":"1301:71:11"}]},"documentation":{"id":1705,"nodeType":"StructuredDocumentation","src":"1035:179:11","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":1728,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1228:12:11","nodeType":"FunctionDefinition","parameters":{"id":1713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1708,"mutability":"mutable","name":"token","nameLocation":"1248:5:11","nodeType":"VariableDeclaration","scope":1728,"src":"1241:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1707,"nodeType":"UserDefinedTypeName","pathNode":{"id":1706,"name":"IERC20","nameLocations":["1241:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"1241:6:11"},"referencedDeclaration":1657,"src":"1241:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1710,"mutability":"mutable","name":"to","nameLocation":"1263:2:11","nodeType":"VariableDeclaration","scope":1728,"src":"1255:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1709,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1712,"mutability":"mutable","name":"value","nameLocation":"1275:5:11","nodeType":"VariableDeclaration","scope":1728,"src":"1267:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1711,"name":"uint256","nodeType":"ElementaryTypeName","src":"1267:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1240:41:11"},"returnParameters":{"id":1714,"nodeType":"ParameterList","parameters":[],"src":"1291:0:11"},"scope":2147,"src":"1219:160:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1754,"nodeType":"Block","src":"1708:98:11","statements":[{"expression":{"arguments":[{"id":1742,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1732,"src":"1738:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":1745,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1732,"src":"1760:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1766:12:11","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1656,"src":"1760:18:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":1747,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1734,"src":"1781:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1748,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1736,"src":"1787:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1749,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1738,"src":"1791:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1750,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1780:17:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":1743,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1745:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1749:10:11","memberName":"encodeCall","nodeType":"MemberAccess","src":"1745:14:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:53:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1741,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2105,"src":"1718:19:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":1752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1718:81:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1753,"nodeType":"ExpressionStatement","src":"1718:81:11"}]},"documentation":{"id":1729,"nodeType":"StructuredDocumentation","src":"1385:228:11","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":1755,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1627:16:11","nodeType":"FunctionDefinition","parameters":{"id":1739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"token","nameLocation":"1651:5:11","nodeType":"VariableDeclaration","scope":1755,"src":"1644:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1731,"nodeType":"UserDefinedTypeName","pathNode":{"id":1730,"name":"IERC20","nameLocations":["1644:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"1644:6:11"},"referencedDeclaration":1657,"src":"1644:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1734,"mutability":"mutable","name":"from","nameLocation":"1666:4:11","nodeType":"VariableDeclaration","scope":1755,"src":"1658:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1733,"name":"address","nodeType":"ElementaryTypeName","src":"1658:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1736,"mutability":"mutable","name":"to","nameLocation":"1680:2:11","nodeType":"VariableDeclaration","scope":1755,"src":"1672:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1735,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1738,"mutability":"mutable","name":"value","nameLocation":"1692:5:11","nodeType":"VariableDeclaration","scope":1755,"src":"1684:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1737,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1643:55:11"},"returnParameters":{"id":1740,"nodeType":"ParameterList","parameters":[],"src":"1708:0:11"},"scope":2147,"src":"1618:188:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1780,"nodeType":"Block","src":"2033:99:11","statements":[{"expression":{"arguments":[{"id":1769,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"2074:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":1772,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"2096:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2102:8:11","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1624,"src":"2096:14:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":1774,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1761,"src":"2113:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1775,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1763,"src":"2117:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1776,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2112:11:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":1770,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2081:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2085:10:11","memberName":"encodeCall","nodeType":"MemberAccess","src":"2081:14:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:43:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1768,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2146,"src":"2050:23:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":1778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2050:75:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1767,"id":1779,"nodeType":"Return","src":"2043:82:11"}]},"documentation":{"id":1756,"nodeType":"StructuredDocumentation","src":"1812:126:11","text":" @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful."},"id":1781,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransfer","nameLocation":"1952:15:11","nodeType":"FunctionDefinition","parameters":{"id":1764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"token","nameLocation":"1975:5:11","nodeType":"VariableDeclaration","scope":1781,"src":"1968:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1758,"nodeType":"UserDefinedTypeName","pathNode":{"id":1757,"name":"IERC20","nameLocations":["1968:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"1968:6:11"},"referencedDeclaration":1657,"src":"1968:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1761,"mutability":"mutable","name":"to","nameLocation":"1990:2:11","nodeType":"VariableDeclaration","scope":1781,"src":"1982:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1760,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1763,"mutability":"mutable","name":"value","nameLocation":"2002:5:11","nodeType":"VariableDeclaration","scope":1781,"src":"1994:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1762,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1967:41:11"},"returnParameters":{"id":1767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1766,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1781,"src":"2027:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1765,"name":"bool","nodeType":"ElementaryTypeName","src":"2027:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2026:6:11"},"scope":2147,"src":"1943:189:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1809,"nodeType":"Block","src":"2381:109:11","statements":[{"expression":{"arguments":[{"id":1797,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2422:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":1800,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2444:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2450:12:11","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1656,"src":"2444:18:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":1802,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1787,"src":"2465:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1803,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1789,"src":"2471:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1804,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1791,"src":"2475:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1805,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2464:17:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":1798,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2429:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2433:10:11","memberName":"encodeCall","nodeType":"MemberAccess","src":"2429:14:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2429:53:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1796,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2146,"src":"2398:23:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":1807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2398:85:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1795,"id":1808,"nodeType":"Return","src":"2391:92:11"}]},"documentation":{"id":1782,"nodeType":"StructuredDocumentation","src":"2138:130:11","text":" @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful."},"id":1810,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransferFrom","nameLocation":"2282:19:11","nodeType":"FunctionDefinition","parameters":{"id":1792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"token","nameLocation":"2309:5:11","nodeType":"VariableDeclaration","scope":1810,"src":"2302:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1784,"nodeType":"UserDefinedTypeName","pathNode":{"id":1783,"name":"IERC20","nameLocations":["2302:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"2302:6:11"},"referencedDeclaration":1657,"src":"2302:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1787,"mutability":"mutable","name":"from","nameLocation":"2324:4:11","nodeType":"VariableDeclaration","scope":1810,"src":"2316:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1786,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1789,"mutability":"mutable","name":"to","nameLocation":"2338:2:11","nodeType":"VariableDeclaration","scope":1810,"src":"2330:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1788,"name":"address","nodeType":"ElementaryTypeName","src":"2330:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1791,"mutability":"mutable","name":"value","nameLocation":"2350:5:11","nodeType":"VariableDeclaration","scope":1810,"src":"2342:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1790,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:55:11"},"returnParameters":{"id":1795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1810,"src":"2375:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1793,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:11"},"scope":2147,"src":"2273:217:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1840,"nodeType":"Block","src":"3232:139:11","statements":[{"assignments":[1822],"declarations":[{"constant":false,"id":1822,"mutability":"mutable","name":"oldAllowance","nameLocation":"3250:12:11","nodeType":"VariableDeclaration","scope":1840,"src":"3242:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1821,"name":"uint256","nodeType":"ElementaryTypeName","src":"3242:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1831,"initialValue":{"arguments":[{"arguments":[{"id":1827,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3289:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2147","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2147","typeString":"library SafeERC20"}],"id":1826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3281:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1825,"name":"address","nodeType":"ElementaryTypeName","src":"3281:7:11","typeDescriptions":{}}},"id":1828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3281:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1829,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1816,"src":"3296:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1823,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1814,"src":"3265:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3271:9:11","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1634,"src":"3265:15:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":1830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:39:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3242:62:11"},{"expression":{"arguments":[{"id":1833,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1814,"src":"3327:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"id":1834,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1816,"src":"3334:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1835,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1822,"src":"3343:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":1836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1818,"src":"3358:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3343:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1832,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"3314:12:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":1838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3314:50:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1839,"nodeType":"ExpressionStatement","src":"3314:50:11"}]},"documentation":{"id":1811,"nodeType":"StructuredDocumentation","src":"2496:645:11","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":1841,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"3155:21:11","nodeType":"FunctionDefinition","parameters":{"id":1819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1814,"mutability":"mutable","name":"token","nameLocation":"3184:5:11","nodeType":"VariableDeclaration","scope":1841,"src":"3177:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1813,"nodeType":"UserDefinedTypeName","pathNode":{"id":1812,"name":"IERC20","nameLocations":["3177:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"3177:6:11"},"referencedDeclaration":1657,"src":"3177:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1816,"mutability":"mutable","name":"spender","nameLocation":"3199:7:11","nodeType":"VariableDeclaration","scope":1841,"src":"3191:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1815,"name":"address","nodeType":"ElementaryTypeName","src":"3191:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1818,"mutability":"mutable","name":"value","nameLocation":"3216:5:11","nodeType":"VariableDeclaration","scope":1841,"src":"3208:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1817,"name":"uint256","nodeType":"ElementaryTypeName","src":"3208:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3176:46:11"},"returnParameters":{"id":1820,"nodeType":"ParameterList","parameters":[],"src":"3232:0:11"},"scope":2147,"src":"3146:225:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1883,"nodeType":"Block","src":"4137:370:11","statements":[{"id":1882,"nodeType":"UncheckedBlock","src":"4147:354:11","statements":[{"assignments":[1853],"declarations":[{"constant":false,"id":1853,"mutability":"mutable","name":"currentAllowance","nameLocation":"4179:16:11","nodeType":"VariableDeclaration","scope":1882,"src":"4171:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1852,"name":"uint256","nodeType":"ElementaryTypeName","src":"4171:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1862,"initialValue":{"arguments":[{"arguments":[{"id":1858,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4222:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2147","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2147","typeString":"library SafeERC20"}],"id":1857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4214:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"4214:7:11","typeDescriptions":{}}},"id":1859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4214:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1860,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1847,"src":"4229:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1854,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1845,"src":"4198:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:9:11","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1634,"src":"4198:15:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":1861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4198:39:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4171:66:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1863,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"4255:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1864,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1849,"src":"4274:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4255:36:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1873,"nodeType":"IfStatement","src":"4251:160:11","trueBody":{"id":1872,"nodeType":"Block","src":"4293:118:11","statements":[{"errorCall":{"arguments":[{"id":1867,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1847,"src":"4351:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1868,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"4360:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1869,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1849,"src":"4378:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1866,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1704,"src":"4318:32:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":1870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:78:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1871,"nodeType":"RevertStatement","src":"4311:85:11"}]}},{"expression":{"arguments":[{"id":1875,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1845,"src":"4437:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"id":1876,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1847,"src":"4444:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1877,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1853,"src":"4453:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1878,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1849,"src":"4472:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1874,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"4424:12:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":1880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:66:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1881,"nodeType":"ExpressionStatement","src":"4424:66:11"}]}]},"documentation":{"id":1842,"nodeType":"StructuredDocumentation","src":"3377:657:11","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":1884,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"4048:21:11","nodeType":"FunctionDefinition","parameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1845,"mutability":"mutable","name":"token","nameLocation":"4077:5:11","nodeType":"VariableDeclaration","scope":1884,"src":"4070:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1844,"nodeType":"UserDefinedTypeName","pathNode":{"id":1843,"name":"IERC20","nameLocations":["4070:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"4070:6:11"},"referencedDeclaration":1657,"src":"4070:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1847,"mutability":"mutable","name":"spender","nameLocation":"4092:7:11","nodeType":"VariableDeclaration","scope":1884,"src":"4084:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1846,"name":"address","nodeType":"ElementaryTypeName","src":"4084:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"requestedDecrease","nameLocation":"4109:17:11","nodeType":"VariableDeclaration","scope":1884,"src":"4101:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1848,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4069:58:11"},"returnParameters":{"id":1851,"nodeType":"ParameterList","parameters":[],"src":"4137:0:11"},"scope":2147,"src":"4039:468:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1930,"nodeType":"Block","src":"5161:303:11","statements":[{"assignments":[1896],"declarations":[{"constant":false,"id":1896,"mutability":"mutable","name":"approvalCall","nameLocation":"5184:12:11","nodeType":"VariableDeclaration","scope":1930,"src":"5171:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1895,"name":"bytes","nodeType":"ElementaryTypeName","src":"5171:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1905,"initialValue":{"arguments":[{"expression":{"id":1899,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1888,"src":"5214:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:7:11","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1644,"src":"5214:13:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":1901,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1890,"src":"5230:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1902,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1892,"src":"5239:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1903,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5229:16:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":1897,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5199:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5203:10:11","memberName":"encodeCall","nodeType":"MemberAccess","src":"5199:14:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5199:47:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5171:75:11"},{"condition":{"id":1910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5261:45:11","subExpression":{"arguments":[{"id":1907,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1888,"src":"5286:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"id":1908,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1896,"src":"5293:12:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1906,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2146,"src":"5262:23:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":1909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:44:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1929,"nodeType":"IfStatement","src":"5257:201:11","trueBody":{"id":1928,"nodeType":"Block","src":"5308:150:11","statements":[{"expression":{"arguments":[{"id":1912,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1888,"src":"5342:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":1915,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1888,"src":"5364:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":1916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5370:7:11","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1644,"src":"5364:13:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":1917,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1890,"src":"5380:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5389:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":1919,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5379:12:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":1913,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5349:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5353:10:11","memberName":"encodeCall","nodeType":"MemberAccess","src":"5349:14:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5349:43:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1911,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2105,"src":"5322:19:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":1921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:71:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1922,"nodeType":"ExpressionStatement","src":"5322:71:11"},{"expression":{"arguments":[{"id":1924,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1888,"src":"5427:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},{"id":1925,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1896,"src":"5434:12:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1923,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2105,"src":"5407:19:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":1926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5407:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1927,"nodeType":"ExpressionStatement","src":"5407:40:11"}]}}]},"documentation":{"id":1885,"nodeType":"StructuredDocumentation","src":"4513:566:11","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here."},"id":1931,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"5093:12:11","nodeType":"FunctionDefinition","parameters":{"id":1893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1888,"mutability":"mutable","name":"token","nameLocation":"5113:5:11","nodeType":"VariableDeclaration","scope":1931,"src":"5106:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":1887,"nodeType":"UserDefinedTypeName","pathNode":{"id":1886,"name":"IERC20","nameLocations":["5106:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"5106:6:11"},"referencedDeclaration":1657,"src":"5106:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1890,"mutability":"mutable","name":"spender","nameLocation":"5128:7:11","nodeType":"VariableDeclaration","scope":1931,"src":"5120:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1889,"name":"address","nodeType":"ElementaryTypeName","src":"5120:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1892,"mutability":"mutable","name":"value","nameLocation":"5145:5:11","nodeType":"VariableDeclaration","scope":1931,"src":"5137:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1891,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5105:46:11"},"returnParameters":{"id":1894,"nodeType":"ParameterList","parameters":[],"src":"5161:0:11"},"scope":2147,"src":"5084:380:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1973,"nodeType":"Block","src":"5911:219:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1944,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"5925:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5928:4:11","memberName":"code","nodeType":"MemberAccess","src":"5925:7:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5933:6:11","memberName":"length","nodeType":"MemberAccess","src":"5925:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5943:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5925:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":1962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6011:39:11","subExpression":{"arguments":[{"id":1958,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"6034:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"6038:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1960,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"6045:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"6012:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},"id":1957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6018:15:11","memberName":"transferAndCall","nodeType":"MemberAccess","referencedDeclaration":870,"src":"6012:21:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":1961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6012:38:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1971,"nodeType":"IfStatement","src":"6007:117:11","trueBody":{"id":1970,"nodeType":"Block","src":"6052:72:11","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":1966,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"6106:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}],"id":1965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6098:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1964,"name":"address","nodeType":"ElementaryTypeName","src":"6098:7:11","typeDescriptions":{}}},"id":1967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6098:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1963,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"6073:24:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1969,"nodeType":"RevertStatement","src":"6066:47:11"}]}},"id":1972,"nodeType":"IfStatement","src":"5921:203:11","trueBody":{"id":1955,"nodeType":"Block","src":"5946:55:11","statements":[{"expression":{"arguments":[{"id":1950,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"5973:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},{"id":1951,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"5980:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1952,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"5984:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1949,"name":"safeTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1728,"src":"5960:12:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":1953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5960:30:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1954,"nodeType":"ExpressionStatement","src":"5960:30:11"}]}}]},"documentation":{"id":1932,"nodeType":"StructuredDocumentation","src":"5470:333:11","text":" @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":1974,"implemented":true,"kind":"function","modifiers":[],"name":"transferAndCallRelaxed","nameLocation":"5817:22:11","nodeType":"FunctionDefinition","parameters":{"id":1942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1935,"mutability":"mutable","name":"token","nameLocation":"5849:5:11","nodeType":"VariableDeclaration","scope":1974,"src":"5840:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"},"typeName":{"id":1934,"nodeType":"UserDefinedTypeName","pathNode":{"id":1933,"name":"IERC1363","nameLocations":["5840:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":919,"src":"5840:8:11"},"referencedDeclaration":919,"src":"5840:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":1937,"mutability":"mutable","name":"to","nameLocation":"5864:2:11","nodeType":"VariableDeclaration","scope":1974,"src":"5856:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1936,"name":"address","nodeType":"ElementaryTypeName","src":"5856:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1939,"mutability":"mutable","name":"value","nameLocation":"5876:5:11","nodeType":"VariableDeclaration","scope":1974,"src":"5868:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1938,"name":"uint256","nodeType":"ElementaryTypeName","src":"5868:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"data","nameLocation":"5896:4:11","nodeType":"VariableDeclaration","scope":1974,"src":"5883:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1940,"name":"bytes","nodeType":"ElementaryTypeName","src":"5883:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5839:62:11"},"returnParameters":{"id":1943,"nodeType":"ParameterList","parameters":[],"src":"5911:0:11"},"scope":2147,"src":"5808:322:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2020,"nodeType":"Block","src":"6649:239:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1989,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1982,"src":"6663:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6666:4:11","memberName":"code","nodeType":"MemberAccess","src":"6663:7:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6671:6:11","memberName":"length","nodeType":"MemberAccess","src":"6663:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6681:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6663:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":2009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6759:49:11","subExpression":{"arguments":[{"id":2004,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1980,"src":"6786:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2005,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1982,"src":"6792:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1984,"src":"6796:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2007,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1986,"src":"6803:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2002,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"6760:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},"id":2003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6766:19:11","memberName":"transferFromAndCall","nodeType":"MemberAccess","referencedDeclaration":896,"src":"6760:25:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,uint256,bytes memory) external returns (bool)"}},"id":2008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6760:48:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2018,"nodeType":"IfStatement","src":"6755:127:11","trueBody":{"id":2017,"nodeType":"Block","src":"6810:72:11","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":2013,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"6864:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}],"id":2012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6856:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2011,"name":"address","nodeType":"ElementaryTypeName","src":"6856:7:11","typeDescriptions":{}}},"id":2014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6856:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2010,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"6831:24:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2016,"nodeType":"RevertStatement","src":"6824:47:11"}]}},"id":2019,"nodeType":"IfStatement","src":"6659:223:11","trueBody":{"id":2001,"nodeType":"Block","src":"6684:65:11","statements":[{"expression":{"arguments":[{"id":1995,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"6715:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},{"id":1996,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1980,"src":"6722:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1997,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1982,"src":"6728:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1998,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1984,"src":"6732:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1994,"name":"safeTransferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1755,"src":"6698:16:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2000,"nodeType":"ExpressionStatement","src":"6698:40:11"}]}}]},"documentation":{"id":1975,"nodeType":"StructuredDocumentation","src":"6136:341:11","text":" @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":2021,"implemented":true,"kind":"function","modifiers":[],"name":"transferFromAndCallRelaxed","nameLocation":"6491:26:11","nodeType":"FunctionDefinition","parameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1978,"mutability":"mutable","name":"token","nameLocation":"6536:5:11","nodeType":"VariableDeclaration","scope":2021,"src":"6527:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"},"typeName":{"id":1977,"nodeType":"UserDefinedTypeName","pathNode":{"id":1976,"name":"IERC1363","nameLocations":["6527:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":919,"src":"6527:8:11"},"referencedDeclaration":919,"src":"6527:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":1980,"mutability":"mutable","name":"from","nameLocation":"6559:4:11","nodeType":"VariableDeclaration","scope":2021,"src":"6551:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1979,"name":"address","nodeType":"ElementaryTypeName","src":"6551:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1982,"mutability":"mutable","name":"to","nameLocation":"6581:2:11","nodeType":"VariableDeclaration","scope":2021,"src":"6573:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1981,"name":"address","nodeType":"ElementaryTypeName","src":"6573:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1984,"mutability":"mutable","name":"value","nameLocation":"6601:5:11","nodeType":"VariableDeclaration","scope":2021,"src":"6593:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1983,"name":"uint256","nodeType":"ElementaryTypeName","src":"6593:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1986,"mutability":"mutable","name":"data","nameLocation":"6629:4:11","nodeType":"VariableDeclaration","scope":2021,"src":"6616:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1985,"name":"bytes","nodeType":"ElementaryTypeName","src":"6616:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6517:122:11"},"returnParameters":{"id":1988,"nodeType":"ParameterList","parameters":[],"src":"6649:0:11"},"scope":2147,"src":"6482:406:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2063,"nodeType":"Block","src":"7655:218:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2034,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"7669:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7672:4:11","memberName":"code","nodeType":"MemberAccess","src":"7669:7:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7677:6:11","memberName":"length","nodeType":"MemberAccess","src":"7669:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7687:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7669:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":2052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7755:38:11","subExpression":{"arguments":[{"id":2048,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"7777:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2049,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"7781:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2050,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"7788:4:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2046,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2025,"src":"7756:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},"id":2047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7762:14:11","memberName":"approveAndCall","nodeType":"MemberAccess","referencedDeclaration":918,"src":"7756:20:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":2051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7756:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2061,"nodeType":"IfStatement","src":"7751:116:11","trueBody":{"id":2060,"nodeType":"Block","src":"7795:72:11","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":2056,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2025,"src":"7849:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}],"id":2055,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7841:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2054,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:11","typeDescriptions":{}}},"id":2057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2053,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"7816:24:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7816:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2059,"nodeType":"RevertStatement","src":"7809:47:11"}]}},"id":2062,"nodeType":"IfStatement","src":"7665:202:11","trueBody":{"id":2045,"nodeType":"Block","src":"7690:55:11","statements":[{"expression":{"arguments":[{"id":2040,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2025,"src":"7717:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},{"id":2041,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"7724:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"7728:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2039,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1931,"src":"7704:12:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1657_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":2043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7704:30:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2044,"nodeType":"ExpressionStatement","src":"7704:30:11"}]}}]},"documentation":{"id":2022,"nodeType":"StructuredDocumentation","src":"6894:654:11","text":" @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`."},"id":2064,"implemented":true,"kind":"function","modifiers":[],"name":"approveAndCallRelaxed","nameLocation":"7562:21:11","nodeType":"FunctionDefinition","parameters":{"id":2032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2025,"mutability":"mutable","name":"token","nameLocation":"7593:5:11","nodeType":"VariableDeclaration","scope":2064,"src":"7584:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"},"typeName":{"id":2024,"nodeType":"UserDefinedTypeName","pathNode":{"id":2023,"name":"IERC1363","nameLocations":["7584:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":919,"src":"7584:8:11"},"referencedDeclaration":919,"src":"7584:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$919","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"to","nameLocation":"7608:2:11","nodeType":"VariableDeclaration","scope":2064,"src":"7600:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2026,"name":"address","nodeType":"ElementaryTypeName","src":"7600:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2029,"mutability":"mutable","name":"value","nameLocation":"7620:5:11","nodeType":"VariableDeclaration","scope":2064,"src":"7612:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2028,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2031,"mutability":"mutable","name":"data","nameLocation":"7640:4:11","nodeType":"VariableDeclaration","scope":2064,"src":"7627:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2030,"name":"bytes","nodeType":"ElementaryTypeName","src":"7627:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:62:11"},"returnParameters":{"id":2033,"nodeType":"ParameterList","parameters":[],"src":"7655:0:11"},"scope":2147,"src":"7553:320:11","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2104,"nodeType":"Block","src":"8440:650:11","statements":[{"assignments":[2074],"declarations":[{"constant":false,"id":2074,"mutability":"mutable","name":"returnSize","nameLocation":"8458:10:11","nodeType":"VariableDeclaration","scope":2104,"src":"8450:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2073,"name":"uint256","nodeType":"ElementaryTypeName","src":"8450:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2075,"nodeType":"VariableDeclarationStatement","src":"8450:18:11"},{"assignments":[2077],"declarations":[{"constant":false,"id":2077,"mutability":"mutable","name":"returnValue","nameLocation":"8486:11:11","nodeType":"VariableDeclaration","scope":2104,"src":"8478:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"8478:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2078,"nodeType":"VariableDeclarationStatement","src":"8478:19:11"},{"AST":{"nativeSrc":"8532:396:11","nodeType":"YulBlock","src":"8532:396:11","statements":[{"nativeSrc":"8546:75:11","nodeType":"YulVariableDeclaration","src":"8546:75:11","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"8566:3:11","nodeType":"YulIdentifier","src":"8566:3:11"},"nativeSrc":"8566:5:11","nodeType":"YulFunctionCall","src":"8566:5:11"},{"name":"token","nativeSrc":"8573:5:11","nodeType":"YulIdentifier","src":"8573:5:11"},{"kind":"number","nativeSrc":"8580:1:11","nodeType":"YulLiteral","src":"8580:1:11","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"8587:4:11","nodeType":"YulIdentifier","src":"8587:4:11"},{"kind":"number","nativeSrc":"8593:4:11","nodeType":"YulLiteral","src":"8593:4:11","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8583:3:11","nodeType":"YulIdentifier","src":"8583:3:11"},"nativeSrc":"8583:15:11","nodeType":"YulFunctionCall","src":"8583:15:11"},{"arguments":[{"name":"data","nativeSrc":"8606:4:11","nodeType":"YulIdentifier","src":"8606:4:11"}],"functionName":{"name":"mload","nativeSrc":"8600:5:11","nodeType":"YulIdentifier","src":"8600:5:11"},"nativeSrc":"8600:11:11","nodeType":"YulFunctionCall","src":"8600:11:11"},{"kind":"number","nativeSrc":"8613:1:11","nodeType":"YulLiteral","src":"8613:1:11","type":"","value":"0"},{"kind":"number","nativeSrc":"8616:4:11","nodeType":"YulLiteral","src":"8616:4:11","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"8561:4:11","nodeType":"YulIdentifier","src":"8561:4:11"},"nativeSrc":"8561:60:11","nodeType":"YulFunctionCall","src":"8561:60:11"},"variables":[{"name":"success","nativeSrc":"8550:7:11","nodeType":"YulTypedName","src":"8550:7:11","type":""}]},{"body":{"nativeSrc":"8682:157:11","nodeType":"YulBlock","src":"8682:157:11","statements":[{"nativeSrc":"8700:22:11","nodeType":"YulVariableDeclaration","src":"8700:22:11","value":{"arguments":[{"kind":"number","nativeSrc":"8717:4:11","nodeType":"YulLiteral","src":"8717:4:11","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"8711:5:11","nodeType":"YulIdentifier","src":"8711:5:11"},"nativeSrc":"8711:11:11","nodeType":"YulFunctionCall","src":"8711:11:11"},"variables":[{"name":"ptr","nativeSrc":"8704:3:11","nodeType":"YulTypedName","src":"8704:3:11","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8754:3:11","nodeType":"YulIdentifier","src":"8754:3:11"},{"kind":"number","nativeSrc":"8759:1:11","nodeType":"YulLiteral","src":"8759:1:11","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8762:14:11","nodeType":"YulIdentifier","src":"8762:14:11"},"nativeSrc":"8762:16:11","nodeType":"YulFunctionCall","src":"8762:16:11"}],"functionName":{"name":"returndatacopy","nativeSrc":"8739:14:11","nodeType":"YulIdentifier","src":"8739:14:11"},"nativeSrc":"8739:40:11","nodeType":"YulFunctionCall","src":"8739:40:11"},"nativeSrc":"8739:40:11","nodeType":"YulExpressionStatement","src":"8739:40:11"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8803:3:11","nodeType":"YulIdentifier","src":"8803:3:11"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8808:14:11","nodeType":"YulIdentifier","src":"8808:14:11"},"nativeSrc":"8808:16:11","nodeType":"YulFunctionCall","src":"8808:16:11"}],"functionName":{"name":"revert","nativeSrc":"8796:6:11","nodeType":"YulIdentifier","src":"8796:6:11"},"nativeSrc":"8796:29:11","nodeType":"YulFunctionCall","src":"8796:29:11"},"nativeSrc":"8796:29:11","nodeType":"YulExpressionStatement","src":"8796:29:11"}]},"condition":{"arguments":[{"name":"success","nativeSrc":"8673:7:11","nodeType":"YulIdentifier","src":"8673:7:11"}],"functionName":{"name":"iszero","nativeSrc":"8666:6:11","nodeType":"YulIdentifier","src":"8666:6:11"},"nativeSrc":"8666:15:11","nodeType":"YulFunctionCall","src":"8666:15:11"},"nativeSrc":"8663:176:11","nodeType":"YulIf","src":"8663:176:11"},{"nativeSrc":"8852:30:11","nodeType":"YulAssignment","src":"8852:30:11","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8866:14:11","nodeType":"YulIdentifier","src":"8866:14:11"},"nativeSrc":"8866:16:11","nodeType":"YulFunctionCall","src":"8866:16:11"},"variableNames":[{"name":"returnSize","nativeSrc":"8852:10:11","nodeType":"YulIdentifier","src":"8852:10:11"}]},{"nativeSrc":"8895:23:11","nodeType":"YulAssignment","src":"8895:23:11","value":{"arguments":[{"kind":"number","nativeSrc":"8916:1:11","nodeType":"YulLiteral","src":"8916:1:11","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"8910:5:11","nodeType":"YulIdentifier","src":"8910:5:11"},"nativeSrc":"8910:8:11","nodeType":"YulFunctionCall","src":"8910:8:11"},"variableNames":[{"name":"returnValue","nativeSrc":"8895:11:11","nodeType":"YulIdentifier","src":"8895:11:11"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2070,"isOffset":false,"isSlot":false,"src":"8587:4:11","valueSize":1},{"declaration":2070,"isOffset":false,"isSlot":false,"src":"8606:4:11","valueSize":1},{"declaration":2074,"isOffset":false,"isSlot":false,"src":"8852:10:11","valueSize":1},{"declaration":2077,"isOffset":false,"isSlot":false,"src":"8895:11:11","valueSize":1},{"declaration":2068,"isOffset":false,"isSlot":false,"src":"8573:5:11","valueSize":1}],"flags":["memory-safe"],"id":2079,"nodeType":"InlineAssembly","src":"8507:421:11"},{"condition":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2080,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2074,"src":"8942:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8956:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8942:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2091,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2077,"src":"8994:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":2092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9009:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8994:16:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8942:68:11","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":2085,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2068,"src":"8968:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}],"id":2084,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8960:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2083,"name":"address","nodeType":"ElementaryTypeName","src":"8960:7:11","typeDescriptions":{}}},"id":2086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8960:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8975:4:11","memberName":"code","nodeType":"MemberAccess","src":"8960:19:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8980:6:11","memberName":"length","nodeType":"MemberAccess","src":"8960:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8990:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8960:31:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2103,"nodeType":"IfStatement","src":"8938:146:11","trueBody":{"id":2102,"nodeType":"Block","src":"9012:72:11","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":2098,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2068,"src":"9066:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}],"id":2097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9058:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2096,"name":"address","nodeType":"ElementaryTypeName","src":"9058:7:11","typeDescriptions":{}}},"id":2099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9058:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2095,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"9033:24:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9033:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2101,"nodeType":"RevertStatement","src":"9026:47:11"}]}}]},"documentation":{"id":2065,"nodeType":"StructuredDocumentation","src":"7879:486:11","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements."},"id":2105,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"8379:19:11","nodeType":"FunctionDefinition","parameters":{"id":2071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2068,"mutability":"mutable","name":"token","nameLocation":"8406:5:11","nodeType":"VariableDeclaration","scope":2105,"src":"8399:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":2067,"nodeType":"UserDefinedTypeName","pathNode":{"id":2066,"name":"IERC20","nameLocations":["8399:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"8399:6:11"},"referencedDeclaration":1657,"src":"8399:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2070,"mutability":"mutable","name":"data","nameLocation":"8426:4:11","nodeType":"VariableDeclaration","scope":2105,"src":"8413:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2069,"name":"bytes","nodeType":"ElementaryTypeName","src":"8413:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8398:33:11"},"returnParameters":{"id":2072,"nodeType":"ParameterList","parameters":[],"src":"8440:0:11"},"scope":2147,"src":"8370:720:11","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":2145,"nodeType":"Block","src":"9681:391:11","statements":[{"assignments":[2117],"declarations":[{"constant":false,"id":2117,"mutability":"mutable","name":"success","nameLocation":"9696:7:11","nodeType":"VariableDeclaration","scope":2145,"src":"9691:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2116,"name":"bool","nodeType":"ElementaryTypeName","src":"9691:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2118,"nodeType":"VariableDeclarationStatement","src":"9691:12:11"},{"assignments":[2120],"declarations":[{"constant":false,"id":2120,"mutability":"mutable","name":"returnSize","nameLocation":"9721:10:11","nodeType":"VariableDeclaration","scope":2145,"src":"9713:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2119,"name":"uint256","nodeType":"ElementaryTypeName","src":"9713:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2121,"nodeType":"VariableDeclarationStatement","src":"9713:18:11"},{"assignments":[2123],"declarations":[{"constant":false,"id":2123,"mutability":"mutable","name":"returnValue","nameLocation":"9749:11:11","nodeType":"VariableDeclaration","scope":2145,"src":"9741:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2122,"name":"uint256","nodeType":"ElementaryTypeName","src":"9741:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2124,"nodeType":"VariableDeclarationStatement","src":"9741:19:11"},{"AST":{"nativeSrc":"9795:174:11","nodeType":"YulBlock","src":"9795:174:11","statements":[{"nativeSrc":"9809:71:11","nodeType":"YulAssignment","src":"9809:71:11","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"9825:3:11","nodeType":"YulIdentifier","src":"9825:3:11"},"nativeSrc":"9825:5:11","nodeType":"YulFunctionCall","src":"9825:5:11"},{"name":"token","nativeSrc":"9832:5:11","nodeType":"YulIdentifier","src":"9832:5:11"},{"kind":"number","nativeSrc":"9839:1:11","nodeType":"YulLiteral","src":"9839:1:11","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"9846:4:11","nodeType":"YulIdentifier","src":"9846:4:11"},{"kind":"number","nativeSrc":"9852:4:11","nodeType":"YulLiteral","src":"9852:4:11","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9842:3:11","nodeType":"YulIdentifier","src":"9842:3:11"},"nativeSrc":"9842:15:11","nodeType":"YulFunctionCall","src":"9842:15:11"},{"arguments":[{"name":"data","nativeSrc":"9865:4:11","nodeType":"YulIdentifier","src":"9865:4:11"}],"functionName":{"name":"mload","nativeSrc":"9859:5:11","nodeType":"YulIdentifier","src":"9859:5:11"},"nativeSrc":"9859:11:11","nodeType":"YulFunctionCall","src":"9859:11:11"},{"kind":"number","nativeSrc":"9872:1:11","nodeType":"YulLiteral","src":"9872:1:11","type":"","value":"0"},{"kind":"number","nativeSrc":"9875:4:11","nodeType":"YulLiteral","src":"9875:4:11","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"9820:4:11","nodeType":"YulIdentifier","src":"9820:4:11"},"nativeSrc":"9820:60:11","nodeType":"YulFunctionCall","src":"9820:60:11"},"variableNames":[{"name":"success","nativeSrc":"9809:7:11","nodeType":"YulIdentifier","src":"9809:7:11"}]},{"nativeSrc":"9893:30:11","nodeType":"YulAssignment","src":"9893:30:11","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"9907:14:11","nodeType":"YulIdentifier","src":"9907:14:11"},"nativeSrc":"9907:16:11","nodeType":"YulFunctionCall","src":"9907:16:11"},"variableNames":[{"name":"returnSize","nativeSrc":"9893:10:11","nodeType":"YulIdentifier","src":"9893:10:11"}]},{"nativeSrc":"9936:23:11","nodeType":"YulAssignment","src":"9936:23:11","value":{"arguments":[{"kind":"number","nativeSrc":"9957:1:11","nodeType":"YulLiteral","src":"9957:1:11","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"9951:5:11","nodeType":"YulIdentifier","src":"9951:5:11"},"nativeSrc":"9951:8:11","nodeType":"YulFunctionCall","src":"9951:8:11"},"variableNames":[{"name":"returnValue","nativeSrc":"9936:11:11","nodeType":"YulIdentifier","src":"9936:11:11"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":2111,"isOffset":false,"isSlot":false,"src":"9846:4:11","valueSize":1},{"declaration":2111,"isOffset":false,"isSlot":false,"src":"9865:4:11","valueSize":1},{"declaration":2120,"isOffset":false,"isSlot":false,"src":"9893:10:11","valueSize":1},{"declaration":2123,"isOffset":false,"isSlot":false,"src":"9936:11:11","valueSize":1},{"declaration":2117,"isOffset":false,"isSlot":false,"src":"9809:7:11","valueSize":1},{"declaration":2109,"isOffset":false,"isSlot":false,"src":"9832:5:11","valueSize":1}],"flags":["memory-safe"],"id":2125,"nodeType":"InlineAssembly","src":"9770:199:11"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2126,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2117,"src":"9985:7:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2127,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2120,"src":"9997:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10011:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9997:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2138,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2123,"src":"10048:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":2139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10063:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10048:16:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9997:67:11","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":2132,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2109,"src":"10023:5:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}],"id":2131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10015:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2130,"name":"address","nodeType":"ElementaryTypeName","src":"10015:7:11","typeDescriptions":{}}},"id":2133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10015:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10030:4:11","memberName":"code","nodeType":"MemberAccess","src":"10015:19:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:6:11","memberName":"length","nodeType":"MemberAccess","src":"10015:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10044:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10015:30:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2142,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9996:69:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9985:80:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2115,"id":2144,"nodeType":"Return","src":"9978:87:11"}]},"documentation":{"id":2106,"nodeType":"StructuredDocumentation","src":"9096:491:11","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead."},"id":2146,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"9601:23:11","nodeType":"FunctionDefinition","parameters":{"id":2112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2109,"mutability":"mutable","name":"token","nameLocation":"9632:5:11","nodeType":"VariableDeclaration","scope":2146,"src":"9625:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":2108,"nodeType":"UserDefinedTypeName","pathNode":{"id":2107,"name":"IERC20","nameLocations":["9625:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"9625:6:11"},"referencedDeclaration":1657,"src":"9625:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2111,"mutability":"mutable","name":"data","nameLocation":"9652:4:11","nodeType":"VariableDeclaration","scope":2146,"src":"9639:17:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2110,"name":"bytes","nodeType":"ElementaryTypeName","src":"9639:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9624:33:11"},"returnParameters":{"id":2115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2146,"src":"9675:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2113,"name":"bool","nodeType":"ElementaryTypeName","src":"9675:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9674:6:11"},"scope":2147,"src":"9592:480:11","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":2148,"src":"698:9376:11","usedErrors":[1695,1704],"usedEvents":[]}],"src":"115:9960:11"},"id":11},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[2407],"Errors":[2459]},"id":2408,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2149,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:12"},{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","file":"./Errors.sol","id":2151,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2408,"sourceUnit":2460,"src":"127:36:12","symbolAliases":[{"foreign":{"id":2150,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2459,"src":"135:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":2152,"nodeType":"StructuredDocumentation","src":"165:67:12","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":2407,"linearizedBaseContracts":[2407],"name":"Address","nameLocation":"241:7:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2153,"nodeType":"StructuredDocumentation","src":"255:75:12","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":2157,"name":"AddressEmptyCode","nameLocation":"341:16:12","nodeType":"ErrorDefinition","parameters":{"id":2156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2155,"mutability":"mutable","name":"target","nameLocation":"366:6:12","nodeType":"VariableDeclaration","scope":2157,"src":"358:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2154,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"357:16:12"},"src":"335:39:12"},{"body":{"id":2204,"nodeType":"Block","src":"1361:294:12","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2167,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1383:4:12","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}],"id":2166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1375:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2165,"name":"address","nodeType":"ElementaryTypeName","src":"1375:7:12","typeDescriptions":{}}},"id":2168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1389:7:12","memberName":"balance","nodeType":"MemberAccess","src":"1375:21:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2170,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2162,"src":"1399:6:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1375:30:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2184,"nodeType":"IfStatement","src":"1371:125:12","trueBody":{"id":2183,"nodeType":"Block","src":"1407:89:12","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":2177,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1463:4:12","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}],"id":2176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1455:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2175,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:12","typeDescriptions":{}}},"id":2178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1469:7:12","memberName":"balance","nodeType":"MemberAccess","src":"1455:21:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2180,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2162,"src":"1478:6:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2172,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2459,"src":"1428:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$2459_$","typeString":"type(library Errors)"}},"id":2174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:19:12","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":2447,"src":"1428:26:12","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":2181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:57:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2182,"nodeType":"RevertStatement","src":"1421:64:12"}]}},{"assignments":[2186,2188],"declarations":[{"constant":false,"id":2186,"mutability":"mutable","name":"success","nameLocation":"1512:7:12","nodeType":"VariableDeclaration","scope":2204,"src":"1507:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2185,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2188,"mutability":"mutable","name":"returndata","nameLocation":"1534:10:12","nodeType":"VariableDeclaration","scope":2204,"src":"1521:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2187,"name":"bytes","nodeType":"ElementaryTypeName","src":"1521:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2195,"initialValue":{"arguments":[{"hexValue":"","id":2193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1578:2:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2189,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2160,"src":"1548:9:12","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1558:4:12","memberName":"call","nodeType":"MemberAccess","src":"1548:14:12","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2191,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2162,"src":"1570:6:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1548:29:12","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:33:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1506:75:12"},{"condition":{"id":2197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1595:8:12","subExpression":{"id":2196,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2186,"src":"1596:7:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2203,"nodeType":"IfStatement","src":"1591:58:12","trueBody":{"id":2202,"nodeType":"Block","src":"1605:44:12","statements":[{"expression":{"arguments":[{"id":2199,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2188,"src":"1627:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2198,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2406,"src":"1619:7:12","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":2200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:19:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2201,"nodeType":"ExpressionStatement","src":"1619:19:12"}]}}]},"documentation":{"id":2158,"nodeType":"StructuredDocumentation","src":"380:905:12","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":2205,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1299:9:12","nodeType":"FunctionDefinition","parameters":{"id":2163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2160,"mutability":"mutable","name":"recipient","nameLocation":"1325:9:12","nodeType":"VariableDeclaration","scope":2205,"src":"1309:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2159,"name":"address","nodeType":"ElementaryTypeName","src":"1309:15:12","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2162,"mutability":"mutable","name":"amount","nameLocation":"1344:6:12","nodeType":"VariableDeclaration","scope":2205,"src":"1336:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2161,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:43:12"},"returnParameters":{"id":2164,"nodeType":"ParameterList","parameters":[],"src":"1361:0:12"},"scope":2407,"src":"1290:365:12","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2221,"nodeType":"Block","src":"2589:62:12","statements":[{"expression":{"arguments":[{"id":2216,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2208,"src":"2628:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2217,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2210,"src":"2636:4:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2642:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2215,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2272,"src":"2606:21:12","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":2219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2606:38:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2214,"id":2220,"nodeType":"Return","src":"2599:45:12"}]},"documentation":{"id":2206,"nodeType":"StructuredDocumentation","src":"1661:834:12","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":2222,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2509:12:12","nodeType":"FunctionDefinition","parameters":{"id":2211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2208,"mutability":"mutable","name":"target","nameLocation":"2530:6:12","nodeType":"VariableDeclaration","scope":2222,"src":"2522:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2207,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2210,"mutability":"mutable","name":"data","nameLocation":"2551:4:12","nodeType":"VariableDeclaration","scope":2222,"src":"2538:17:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2209,"name":"bytes","nodeType":"ElementaryTypeName","src":"2538:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2521:35:12"},"returnParameters":{"id":2214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2222,"src":"2575:12:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2212,"name":"bytes","nodeType":"ElementaryTypeName","src":"2575:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2574:14:12"},"scope":2407,"src":"2500:151:12","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2271,"nodeType":"Block","src":"3088:294:12","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2236,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3110:4:12","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}],"id":2235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3102:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2234,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:12","typeDescriptions":{}}},"id":2237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3102:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3116:7:12","memberName":"balance","nodeType":"MemberAccess","src":"3102:21:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2239,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2229,"src":"3126:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3102:29:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2253,"nodeType":"IfStatement","src":"3098:123:12","trueBody":{"id":2252,"nodeType":"Block","src":"3133:88:12","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":2246,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3189:4:12","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$2407","typeString":"library Address"}],"id":2245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3181:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2244,"name":"address","nodeType":"ElementaryTypeName","src":"3181:7:12","typeDescriptions":{}}},"id":2247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3195:7:12","memberName":"balance","nodeType":"MemberAccess","src":"3181:21:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2249,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2229,"src":"3204:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2241,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2459,"src":"3154:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$2459_$","typeString":"type(library Errors)"}},"id":2243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:19:12","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":2447,"src":"3154:26:12","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":2250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:56:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2251,"nodeType":"RevertStatement","src":"3147:63:12"}]}},{"assignments":[2255,2257],"declarations":[{"constant":false,"id":2255,"mutability":"mutable","name":"success","nameLocation":"3236:7:12","nodeType":"VariableDeclaration","scope":2271,"src":"3231:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2254,"name":"bool","nodeType":"ElementaryTypeName","src":"3231:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2257,"mutability":"mutable","name":"returndata","nameLocation":"3258:10:12","nodeType":"VariableDeclaration","scope":2271,"src":"3245:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2256,"name":"bytes","nodeType":"ElementaryTypeName","src":"3245:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2264,"initialValue":{"arguments":[{"id":2262,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2227,"src":"3298:4:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2258,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2225,"src":"3272:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3279:4:12","memberName":"call","nodeType":"MemberAccess","src":"3272:11:12","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2260,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2229,"src":"3291:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3272:25:12","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:31:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3230:73:12"},{"expression":{"arguments":[{"id":2266,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2225,"src":"3347:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2267,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2255,"src":"3355:7:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2268,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2257,"src":"3364:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2265,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2364,"src":"3320:26:12","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":2269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3320:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2233,"id":2270,"nodeType":"Return","src":"3313:62:12"}]},"documentation":{"id":2223,"nodeType":"StructuredDocumentation","src":"2657:313:12","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":2272,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"2984:21:12","nodeType":"FunctionDefinition","parameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2225,"mutability":"mutable","name":"target","nameLocation":"3014:6:12","nodeType":"VariableDeclaration","scope":2272,"src":"3006:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2224,"name":"address","nodeType":"ElementaryTypeName","src":"3006:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2227,"mutability":"mutable","name":"data","nameLocation":"3035:4:12","nodeType":"VariableDeclaration","scope":2272,"src":"3022:17:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2226,"name":"bytes","nodeType":"ElementaryTypeName","src":"3022:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2229,"mutability":"mutable","name":"value","nameLocation":"3049:5:12","nodeType":"VariableDeclaration","scope":2272,"src":"3041:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2228,"name":"uint256","nodeType":"ElementaryTypeName","src":"3041:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3005:50:12"},"returnParameters":{"id":2233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2272,"src":"3074:12:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2231,"name":"bytes","nodeType":"ElementaryTypeName","src":"3074:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3073:14:12"},"scope":2407,"src":"2975:407:12","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2297,"nodeType":"Block","src":"3621:154:12","statements":[{"assignments":[2283,2285],"declarations":[{"constant":false,"id":2283,"mutability":"mutable","name":"success","nameLocation":"3637:7:12","nodeType":"VariableDeclaration","scope":2297,"src":"3632:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2282,"name":"bool","nodeType":"ElementaryTypeName","src":"3632:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2285,"mutability":"mutable","name":"returndata","nameLocation":"3659:10:12","nodeType":"VariableDeclaration","scope":2297,"src":"3646:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2284,"name":"bytes","nodeType":"ElementaryTypeName","src":"3646:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2290,"initialValue":{"arguments":[{"id":2288,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"3691:4:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2286,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"3673:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3680:10:12","memberName":"staticcall","nodeType":"MemberAccess","src":"3673:17:12","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":2289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3673:23:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3631:65:12"},{"expression":{"arguments":[{"id":2292,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"3740:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2293,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"3748:7:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2294,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2285,"src":"3757:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2291,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2364,"src":"3713:26:12","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":2295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3713:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2281,"id":2296,"nodeType":"Return","src":"3706:62:12"}]},"documentation":{"id":2273,"nodeType":"StructuredDocumentation","src":"3388:128:12","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":2298,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3530:18:12","nodeType":"FunctionDefinition","parameters":{"id":2278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2275,"mutability":"mutable","name":"target","nameLocation":"3557:6:12","nodeType":"VariableDeclaration","scope":2298,"src":"3549:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2274,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2277,"mutability":"mutable","name":"data","nameLocation":"3578:4:12","nodeType":"VariableDeclaration","scope":2298,"src":"3565:17:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2276,"name":"bytes","nodeType":"ElementaryTypeName","src":"3565:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3548:35:12"},"returnParameters":{"id":2281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2298,"src":"3607:12:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2279,"name":"bytes","nodeType":"ElementaryTypeName","src":"3607:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3606:14:12"},"scope":2407,"src":"3521:254:12","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2323,"nodeType":"Block","src":"4013:156:12","statements":[{"assignments":[2309,2311],"declarations":[{"constant":false,"id":2309,"mutability":"mutable","name":"success","nameLocation":"4029:7:12","nodeType":"VariableDeclaration","scope":2323,"src":"4024:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2308,"name":"bool","nodeType":"ElementaryTypeName","src":"4024:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"returndata","nameLocation":"4051:10:12","nodeType":"VariableDeclaration","scope":2323,"src":"4038:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2310,"name":"bytes","nodeType":"ElementaryTypeName","src":"4038:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2316,"initialValue":{"arguments":[{"id":2314,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2303,"src":"4085:4:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2312,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"4065:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4072:12:12","memberName":"delegatecall","nodeType":"MemberAccess","src":"4065:19:12","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":2315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4065:25:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4023:67:12"},{"expression":{"arguments":[{"id":2318,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"4134:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2319,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2309,"src":"4142:7:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2320,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2311,"src":"4151:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2317,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2364,"src":"4107:26:12","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":2321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4107:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2307,"id":2322,"nodeType":"Return","src":"4100:62:12"}]},"documentation":{"id":2299,"nodeType":"StructuredDocumentation","src":"3781:130:12","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":2324,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"3925:20:12","nodeType":"FunctionDefinition","parameters":{"id":2304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2301,"mutability":"mutable","name":"target","nameLocation":"3954:6:12","nodeType":"VariableDeclaration","scope":2324,"src":"3946:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2300,"name":"address","nodeType":"ElementaryTypeName","src":"3946:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"data","nameLocation":"3975:4:12","nodeType":"VariableDeclaration","scope":2324,"src":"3962:17:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2302,"name":"bytes","nodeType":"ElementaryTypeName","src":"3962:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3945:35:12"},"returnParameters":{"id":2307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2324,"src":"3999:12:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2305,"name":"bytes","nodeType":"ElementaryTypeName","src":"3999:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3998:14:12"},"scope":2407,"src":"3916:253:12","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2363,"nodeType":"Block","src":"4595:424:12","statements":[{"condition":{"id":2337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4609:8:12","subExpression":{"id":2336,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2329,"src":"4610:7:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2361,"nodeType":"Block","src":"4669:344:12","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2343,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"4857:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4868:6:12","memberName":"length","nodeType":"MemberAccess","src":"4857:17:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4878:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4857:22:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2347,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2327,"src":"4883:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:4:12","memberName":"code","nodeType":"MemberAccess","src":"4883:11:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:6:12","memberName":"length","nodeType":"MemberAccess","src":"4883:18:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4905:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4883:23:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4857:49:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2358,"nodeType":"IfStatement","src":"4853:119:12","trueBody":{"id":2357,"nodeType":"Block","src":"4908:64:12","statements":[{"errorCall":{"arguments":[{"id":2354,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2327,"src":"4950:6:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2353,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2157,"src":"4933:16:12","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4933:24:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2356,"nodeType":"RevertStatement","src":"4926:31:12"}]}},{"expression":{"id":2359,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"4992:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2335,"id":2360,"nodeType":"Return","src":"4985:17:12"}]},"id":2362,"nodeType":"IfStatement","src":"4605:408:12","trueBody":{"id":2342,"nodeType":"Block","src":"4619:44:12","statements":[{"expression":{"arguments":[{"id":2339,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"4641:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2338,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2406,"src":"4633:7:12","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":2340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4633:19:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2341,"nodeType":"ExpressionStatement","src":"4633:19:12"}]}}]},"documentation":{"id":2325,"nodeType":"StructuredDocumentation","src":"4175:257:12","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call."},"id":2364,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4446:26:12","nodeType":"FunctionDefinition","parameters":{"id":2332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2327,"mutability":"mutable","name":"target","nameLocation":"4490:6:12","nodeType":"VariableDeclaration","scope":2364,"src":"4482:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2326,"name":"address","nodeType":"ElementaryTypeName","src":"4482:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2329,"mutability":"mutable","name":"success","nameLocation":"4511:7:12","nodeType":"VariableDeclaration","scope":2364,"src":"4506:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2328,"name":"bool","nodeType":"ElementaryTypeName","src":"4506:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2331,"mutability":"mutable","name":"returndata","nameLocation":"4541:10:12","nodeType":"VariableDeclaration","scope":2364,"src":"4528:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2330,"name":"bytes","nodeType":"ElementaryTypeName","src":"4528:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4472:85:12"},"returnParameters":{"id":2335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2364,"src":"4581:12:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2333,"name":"bytes","nodeType":"ElementaryTypeName","src":"4581:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4580:14:12"},"scope":2407,"src":"4437:582:12","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2385,"nodeType":"Block","src":"5323:122:12","statements":[{"condition":{"id":2375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5337:8:12","subExpression":{"id":2374,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2367,"src":"5338:7:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2383,"nodeType":"Block","src":"5397:42:12","statements":[{"expression":{"id":2381,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2369,"src":"5418:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2373,"id":2382,"nodeType":"Return","src":"5411:17:12"}]},"id":2384,"nodeType":"IfStatement","src":"5333:106:12","trueBody":{"id":2380,"nodeType":"Block","src":"5347:44:12","statements":[{"expression":{"arguments":[{"id":2377,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2369,"src":"5369:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2376,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2406,"src":"5361:7:12","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":2378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5361:19:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2379,"nodeType":"ExpressionStatement","src":"5361:19:12"}]}}]},"documentation":{"id":2365,"nodeType":"StructuredDocumentation","src":"5025:191:12","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error."},"id":2386,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5230:16:12","nodeType":"FunctionDefinition","parameters":{"id":2370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2367,"mutability":"mutable","name":"success","nameLocation":"5252:7:12","nodeType":"VariableDeclaration","scope":2386,"src":"5247:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2366,"name":"bool","nodeType":"ElementaryTypeName","src":"5247:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2369,"mutability":"mutable","name":"returndata","nameLocation":"5274:10:12","nodeType":"VariableDeclaration","scope":2386,"src":"5261:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2368,"name":"bytes","nodeType":"ElementaryTypeName","src":"5261:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5246:39:12"},"returnParameters":{"id":2373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2372,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2386,"src":"5309:12:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2371,"name":"bytes","nodeType":"ElementaryTypeName","src":"5309:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5308:14:12"},"scope":2407,"src":"5221:224:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2405,"nodeType":"Block","src":"5614:432:12","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2392,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2389,"src":"5690:10:12","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5701:6:12","memberName":"length","nodeType":"MemberAccess","src":"5690:17:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5690:21:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2403,"nodeType":"Block","src":"5989:51:12","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2398,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2459,"src":"6010:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$2459_$","typeString":"type(library Errors)"}},"id":2400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6017:10:12","memberName":"FailedCall","nodeType":"MemberAccess","referencedDeclaration":2450,"src":"6010:17:12","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6010:19:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2402,"nodeType":"RevertStatement","src":"6003:26:12"}]},"id":2404,"nodeType":"IfStatement","src":"5686:354:12","trueBody":{"id":2397,"nodeType":"Block","src":"5713:270:12","statements":[{"AST":{"nativeSrc":"5840:133:12","nodeType":"YulBlock","src":"5840:133:12","statements":[{"nativeSrc":"5858:40:12","nodeType":"YulVariableDeclaration","src":"5858:40:12","value":{"arguments":[{"name":"returndata","nativeSrc":"5887:10:12","nodeType":"YulIdentifier","src":"5887:10:12"}],"functionName":{"name":"mload","nativeSrc":"5881:5:12","nodeType":"YulIdentifier","src":"5881:5:12"},"nativeSrc":"5881:17:12","nodeType":"YulFunctionCall","src":"5881:17:12"},"variables":[{"name":"returndata_size","nativeSrc":"5862:15:12","nodeType":"YulTypedName","src":"5862:15:12","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"5926:2:12","nodeType":"YulLiteral","src":"5926:2:12","type":"","value":"32"},{"name":"returndata","nativeSrc":"5930:10:12","nodeType":"YulIdentifier","src":"5930:10:12"}],"functionName":{"name":"add","nativeSrc":"5922:3:12","nodeType":"YulIdentifier","src":"5922:3:12"},"nativeSrc":"5922:19:12","nodeType":"YulFunctionCall","src":"5922:19:12"},{"name":"returndata_size","nativeSrc":"5943:15:12","nodeType":"YulIdentifier","src":"5943:15:12"}],"functionName":{"name":"revert","nativeSrc":"5915:6:12","nodeType":"YulIdentifier","src":"5915:6:12"},"nativeSrc":"5915:44:12","nodeType":"YulFunctionCall","src":"5915:44:12"},"nativeSrc":"5915:44:12","nodeType":"YulExpressionStatement","src":"5915:44:12"}]},"evmVersion":"paris","externalReferences":[{"declaration":2389,"isOffset":false,"isSlot":false,"src":"5887:10:12","valueSize":1},{"declaration":2389,"isOffset":false,"isSlot":false,"src":"5930:10:12","valueSize":1}],"flags":["memory-safe"],"id":2396,"nodeType":"InlineAssembly","src":"5815:158:12"}]}}]},"documentation":{"id":2387,"nodeType":"StructuredDocumentation","src":"5451:103:12","text":" @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}."},"id":2406,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5568:7:12","nodeType":"FunctionDefinition","parameters":{"id":2390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2389,"mutability":"mutable","name":"returndata","nameLocation":"5589:10:12","nodeType":"VariableDeclaration","scope":2406,"src":"5576:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2388,"name":"bytes","nodeType":"ElementaryTypeName","src":"5576:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5575:25:12"},"returnParameters":{"id":2391,"nodeType":"ParameterList","parameters":[],"src":"5614:0:12"},"scope":2407,"src":"5559:487:12","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":2408,"src":"233:5815:12","usedErrors":[2157],"usedEvents":[]}],"src":"101:5948:12"},"id":12},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[2437]},"id":2438,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2409,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:13"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":2410,"nodeType":"StructuredDocumentation","src":"127:496:13","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":2437,"linearizedBaseContracts":[2437],"name":"Context","nameLocation":"642:7:13","nodeType":"ContractDefinition","nodes":[{"body":{"id":2418,"nodeType":"Block","src":"718:34:13","statements":[{"expression":{"expression":{"id":2415,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:13","memberName":"sender","nodeType":"MemberAccess","src":"735:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2414,"id":2417,"nodeType":"Return","src":"728:17:13"}]},"id":2419,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:13","nodeType":"FunctionDefinition","parameters":{"id":2411,"nodeType":"ParameterList","parameters":[],"src":"675:2:13"},"returnParameters":{"id":2414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2419,"src":"709:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2412,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:13"},"scope":2437,"src":"656:96:13","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2427,"nodeType":"Block","src":"825:32:13","statements":[{"expression":{"expression":{"id":2424,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:13","memberName":"data","nodeType":"MemberAccess","src":"842:8:13","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":2423,"id":2426,"nodeType":"Return","src":"835:15:13"}]},"id":2428,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:13","nodeType":"FunctionDefinition","parameters":{"id":2420,"nodeType":"ParameterList","parameters":[],"src":"775:2:13"},"returnParameters":{"id":2423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2422,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2428,"src":"809:14:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2421,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:13"},"scope":2437,"src":"758:99:13","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2435,"nodeType":"Block","src":"935:25:13","statements":[{"expression":{"hexValue":"30","id":2433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2432,"id":2434,"nodeType":"Return","src":"945:8:13"}]},"id":2436,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:13","nodeType":"FunctionDefinition","parameters":{"id":2429,"nodeType":"ParameterList","parameters":[],"src":"892:2:13"},"returnParameters":{"id":2432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2436,"src":"926:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2430,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:13"},"scope":2437,"src":"863:97:13","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2438,"src":"624:338:13","usedErrors":[],"usedEvents":[]}],"src":"101:862:13"},"id":13},"@openzeppelin/contracts/utils/Errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","exportedSymbols":{"Errors":[2459]},"id":2460,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2439,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"100:24:14"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":2440,"nodeType":"StructuredDocumentation","src":"126:284:14","text":" @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"},"fullyImplemented":true,"id":2459,"linearizedBaseContracts":[2459],"name":"Errors","nameLocation":"419:6:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2441,"nodeType":"StructuredDocumentation","src":"432:94:14","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cf479181","id":2447,"name":"InsufficientBalance","nameLocation":"537:19:14","nodeType":"ErrorDefinition","parameters":{"id":2446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2443,"mutability":"mutable","name":"balance","nameLocation":"565:7:14","nodeType":"VariableDeclaration","scope":2447,"src":"557:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2442,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2445,"mutability":"mutable","name":"needed","nameLocation":"582:6:14","nodeType":"VariableDeclaration","scope":2447,"src":"574:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2444,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:33:14"},"src":"531:59:14"},{"documentation":{"id":2448,"nodeType":"StructuredDocumentation","src":"596:89:14","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"d6bda275","id":2450,"name":"FailedCall","nameLocation":"696:10:14","nodeType":"ErrorDefinition","parameters":{"id":2449,"nodeType":"ParameterList","parameters":[],"src":"706:2:14"},"src":"690:19:14"},{"documentation":{"id":2451,"nodeType":"StructuredDocumentation","src":"715:46:14","text":" @dev The deployment failed."},"errorSelector":"b06ebf3d","id":2453,"name":"FailedDeployment","nameLocation":"772:16:14","nodeType":"ErrorDefinition","parameters":{"id":2452,"nodeType":"ParameterList","parameters":[],"src":"788:2:14"},"src":"766:25:14"},{"documentation":{"id":2454,"nodeType":"StructuredDocumentation","src":"797:58:14","text":" @dev A necessary precompile is missing."},"errorSelector":"42b01bce","id":2458,"name":"MissingPrecompile","nameLocation":"866:17:14","nodeType":"ErrorDefinition","parameters":{"id":2457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2458,"src":"884:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2455,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"883:9:14"},"src":"860:33:14"}],"scope":2460,"src":"411:484:14","usedErrors":[2447,2450,2453,2458],"usedEvents":[]}],"src":"100:796:14"},"id":14},"@openzeppelin/contracts/utils/Pausable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Pausable.sol","exportedSymbols":{"Context":[2437],"Pausable":[2567]},"id":2568,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2461,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:15"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":2463,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2568,"sourceUnit":2438,"src":"128:45:15","symbolAliases":[{"foreign":{"id":2462,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2437,"src":"136:7:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2465,"name":"Context","nameLocations":["645:7:15"],"nodeType":"IdentifierPath","referencedDeclaration":2437,"src":"645:7:15"},"id":2466,"nodeType":"InheritanceSpecifier","src":"645:7:15"}],"canonicalName":"Pausable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2464,"nodeType":"StructuredDocumentation","src":"175:439:15","text":" @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."},"fullyImplemented":true,"id":2567,"linearizedBaseContracts":[2567,2437],"name":"Pausable","nameLocation":"633:8:15","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2468,"mutability":"mutable","name":"_paused","nameLocation":"672:7:15","nodeType":"VariableDeclaration","scope":2567,"src":"659:20:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2467,"name":"bool","nodeType":"ElementaryTypeName","src":"659:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":2469,"nodeType":"StructuredDocumentation","src":"686:73:15","text":" @dev Emitted when the pause is triggered by `account`."},"eventSelector":"62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258","id":2473,"name":"Paused","nameLocation":"770:6:15","nodeType":"EventDefinition","parameters":{"id":2472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2471,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"785:7:15","nodeType":"VariableDeclaration","scope":2473,"src":"777:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2470,"name":"address","nodeType":"ElementaryTypeName","src":"777:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"776:17:15"},"src":"764:30:15"},{"anonymous":false,"documentation":{"id":2474,"nodeType":"StructuredDocumentation","src":"800:70:15","text":" @dev Emitted when the pause is lifted by `account`."},"eventSelector":"5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa","id":2478,"name":"Unpaused","nameLocation":"881:8:15","nodeType":"EventDefinition","parameters":{"id":2477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2476,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"898:7:15","nodeType":"VariableDeclaration","scope":2478,"src":"890:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2475,"name":"address","nodeType":"ElementaryTypeName","src":"890:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"889:17:15"},"src":"875:32:15"},{"documentation":{"id":2479,"nodeType":"StructuredDocumentation","src":"913:76:15","text":" @dev The operation failed because the contract is paused."},"errorSelector":"d93c0665","id":2481,"name":"EnforcedPause","nameLocation":"1000:13:15","nodeType":"ErrorDefinition","parameters":{"id":2480,"nodeType":"ParameterList","parameters":[],"src":"1013:2:15"},"src":"994:22:15"},{"documentation":{"id":2482,"nodeType":"StructuredDocumentation","src":"1022:80:15","text":" @dev The operation failed because the contract is not paused."},"errorSelector":"8dfc202b","id":2484,"name":"ExpectedPause","nameLocation":"1113:13:15","nodeType":"ErrorDefinition","parameters":{"id":2483,"nodeType":"ParameterList","parameters":[],"src":"1126:2:15"},"src":"1107:22:15"},{"body":{"id":2491,"nodeType":"Block","src":"1340:47:15","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2487,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"1350:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1350:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2489,"nodeType":"ExpressionStatement","src":"1350:19:15"},{"id":2490,"nodeType":"PlaceholderStatement","src":"1379:1:15"}]},"documentation":{"id":2485,"nodeType":"StructuredDocumentation","src":"1135:175:15","text":" @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."},"id":2492,"name":"whenNotPaused","nameLocation":"1324:13:15","nodeType":"ModifierDefinition","parameters":{"id":2486,"nodeType":"ParameterList","parameters":[],"src":"1337:2:15"},"src":"1315:72:15","virtual":false,"visibility":"internal"},{"body":{"id":2499,"nodeType":"Block","src":"1587:44:15","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2495,"name":"_requirePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2534,"src":"1597:14:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:16:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2497,"nodeType":"ExpressionStatement","src":"1597:16:15"},{"id":2498,"nodeType":"PlaceholderStatement","src":"1623:1:15"}]},"documentation":{"id":2493,"nodeType":"StructuredDocumentation","src":"1393:167:15","text":" @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."},"id":2500,"name":"whenPaused","nameLocation":"1574:10:15","nodeType":"ModifierDefinition","parameters":{"id":2494,"nodeType":"ParameterList","parameters":[],"src":"1584:2:15"},"src":"1565:66:15","virtual":false,"visibility":"internal"},{"body":{"id":2508,"nodeType":"Block","src":"1779:31:15","statements":[{"expression":{"id":2506,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2468,"src":"1796:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2505,"id":2507,"nodeType":"Return","src":"1789:14:15"}]},"documentation":{"id":2501,"nodeType":"StructuredDocumentation","src":"1637:84:15","text":" @dev Returns true if the contract is paused, and false otherwise."},"functionSelector":"5c975abb","id":2509,"implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"1735:6:15","nodeType":"FunctionDefinition","parameters":{"id":2502,"nodeType":"ParameterList","parameters":[],"src":"1741:2:15"},"returnParameters":{"id":2505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2509,"src":"1773:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2503,"name":"bool","nodeType":"ElementaryTypeName","src":"1773:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1772:6:15"},"scope":2567,"src":"1726:84:15","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":2520,"nodeType":"Block","src":"1929:77:15","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":2513,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2509,"src":"1943:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1943:8:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2519,"nodeType":"IfStatement","src":"1939:61:15","trueBody":{"id":2518,"nodeType":"Block","src":"1953:47:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2515,"name":"EnforcedPause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2481,"src":"1974:13:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1974:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2517,"nodeType":"RevertStatement","src":"1967:22:15"}]}}]},"documentation":{"id":2510,"nodeType":"StructuredDocumentation","src":"1816:57:15","text":" @dev Throws if the contract is paused."},"id":2521,"implemented":true,"kind":"function","modifiers":[],"name":"_requireNotPaused","nameLocation":"1887:17:15","nodeType":"FunctionDefinition","parameters":{"id":2511,"nodeType":"ParameterList","parameters":[],"src":"1904:2:15"},"returnParameters":{"id":2512,"nodeType":"ParameterList","parameters":[],"src":"1929:0:15"},"scope":2567,"src":"1878:128:15","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2533,"nodeType":"Block","src":"2126:78:15","statements":[{"condition":{"id":2527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2140:9:15","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2525,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2509,"src":"2141:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2141:8:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2532,"nodeType":"IfStatement","src":"2136:62:15","trueBody":{"id":2531,"nodeType":"Block","src":"2151:47:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2528,"name":"ExpectedPause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2484,"src":"2172:13:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2172:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2530,"nodeType":"RevertStatement","src":"2165:22:15"}]}}]},"documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"2012:61:15","text":" @dev Throws if the contract is not paused."},"id":2534,"implemented":true,"kind":"function","modifiers":[],"name":"_requirePaused","nameLocation":"2087:14:15","nodeType":"FunctionDefinition","parameters":{"id":2523,"nodeType":"ParameterList","parameters":[],"src":"2101:2:15"},"returnParameters":{"id":2524,"nodeType":"ParameterList","parameters":[],"src":"2126:0:15"},"scope":2567,"src":"2078:126:15","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2549,"nodeType":"Block","src":"2388:66:15","statements":[{"expression":{"id":2542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2540,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2468,"src":"2398:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2408:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2398:14:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2543,"nodeType":"ExpressionStatement","src":"2398:14:15"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2545,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"2434:10:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2544,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"2427:6:15","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2427:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2548,"nodeType":"EmitStatement","src":"2422:25:15"}]},"documentation":{"id":2535,"nodeType":"StructuredDocumentation","src":"2210:124:15","text":" @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."},"id":2550,"implemented":true,"kind":"function","modifiers":[{"id":2538,"kind":"modifierInvocation","modifierName":{"id":2537,"name":"whenNotPaused","nameLocations":["2374:13:15"],"nodeType":"IdentifierPath","referencedDeclaration":2492,"src":"2374:13:15"},"nodeType":"ModifierInvocation","src":"2374:13:15"}],"name":"_pause","nameLocation":"2348:6:15","nodeType":"FunctionDefinition","parameters":{"id":2536,"nodeType":"ParameterList","parameters":[],"src":"2354:2:15"},"returnParameters":{"id":2539,"nodeType":"ParameterList","parameters":[],"src":"2388:0:15"},"scope":2567,"src":"2339:115:15","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2565,"nodeType":"Block","src":"2634:69:15","statements":[{"expression":{"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2556,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2468,"src":"2644:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":2557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2654:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2644:15:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2559,"nodeType":"ExpressionStatement","src":"2644:15:15"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2561,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"2683:10:15","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2683:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2560,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"2674:8:15","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2674:22:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2564,"nodeType":"EmitStatement","src":"2669:27:15"}]},"documentation":{"id":2551,"nodeType":"StructuredDocumentation","src":"2460:121:15","text":" @dev Returns to normal state.\n Requirements:\n - The contract must be paused."},"id":2566,"implemented":true,"kind":"function","modifiers":[{"id":2554,"kind":"modifierInvocation","modifierName":{"id":2553,"name":"whenPaused","nameLocations":["2623:10:15"],"nodeType":"IdentifierPath","referencedDeclaration":2500,"src":"2623:10:15"},"nodeType":"ModifierInvocation","src":"2623:10:15"}],"name":"_unpause","nameLocation":"2595:8:15","nodeType":"FunctionDefinition","parameters":{"id":2552,"nodeType":"ParameterList","parameters":[],"src":"2603:2:15"},"returnParameters":{"id":2555,"nodeType":"ParameterList","parameters":[],"src":"2634:0:15"},"scope":2567,"src":"2586:117:15","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":2568,"src":"615:2090:15","usedErrors":[2481,2484],"usedEvents":[2473,2478]}],"src":"102:2604:15"},"id":15},"@openzeppelin/contracts/utils/ReentrancyGuard.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","exportedSymbols":{"ReentrancyGuard":[2636]},"id":2637,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2569,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:16"},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":2570,"nodeType":"StructuredDocumentation","src":"135:894:16","text":" @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n consider using {ReentrancyGuardTransient} instead.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."},"fullyImplemented":true,"id":2636,"linearizedBaseContracts":[2636],"name":"ReentrancyGuard","nameLocation":"1048:15:16","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":2573,"mutability":"constant","name":"NOT_ENTERED","nameLocation":"1843:11:16","nodeType":"VariableDeclaration","scope":2636,"src":"1818:40:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2571,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":2572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1857:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":2576,"mutability":"constant","name":"ENTERED","nameLocation":"1889:7:16","nodeType":"VariableDeclaration","scope":2636,"src":"1864:36:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2574,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":2575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1899:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":2578,"mutability":"mutable","name":"_status","nameLocation":"1923:7:16","nodeType":"VariableDeclaration","scope":2636,"src":"1907:23:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2577,"name":"uint256","nodeType":"ElementaryTypeName","src":"1907:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"documentation":{"id":2579,"nodeType":"StructuredDocumentation","src":"1937:52:16","text":" @dev Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":2581,"name":"ReentrancyGuardReentrantCall","nameLocation":"2000:28:16","nodeType":"ErrorDefinition","parameters":{"id":2580,"nodeType":"ParameterList","parameters":[],"src":"2028:2:16"},"src":"1994:37:16"},{"body":{"id":2588,"nodeType":"Block","src":"2051:38:16","statements":[{"expression":{"id":2586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2584,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2578,"src":"2061:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2585,"name":"NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"2071:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2061:21:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2587,"nodeType":"ExpressionStatement","src":"2061:21:16"}]},"id":2589,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2582,"nodeType":"ParameterList","parameters":[],"src":"2048:2:16"},"returnParameters":{"id":2583,"nodeType":"ParameterList","parameters":[],"src":"2051:0:16"},"scope":2636,"src":"2037:52:16","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2599,"nodeType":"Block","src":"2490:79:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2592,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2616,"src":"2500:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2500:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2594,"nodeType":"ExpressionStatement","src":"2500:21:16"},{"id":2595,"nodeType":"PlaceholderStatement","src":"2531:1:16"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2596,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2624,"src":"2542:18:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2542:20:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2598,"nodeType":"ExpressionStatement","src":"2542:20:16"}]},"documentation":{"id":2590,"nodeType":"StructuredDocumentation","src":"2095:366:16","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":2600,"name":"nonReentrant","nameLocation":"2475:12:16","nodeType":"ModifierDefinition","parameters":{"id":2591,"nodeType":"ParameterList","parameters":[],"src":"2487:2:16"},"src":"2466:103:16","virtual":false,"visibility":"internal"},{"body":{"id":2615,"nodeType":"Block","src":"2614:268:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2603,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2578,"src":"2702:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2604,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2576,"src":"2713:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2702:18:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2610,"nodeType":"IfStatement","src":"2698:86:16","trueBody":{"id":2609,"nodeType":"Block","src":"2722:62:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2606,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2581,"src":"2743:28:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2743:30:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2608,"nodeType":"RevertStatement","src":"2736:37:16"}]}},{"expression":{"id":2613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2611,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2578,"src":"2858:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2612,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2576,"src":"2868:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2858:17:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2614,"nodeType":"ExpressionStatement","src":"2858:17:16"}]},"id":2616,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"2584:19:16","nodeType":"FunctionDefinition","parameters":{"id":2601,"nodeType":"ParameterList","parameters":[],"src":"2603:2:16"},"returnParameters":{"id":2602,"nodeType":"ParameterList","parameters":[],"src":"2614:0:16"},"scope":2636,"src":"2575:307:16","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":2623,"nodeType":"Block","src":"2926:170:16","statements":[{"expression":{"id":2621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2619,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2578,"src":"3068:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2620,"name":"NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"3078:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3068:21:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2622,"nodeType":"ExpressionStatement","src":"3068:21:16"}]},"id":2624,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"2897:18:16","nodeType":"FunctionDefinition","parameters":{"id":2617,"nodeType":"ParameterList","parameters":[],"src":"2915:2:16"},"returnParameters":{"id":2618,"nodeType":"ParameterList","parameters":[],"src":"2926:0:16"},"scope":2636,"src":"2888:208:16","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":2634,"nodeType":"Block","src":"3339:42:16","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2630,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2578,"src":"3356:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2631,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2576,"src":"3367:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3356:18:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2629,"id":2633,"nodeType":"Return","src":"3349:25:16"}]},"documentation":{"id":2625,"nodeType":"StructuredDocumentation","src":"3102:168:16","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":2635,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"3284:23:16","nodeType":"FunctionDefinition","parameters":{"id":2626,"nodeType":"ParameterList","parameters":[],"src":"3307:2:16"},"returnParameters":{"id":2629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2628,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2635,"src":"3333:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2627,"name":"bool","nodeType":"ElementaryTypeName","src":"3333:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3332:6:16"},"scope":2636,"src":"3275:106:16","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2637,"src":"1030:2353:16","usedErrors":[2581],"usedEvents":[]}],"src":"109:3275:16"},"id":16},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","exportedSymbols":{"ERC165":[2660],"IERC165":[2672]},"id":2661,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2638,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"114:24:17"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"./IERC165.sol","id":2640,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2661,"sourceUnit":2673,"src":"140:38:17","symbolAliases":[{"foreign":{"id":2639,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"148:7:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2642,"name":"IERC165","nameLocations":["688:7:17"],"nodeType":"IdentifierPath","referencedDeclaration":2672,"src":"688:7:17"},"id":2643,"nodeType":"InheritanceSpecifier","src":"688:7:17"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"180:479:17","text":" @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"},"fullyImplemented":true,"id":2660,"linearizedBaseContracts":[2660,2672],"name":"ERC165","nameLocation":"678:6:17","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[2671],"body":{"id":2658,"nodeType":"Block","src":"845:64:17","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":2656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2651,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"862:11:17","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":2653,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"882:7:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$2672_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$2672_$","typeString":"type(contract IERC165)"}],"id":2652,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"877:4:17","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"877:13:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$2672","typeString":"type(contract IERC165)"}},"id":2655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"891:11:17","memberName":"interfaceId","nodeType":"MemberAccess","src":"877:25:17","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"862:40:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2650,"id":2657,"nodeType":"Return","src":"855:47:17"}]},"documentation":{"id":2644,"nodeType":"StructuredDocumentation","src":"702:56:17","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":2659,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"772:17:17","nodeType":"FunctionDefinition","parameters":{"id":2647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2646,"mutability":"mutable","name":"interfaceId","nameLocation":"797:11:17","nodeType":"VariableDeclaration","scope":2659,"src":"790:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2645,"name":"bytes4","nodeType":"ElementaryTypeName","src":"790:6:17","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"789:20:17"},"returnParameters":{"id":2650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2659,"src":"839:4:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2648,"name":"bool","nodeType":"ElementaryTypeName","src":"839:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"838:6:17"},"scope":2660,"src":"763:146:17","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":2661,"src":"660:251:17","usedErrors":[],"usedEvents":[]}],"src":"114:798:17"},"id":17},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[2672]},"id":2673,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2662,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:18"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":2663,"nodeType":"StructuredDocumentation","src":"141:280:18","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":2672,"linearizedBaseContracts":[2672],"name":"IERC165","nameLocation":"432:7:18","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2664,"nodeType":"StructuredDocumentation","src":"446:340:18","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":2671,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"800:17:18","nodeType":"FunctionDefinition","parameters":{"id":2667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2666,"mutability":"mutable","name":"interfaceId","nameLocation":"825:11:18","nodeType":"VariableDeclaration","scope":2671,"src":"818:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2665,"name":"bytes4","nodeType":"ElementaryTypeName","src":"818:6:18","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"817:20:18"},"returnParameters":{"id":2670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2671,"src":"861:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2668,"name":"bool","nodeType":"ElementaryTypeName","src":"861:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"860:6:18"},"scope":2672,"src":"791:76:18","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2673,"src":"422:447:18","usedErrors":[],"usedEvents":[]}],"src":"115:755:18"},"id":18},"contracts/ExampleCrowdSale.sol":{"ast":{"absolutePath":"contracts/ExampleCrowdSale.sol","exportedSymbols":{"CrowdSale":[3561],"ExampleCrowdSale":[2704]},"id":2705,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2674,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:19"},{"absolutePath":"contracts/library/CrowdSale.sol","file":"./library/CrowdSale.sol","id":2676,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2705,"sourceUnit":3562,"src":"85:52:19","symbolAliases":[{"foreign":{"id":2675,"name":"CrowdSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3561,"src":"94:9:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2678,"name":"CrowdSale","nameLocations":["203:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":3561,"src":"203:9:19"},"id":2679,"nodeType":"InheritanceSpecifier","src":"203:9:19"}],"canonicalName":"ExampleCrowdSale","contractDependencies":[],"contractKind":"contract","documentation":{"id":2677,"nodeType":"StructuredDocumentation","src":"139:34:19","text":" @title ExampleCrowdSale"},"fullyImplemented":true,"id":2704,"linearizedBaseContracts":[2704,3561,3610,2636,295,2567,2660,2672,378,2437],"name":"ExampleCrowdSale","nameLocation":"183:16:19","nodeType":"ContractDefinition","nodes":[{"body":{"id":2702,"nodeType":"Block","src":"505:3:19","statements":[]},"id":2703,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2694,"name":"priceFeed_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2681,"src":"430:10:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2695,"name":"token_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2683,"src":"442:6:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2696,"name":"wallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"450:7:19","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":2697,"name":"usdRate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"459:8:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2698,"name":"vestingEndDate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2689,"src":"469:15:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2699,"name":"vestingVault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"486:13:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":2700,"kind":"baseConstructorSpecifier","modifierName":{"id":2693,"name":"CrowdSale","nameLocations":["420:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":3561,"src":"420:9:19"},"nodeType":"ModifierInvocation","src":"420:80:19"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2681,"mutability":"mutable","name":"priceFeed_","nameLocation":"248:10:19","nodeType":"VariableDeclaration","scope":2703,"src":"240:18:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2680,"name":"address","nodeType":"ElementaryTypeName","src":"240:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2683,"mutability":"mutable","name":"token_","nameLocation":"276:6:19","nodeType":"VariableDeclaration","scope":2703,"src":"268:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2682,"name":"address","nodeType":"ElementaryTypeName","src":"268:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2685,"mutability":"mutable","name":"wallet_","nameLocation":"308:7:19","nodeType":"VariableDeclaration","scope":2703,"src":"292:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2684,"name":"address","nodeType":"ElementaryTypeName","src":"292:15:19","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2687,"mutability":"mutable","name":"usdRate_","nameLocation":"333:8:19","nodeType":"VariableDeclaration","scope":2703,"src":"325:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2686,"name":"uint256","nodeType":"ElementaryTypeName","src":"325:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2689,"mutability":"mutable","name":"vestingEndDate_","nameLocation":"359:15:19","nodeType":"VariableDeclaration","scope":2703,"src":"351:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2688,"name":"uint256","nodeType":"ElementaryTypeName","src":"351:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2691,"mutability":"mutable","name":"vestingVault_","nameLocation":"392:13:19","nodeType":"VariableDeclaration","scope":2703,"src":"384:21:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2690,"name":"address","nodeType":"ElementaryTypeName","src":"384:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"230:181:19"},"returnParameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"505:0:19"},"scope":2704,"src":"219:289:19","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":2705,"src":"174:336:19","usedErrors":[305,308,2481,2484,2581],"usedEvents":[317,326,335,2473,2478,3576]}],"src":"59:452:19"},"id":19},"contracts/ExampleToken.sol":{"ast":{"absolutePath":"contracts/ExampleToken.sol","exportedSymbols":{"AccessControl":[295],"ERC165":[2660],"ERC20":[1579],"ExampleToken":[2762]},"id":2763,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2706,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:20"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":2708,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2763,"sourceUnit":1580,"src":"85:70:20","symbolAliases":[{"foreign":{"id":2707,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"94:5:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","file":"@openzeppelin/contracts/access/AccessControl.sol","id":2710,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2763,"sourceUnit":296,"src":"156:81:20","symbolAliases":[{"foreign":{"id":2709,"name":"AccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"165:13:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165.sol","id":2712,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2763,"sourceUnit":2661,"src":"238:80:20","symbolAliases":[{"foreign":{"id":2711,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2660,"src":"247:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2713,"name":"ERC165","nameLocations":["345:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"345:6:20"},"id":2714,"nodeType":"InheritanceSpecifier","src":"345:6:20"},{"baseName":{"id":2715,"name":"ERC20","nameLocations":["353:5:20"],"nodeType":"IdentifierPath","referencedDeclaration":1579,"src":"353:5:20"},"id":2716,"nodeType":"InheritanceSpecifier","src":"353:5:20"},{"baseName":{"id":2717,"name":"AccessControl","nameLocations":["360:13:20"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"360:13:20"},"id":2718,"nodeType":"InheritanceSpecifier","src":"360:13:20"}],"canonicalName":"ExampleToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2762,"linearizedBaseContracts":[2762,295,1579,2660,2672,378,969,1683,1657,2437],"name":"ExampleToken","nameLocation":"329:12:20","nodeType":"ContractDefinition","nodes":[{"body":{"id":2744,"nodeType":"Block","src":"492:166:20","statements":[{"expression":{"arguments":[{"id":2734,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"513:18:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":2735,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"533:10:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"533:12:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2733,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"502:10:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"502:44:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2738,"nodeType":"ExpressionStatement","src":"502:44:20"},{"expression":{"arguments":[{"id":2740,"name":"wallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2726,"src":"634:7:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2741,"name":"supply_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2724,"src":"643:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2739,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1419,"src":"628:5:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":2742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"628:23:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2743,"nodeType":"ExpressionStatement","src":"628:23:20"}]},"id":2745,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2729,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2720,"src":"476:5:20","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":2730,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2722,"src":"483:7:20","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":2731,"kind":"baseConstructorSpecifier","modifierName":{"id":2728,"name":"ERC20","nameLocations":["470:5:20"],"nodeType":"IdentifierPath","referencedDeclaration":1579,"src":"470:5:20"},"nodeType":"ModifierInvocation","src":"470:21:20"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2720,"mutability":"mutable","name":"name_","nameLocation":"406:5:20","nodeType":"VariableDeclaration","scope":2745,"src":"392:19:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2719,"name":"string","nodeType":"ElementaryTypeName","src":"392:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2722,"mutability":"mutable","name":"symbol_","nameLocation":"427:7:20","nodeType":"VariableDeclaration","scope":2745,"src":"413:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2721,"name":"string","nodeType":"ElementaryTypeName","src":"413:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2724,"mutability":"mutable","name":"supply_","nameLocation":"444:7:20","nodeType":"VariableDeclaration","scope":2745,"src":"436:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2723,"name":"uint256","nodeType":"ElementaryTypeName","src":"436:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2726,"mutability":"mutable","name":"wallet_","nameLocation":"461:7:20","nodeType":"VariableDeclaration","scope":2745,"src":"453:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2725,"name":"address","nodeType":"ElementaryTypeName","src":"453:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"391:78:20"},"returnParameters":{"id":2732,"nodeType":"ParameterList","parameters":[],"src":"492:0:20"},"scope":2762,"src":"380:278:20","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[62,2659],"body":{"id":2760,"nodeType":"Block","src":"778:85:20","statements":[{"expression":{"arguments":[{"id":2757,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"819:11:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2755,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"795:5:20","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ExampleToken_$2762_$","typeString":"type(contract super ExampleToken)"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"801:17:20","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":62,"src":"795:23:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":2758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"795:36:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2754,"id":2759,"nodeType":"Return","src":"788:43:20"}]},"functionSelector":"01ffc9a7","id":2761,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"673:17:20","nodeType":"FunctionDefinition","overrides":{"id":2751,"nodeType":"OverrideSpecifier","overrides":[{"id":2749,"name":"ERC165","nameLocations":["740:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"740:6:20"},{"id":2750,"name":"AccessControl","nameLocations":["748:13:20"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"748:13:20"}],"src":"731:31:20"},"parameters":{"id":2748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2747,"mutability":"mutable","name":"interfaceId","nameLocation":"698:11:20","nodeType":"VariableDeclaration","scope":2761,"src":"691:18:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2746,"name":"bytes4","nodeType":"ElementaryTypeName","src":"691:6:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"690:20:20"},"returnParameters":{"id":2754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2753,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2761,"src":"772:4:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2752,"name":"bool","nodeType":"ElementaryTypeName","src":"772:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"771:6:20"},"scope":2762,"src":"664:199:20","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":2763,"src":"320:545:20","usedErrors":[305,308,939,944,949,958,963,968],"usedEvents":[317,326,335,1591,1600]}],"src":"59:807:20"},"id":20},"contracts/ExampleVestingVault.sol":{"ast":{"absolutePath":"contracts/ExampleVestingVault.sol","exportedSymbols":{"ExampleVestingVault":[2781],"IERC20":[1657],"VestingVault":[3944]},"id":2782,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2764,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:21"},{"absolutePath":"contracts/library/VestingVault.sol","file":"./library/VestingVault.sol","id":2766,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2782,"sourceUnit":3945,"src":"85:58:21","symbolAliases":[{"foreign":{"id":2765,"name":"VestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"94:12:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2768,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2782,"sourceUnit":1658,"src":"144:72:21","symbolAliases":[{"foreign":{"id":2767,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"153:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2769,"name":"VestingVault","nameLocations":["250:12:21"],"nodeType":"IdentifierPath","referencedDeclaration":3944,"src":"250:12:21"},"id":2770,"nodeType":"InheritanceSpecifier","src":"250:12:21"}],"canonicalName":"ExampleVestingVault","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2781,"linearizedBaseContracts":[2781,3944,295,2660,2672,378,2437,3665],"name":"ExampleVestingVault","nameLocation":"227:19:21","nodeType":"ContractDefinition","nodes":[{"body":{"id":2779,"nodeType":"Block","src":"317:3:21","statements":[]},"id":2780,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2776,"name":"token_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2773,"src":"309:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}}],"id":2777,"kind":"baseConstructorSpecifier","modifierName":{"id":2775,"name":"VestingVault","nameLocations":["296:12:21"],"nodeType":"IdentifierPath","referencedDeclaration":3944,"src":"296:12:21"},"nodeType":"ModifierInvocation","src":"296:20:21"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2773,"mutability":"mutable","name":"token_","nameLocation":"288:6:21","nodeType":"VariableDeclaration","scope":2780,"src":"281:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":2772,"nodeType":"UserDefinedTypeName","pathNode":{"id":2771,"name":"IERC20","nameLocations":["281:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"281:6:21"},"referencedDeclaration":1657,"src":"281:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"280:15:21"},"returnParameters":{"id":2778,"nodeType":"ParameterList","parameters":[],"src":"317:0:21"},"scope":2781,"src":"269:51:21","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":2782,"src":"218:104:21","usedErrors":[305,308],"usedEvents":[317,326,335,3629,3637]}],"src":"59:264:21"},"id":21},"contracts/ExampleVestingWallet.sol":{"ast":{"absolutePath":"contracts/ExampleVestingWallet.sol","exportedSymbols":{"ExampleVestingWallet":[2803],"VestingWallet":[837]},"id":2804,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2783,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:22"},{"absolutePath":"@openzeppelin/contracts/finance/VestingWallet.sol","file":"@openzeppelin/contracts/finance/VestingWallet.sol","id":2785,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2804,"sourceUnit":838,"src":"85:82:22","symbolAliases":[{"foreign":{"id":2784,"name":"VestingWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":837,"src":"94:13:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2786,"name":"VestingWallet","nameLocations":["202:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":837,"src":"202:13:22"},"id":2787,"nodeType":"InheritanceSpecifier","src":"202:13:22"}],"canonicalName":"ExampleVestingWallet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2803,"linearizedBaseContracts":[2803,837,526,2437],"name":"ExampleVestingWallet","nameLocation":"178:20:22","nodeType":"ContractDefinition","nodes":[{"body":{"id":2801,"nodeType":"Block","src":"418:3:22","statements":[]},"id":2802,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2796,"name":"beneficiaryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2789,"src":"361:18:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2797,"name":"startTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2791,"src":"381:14:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":2798,"name":"durationSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"397:15:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":2799,"kind":"baseConstructorSpecifier","modifierName":{"id":2795,"name":"VestingWallet","nameLocations":["347:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":837,"src":"347:13:22"},"nodeType":"ModifierInvocation","src":"347:66:22"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2789,"mutability":"mutable","name":"beneficiaryAddress","nameLocation":"251:18:22","nodeType":"VariableDeclaration","scope":2802,"src":"243:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2788,"name":"address","nodeType":"ElementaryTypeName","src":"243:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2791,"mutability":"mutable","name":"startTimestamp","nameLocation":"286:14:22","nodeType":"VariableDeclaration","scope":2802,"src":"279:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2790,"name":"uint64","nodeType":"ElementaryTypeName","src":"279:6:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":2793,"mutability":"mutable","name":"durationSeconds","nameLocation":"317:15:22","nodeType":"VariableDeclaration","scope":2802,"src":"310:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2792,"name":"uint64","nodeType":"ElementaryTypeName","src":"310:6:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"233:105:22"},"returnParameters":{"id":2800,"nodeType":"ParameterList","parameters":[],"src":"418:0:22"},"scope":2803,"src":"222:199:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":2804,"src":"169:254:22","usedErrors":[392,397,1695,2447,2450],"usedEvents":[403,547,553]}],"src":"59:365:22"},"id":22},"contracts/MockAggregatorV3.sol":{"ast":{"absolutePath":"contracts/MockAggregatorV3.sol","exportedSymbols":{"AggregatorV3Interface":[2972],"MockAggregatorV3":[2926]},"id":2927,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2805,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"40:24:23"},{"absolutePath":"contracts/library/AggregatorV3Interface.sol","file":"./library/AggregatorV3Interface.sol","id":2806,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2927,"sourceUnit":2973,"src":"66:45:23","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2807,"name":"AggregatorV3Interface","nameLocations":["142:21:23"],"nodeType":"IdentifierPath","referencedDeclaration":2972,"src":"142:21:23"},"id":2808,"nodeType":"InheritanceSpecifier","src":"142:21:23"}],"canonicalName":"MockAggregatorV3","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2926,"linearizedBaseContracts":[2926,2972],"name":"MockAggregatorV3","nameLocation":"122:16:23","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"85bb7d69","id":2810,"mutability":"mutable","name":"answer","nameLocation":"184:6:23","nodeType":"VariableDeclaration","scope":2926,"src":"170:20:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2809,"name":"int256","nodeType":"ElementaryTypeName","src":"170:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"public"},{"constant":false,"functionSelector":"8cd221c9","id":2812,"mutability":"mutable","name":"roundId","nameLocation":"210:7:23","nodeType":"VariableDeclaration","scope":2926,"src":"196:21:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2811,"name":"uint80","nodeType":"ElementaryTypeName","src":"196:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"public"},{"constant":false,"functionSelector":"f21f537d","id":2814,"mutability":"mutable","name":"startedAt","nameLocation":"238:9:23","nodeType":"VariableDeclaration","scope":2926,"src":"223:24:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2813,"name":"uint256","nodeType":"ElementaryTypeName","src":"223:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"7519ab50","id":2816,"mutability":"mutable","name":"updatedAt","nameLocation":"268:9:23","nodeType":"VariableDeclaration","scope":2926,"src":"253:24:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2815,"name":"uint256","nodeType":"ElementaryTypeName","src":"253:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"c22c2499","id":2818,"mutability":"mutable","name":"answeredInRound","nameLocation":"297:15:23","nodeType":"VariableDeclaration","scope":2926,"src":"283:29:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2817,"name":"uint80","nodeType":"ElementaryTypeName","src":"283:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"public"},{"body":{"id":2851,"nodeType":"Block","src":"510:169:23","statements":[{"expression":{"id":2833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2831,"name":"roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2812,"src":"520:7:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2832,"name":"_roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"530:8:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"520:18:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"id":2834,"nodeType":"ExpressionStatement","src":"520:18:23"},{"expression":{"id":2837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2835,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2810,"src":"548:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2836,"name":"_answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"557:7:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"548:16:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":2838,"nodeType":"ExpressionStatement","src":"548:16:23"},{"expression":{"id":2841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2839,"name":"startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"574:9:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2840,"name":"_startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"586:10:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:22:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2842,"nodeType":"ExpressionStatement","src":"574:22:23"},{"expression":{"id":2845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2843,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"606:9:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2844,"name":"_updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2826,"src":"618:10:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"606:22:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2846,"nodeType":"ExpressionStatement","src":"606:22:23"},{"expression":{"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2847,"name":"answeredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2818,"src":"638:15:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2848,"name":"_answeredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"656:16:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"638:34:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"id":2850,"nodeType":"ExpressionStatement","src":"638:34:23"}]},"functionSelector":"4005e681","id":2852,"implemented":true,"kind":"function","modifiers":[],"name":"setLatestRoundData","nameLocation":"328:18:23","nodeType":"FunctionDefinition","parameters":{"id":2829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2820,"mutability":"mutable","name":"_roundId","nameLocation":"363:8:23","nodeType":"VariableDeclaration","scope":2852,"src":"356:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2819,"name":"uint80","nodeType":"ElementaryTypeName","src":"356:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":2822,"mutability":"mutable","name":"_answer","nameLocation":"388:7:23","nodeType":"VariableDeclaration","scope":2852,"src":"381:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2821,"name":"int256","nodeType":"ElementaryTypeName","src":"381:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":2824,"mutability":"mutable","name":"_startedAt","nameLocation":"413:10:23","nodeType":"VariableDeclaration","scope":2852,"src":"405:18:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2823,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2826,"mutability":"mutable","name":"_updatedAt","nameLocation":"441:10:23","nodeType":"VariableDeclaration","scope":2852,"src":"433:18:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2825,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2828,"mutability":"mutable","name":"_answeredInRound","nameLocation":"468:16:23","nodeType":"VariableDeclaration","scope":2852,"src":"461:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2827,"name":"uint80","nodeType":"ElementaryTypeName","src":"461:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"346:144:23"},"returnParameters":{"id":2830,"nodeType":"ParameterList","parameters":[],"src":"510:0:23"},"scope":2926,"src":"319:360:23","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2971],"body":{"id":2873,"nodeType":"Block","src":"786:80:23","statements":[{"expression":{"components":[{"id":2866,"name":"roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2812,"src":"804:7:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},{"id":2867,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2810,"src":"813:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":2868,"name":"startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"821:9:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2869,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"832:9:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2870,"name":"answeredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2818,"src":"843:15:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}}],"id":2871,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"803:56:23","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"functionReturnParameters":2865,"id":2872,"nodeType":"Return","src":"796:63:23"}]},"functionSelector":"feaf968c","id":2874,"implemented":true,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"694:15:23","nodeType":"FunctionDefinition","overrides":{"id":2854,"nodeType":"OverrideSpecifier","overrides":[],"src":"726:8:23"},"parameters":{"id":2853,"nodeType":"ParameterList","parameters":[],"src":"709:2:23"},"returnParameters":{"id":2865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2856,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2874,"src":"744:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2855,"name":"uint80","nodeType":"ElementaryTypeName","src":"744:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":2858,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2874,"src":"752:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2857,"name":"int256","nodeType":"ElementaryTypeName","src":"752:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":2860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2874,"src":"760:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2859,"name":"uint256","nodeType":"ElementaryTypeName","src":"760:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2874,"src":"769:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2861,"name":"uint256","nodeType":"ElementaryTypeName","src":"769:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2874,"src":"778:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2863,"name":"uint80","nodeType":"ElementaryTypeName","src":"778:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"743:42:23"},"scope":2926,"src":"685:181:23","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2958],"body":{"id":2897,"nodeType":"Block","src":"985:81:23","statements":[{"expression":{"components":[{"id":2890,"name":"_roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2876,"src":"1003:8:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},{"id":2891,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2810,"src":"1013:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":2892,"name":"startedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"1021:9:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2893,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"1032:9:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2894,"name":"answeredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2818,"src":"1043:15:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}}],"id":2895,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1002:57:23","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"functionReturnParameters":2889,"id":2896,"nodeType":"Return","src":"995:64:23"}]},"functionSelector":"9a6fc8f5","id":2898,"implemented":true,"kind":"function","modifiers":[],"name":"getRoundData","nameLocation":"881:12:23","nodeType":"FunctionDefinition","overrides":{"id":2878,"nodeType":"OverrideSpecifier","overrides":[],"src":"925:8:23"},"parameters":{"id":2877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2876,"mutability":"mutable","name":"_roundId","nameLocation":"901:8:23","nodeType":"VariableDeclaration","scope":2898,"src":"894:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2875,"name":"uint80","nodeType":"ElementaryTypeName","src":"894:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"893:17:23"},"returnParameters":{"id":2889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2898,"src":"943:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2879,"name":"uint80","nodeType":"ElementaryTypeName","src":"943:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":2882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2898,"src":"951:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2881,"name":"int256","nodeType":"ElementaryTypeName","src":"951:6:23","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":2884,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2898,"src":"959:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2883,"name":"uint256","nodeType":"ElementaryTypeName","src":"959:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2886,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2898,"src":"968:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2885,"name":"uint256","nodeType":"ElementaryTypeName","src":"968:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2898,"src":"977:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2887,"name":"uint80","nodeType":"ElementaryTypeName","src":"977:6:23","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"942:42:23"},"scope":2926,"src":"872:194:23","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2933],"body":{"id":2906,"nodeType":"Block","src":"1131:25:23","statements":[{"expression":{"hexValue":"38","id":2904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1148:1:23","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":2903,"id":2905,"nodeType":"Return","src":"1141:8:23"}]},"functionSelector":"313ce567","id":2907,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1081:8:23","nodeType":"FunctionDefinition","overrides":{"id":2900,"nodeType":"OverrideSpecifier","overrides":[],"src":"1106:8:23"},"parameters":{"id":2899,"nodeType":"ParameterList","parameters":[],"src":"1089:2:23"},"returnParameters":{"id":2903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2902,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2907,"src":"1124:5:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2901,"name":"uint8","nodeType":"ElementaryTypeName","src":"1124:5:23","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1123:7:23"},"scope":2926,"src":"1072:84:23","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[2938],"body":{"id":2915,"nodeType":"Block","src":"1232:41:23","statements":[{"expression":{"hexValue":"4d6f636b2041676772656761746f72","id":2913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1249:17:23","typeDescriptions":{"typeIdentifier":"t_stringliteral_879fb8fcbf1b3d58d48dc5c2bc1619e1d70622308c803bd05154300da454e5d6","typeString":"literal_string \"Mock Aggregator\""},"value":"Mock Aggregator"},"functionReturnParameters":2912,"id":2914,"nodeType":"Return","src":"1242:24:23"}]},"functionSelector":"7284e416","id":2916,"implemented":true,"kind":"function","modifiers":[],"name":"description","nameLocation":"1171:11:23","nodeType":"FunctionDefinition","overrides":{"id":2909,"nodeType":"OverrideSpecifier","overrides":[],"src":"1199:8:23"},"parameters":{"id":2908,"nodeType":"ParameterList","parameters":[],"src":"1182:2:23"},"returnParameters":{"id":2912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2911,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2916,"src":"1217:13:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2910,"name":"string","nodeType":"ElementaryTypeName","src":"1217:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1216:15:23"},"scope":2926,"src":"1162:111:23","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[2943],"body":{"id":2924,"nodeType":"Block","src":"1339:25:23","statements":[{"expression":{"hexValue":"31","id":2922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1356:1:23","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"functionReturnParameters":2921,"id":2923,"nodeType":"Return","src":"1349:8:23"}]},"functionSelector":"54fd4d50","id":2925,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"1288:7:23","nodeType":"FunctionDefinition","overrides":{"id":2918,"nodeType":"OverrideSpecifier","overrides":[],"src":"1312:8:23"},"parameters":{"id":2917,"nodeType":"ParameterList","parameters":[],"src":"1295:2:23"},"returnParameters":{"id":2921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2925,"src":"1330:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2919,"name":"uint256","nodeType":"ElementaryTypeName","src":"1330:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1329:9:23"},"scope":2926,"src":"1279:85:23","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":2927,"src":"113:1253:23","usedErrors":[],"usedEvents":[]}],"src":"40:1327:23"},"id":23},"contracts/library/AggregatorV3Interface.sol":{"ast":{"absolutePath":"contracts/library/AggregatorV3Interface.sol","exportedSymbols":{"AggregatorV3Interface":[2972]},"id":2973,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2928,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"168:24:24"},{"abstract":false,"baseContracts":[],"canonicalName":"AggregatorV3Interface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":2972,"linearizedBaseContracts":[2972],"name":"AggregatorV3Interface","nameLocation":"204:21:24","nodeType":"ContractDefinition","nodes":[{"functionSelector":"313ce567","id":2933,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"241:8:24","nodeType":"FunctionDefinition","parameters":{"id":2929,"nodeType":"ParameterList","parameters":[],"src":"249:2:24"},"returnParameters":{"id":2932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2933,"src":"275:5:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2930,"name":"uint8","nodeType":"ElementaryTypeName","src":"275:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"274:7:24"},"scope":2972,"src":"232:50:24","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7284e416","id":2938,"implemented":false,"kind":"function","modifiers":[],"name":"description","nameLocation":"297:11:24","nodeType":"FunctionDefinition","parameters":{"id":2934,"nodeType":"ParameterList","parameters":[],"src":"308:2:24"},"returnParameters":{"id":2937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2938,"src":"334:13:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2935,"name":"string","nodeType":"ElementaryTypeName","src":"334:6:24","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"333:15:24"},"scope":2972,"src":"288:61:24","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"54fd4d50","id":2943,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"364:7:24","nodeType":"FunctionDefinition","parameters":{"id":2939,"nodeType":"ParameterList","parameters":[],"src":"371:2:24"},"returnParameters":{"id":2942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2941,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2943,"src":"397:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2940,"name":"uint256","nodeType":"ElementaryTypeName","src":"397:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"396:9:24"},"scope":2972,"src":"355:51:24","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9a6fc8f5","id":2958,"implemented":false,"kind":"function","modifiers":[],"name":"getRoundData","nameLocation":"638:12:24","nodeType":"FunctionDefinition","parameters":{"id":2946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2945,"mutability":"mutable","name":"_roundId","nameLocation":"658:8:24","nodeType":"VariableDeclaration","scope":2958,"src":"651:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2944,"name":"uint80","nodeType":"ElementaryTypeName","src":"651:6:24","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"650:17:24"},"returnParameters":{"id":2957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2948,"mutability":"mutable","name":"roundId","nameLocation":"722:7:24","nodeType":"VariableDeclaration","scope":2958,"src":"715:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2947,"name":"uint80","nodeType":"ElementaryTypeName","src":"715:6:24","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":2950,"mutability":"mutable","name":"answer","nameLocation":"738:6:24","nodeType":"VariableDeclaration","scope":2958,"src":"731:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2949,"name":"int256","nodeType":"ElementaryTypeName","src":"731:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":2952,"mutability":"mutable","name":"startedAt","nameLocation":"754:9:24","nodeType":"VariableDeclaration","scope":2958,"src":"746:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2951,"name":"uint256","nodeType":"ElementaryTypeName","src":"746:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2954,"mutability":"mutable","name":"updatedAt","nameLocation":"773:9:24","nodeType":"VariableDeclaration","scope":2958,"src":"765:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2953,"name":"uint256","nodeType":"ElementaryTypeName","src":"765:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2956,"mutability":"mutable","name":"answeredInRound","nameLocation":"791:15:24","nodeType":"VariableDeclaration","scope":2958,"src":"784:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2955,"name":"uint80","nodeType":"ElementaryTypeName","src":"784:6:24","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"714:93:24"},"scope":2972,"src":"629:179:24","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"feaf968c","id":2971,"implemented":false,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"823:15:24","nodeType":"FunctionDefinition","parameters":{"id":2959,"nodeType":"ParameterList","parameters":[],"src":"838:2:24"},"returnParameters":{"id":2970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2961,"mutability":"mutable","name":"roundId","nameLocation":"895:7:24","nodeType":"VariableDeclaration","scope":2971,"src":"888:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2960,"name":"uint80","nodeType":"ElementaryTypeName","src":"888:6:24","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":2963,"mutability":"mutable","name":"answer","nameLocation":"911:6:24","nodeType":"VariableDeclaration","scope":2971,"src":"904:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2962,"name":"int256","nodeType":"ElementaryTypeName","src":"904:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":2965,"mutability":"mutable","name":"startedAt","nameLocation":"927:9:24","nodeType":"VariableDeclaration","scope":2971,"src":"919:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2964,"name":"uint256","nodeType":"ElementaryTypeName","src":"919:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2967,"mutability":"mutable","name":"updatedAt","nameLocation":"946:9:24","nodeType":"VariableDeclaration","scope":2971,"src":"938:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2966,"name":"uint256","nodeType":"ElementaryTypeName","src":"938:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2969,"mutability":"mutable","name":"answeredInRound","nameLocation":"964:15:24","nodeType":"VariableDeclaration","scope":2971,"src":"957:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":2968,"name":"uint80","nodeType":"ElementaryTypeName","src":"957:6:24","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"887:93:24"},"scope":2972,"src":"814:167:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2973,"src":"194:789:24","usedErrors":[],"usedEvents":[]}],"src":"168:816:24"},"id":24},"contracts/library/CrowdSale.sol":{"ast":{"absolutePath":"contracts/library/CrowdSale.sol","exportedSymbols":{"AccessControl":[295],"AggregatorV3Interface":[2972],"Context":[2437],"CrowdSale":[3561],"ERC165":[2660],"ERC20":[1579],"ICrowdSale":[3610],"IERC20":[1657],"Pausable":[2567],"ReentrancyGuard":[2636],"VestingVault":[3944]},"id":3562,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":2974,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:25"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"@openzeppelin/contracts/utils/Context.sol","id":2976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":2438,"src":"85:68:25","symbolAliases":[{"foreign":{"id":2975,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2437,"src":"94:7:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":2978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":1580,"src":"154:70:25","symbolAliases":[{"foreign":{"id":2977,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"163:5:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2980,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":1658,"src":"225:72:25","symbolAliases":[{"foreign":{"id":2979,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"234:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Pausable.sol","file":"@openzeppelin/contracts/utils/Pausable.sol","id":2982,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":2568,"src":"298:70:25","symbolAliases":[{"foreign":{"id":2981,"name":"Pausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2567,"src":"307:8:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","file":"@openzeppelin/contracts/access/AccessControl.sol","id":2984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":296,"src":"369:81:25","symbolAliases":[{"foreign":{"id":2983,"name":"AccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"378:13:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165.sol","id":2986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":2661,"src":"451:80:25","symbolAliases":[{"foreign":{"id":2985,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2660,"src":"460:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","id":2988,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":2637,"src":"532:84:25","symbolAliases":[{"foreign":{"id":2987,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2636,"src":"541:15:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/library/AggregatorV3Interface.sol","file":"./AggregatorV3Interface.sol","id":2990,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":2973,"src":"617:68:25","symbolAliases":[{"foreign":{"id":2989,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2972,"src":"626:21:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/library/VestingVault.sol","file":"./VestingVault.sol","id":2992,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":3945,"src":"686:50:25","symbolAliases":[{"foreign":{"id":2991,"name":"VestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"695:12:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/library/ICrowdSale.sol","file":"./ICrowdSale.sol","id":2994,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3562,"sourceUnit":3611,"src":"737:46:25","symbolAliases":[{"foreign":{"id":2993,"name":"ICrowdSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3610,"src":"746:10:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2996,"name":"Context","nameLocations":["835:7:25"],"nodeType":"IdentifierPath","referencedDeclaration":2437,"src":"835:7:25"},"id":2997,"nodeType":"InheritanceSpecifier","src":"835:7:25"},{"baseName":{"id":2998,"name":"ERC165","nameLocations":["844:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"844:6:25"},"id":2999,"nodeType":"InheritanceSpecifier","src":"844:6:25"},{"baseName":{"id":3000,"name":"Pausable","nameLocations":["852:8:25"],"nodeType":"IdentifierPath","referencedDeclaration":2567,"src":"852:8:25"},"id":3001,"nodeType":"InheritanceSpecifier","src":"852:8:25"},{"baseName":{"id":3002,"name":"AccessControl","nameLocations":["862:13:25"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"862:13:25"},"id":3003,"nodeType":"InheritanceSpecifier","src":"862:13:25"},{"baseName":{"id":3004,"name":"ReentrancyGuard","nameLocations":["877:15:25"],"nodeType":"IdentifierPath","referencedDeclaration":2636,"src":"877:15:25"},"id":3005,"nodeType":"InheritanceSpecifier","src":"877:15:25"},{"baseName":{"id":3006,"name":"ICrowdSale","nameLocations":["894:10:25"],"nodeType":"IdentifierPath","referencedDeclaration":3610,"src":"894:10:25"},"id":3007,"nodeType":"InheritanceSpecifier","src":"894:10:25"}],"canonicalName":"CrowdSale","contractDependencies":[],"contractKind":"contract","documentation":{"id":2995,"nodeType":"StructuredDocumentation","src":"785:27:25","text":" @title CrowdSale"},"fullyImplemented":true,"id":3561,"linearizedBaseContracts":[3561,3610,2636,295,2567,2660,2672,378,2437],"name":"CrowdSale","nameLocation":"822:9:25","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"7a3226ec","id":3012,"mutability":"constant","name":"WHITELISTED_ROLE","nameLocation":"935:16:25","nodeType":"VariableDeclaration","scope":3561,"src":"911:72:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3008,"name":"bytes32","nodeType":"ElementaryTypeName","src":"911:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"57484954454c49535445445f524f4c45","id":3010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"964:18:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49","typeString":"literal_string \"WHITELISTED_ROLE\""},"value":"WHITELISTED_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b49","typeString":"literal_string \"WHITELISTED_ROLE\""}],"id":3009,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"954:9:25","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"954:29:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":3015,"mutability":"mutable","name":"_token","nameLocation":"1033:6:25","nodeType":"VariableDeclaration","scope":3561,"src":"1018:21:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3014,"nodeType":"UserDefinedTypeName","pathNode":{"id":3013,"name":"IERC20","nameLocations":["1018:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"1018:6:25"},"referencedDeclaration":1657,"src":"1018:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":3018,"mutability":"mutable","name":"priceFeed","nameLocation":"1203:9:25","nodeType":"VariableDeclaration","scope":3561,"src":"1172:40:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"},"typeName":{"id":3017,"nodeType":"UserDefinedTypeName","pathNode":{"id":3016,"name":"AggregatorV3Interface","nameLocations":["1172:21:25"],"nodeType":"IdentifierPath","referencedDeclaration":2972,"src":"1172:21:25"},"referencedDeclaration":2972,"src":"1172:21:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":3020,"mutability":"mutable","name":"_usdRate","nameLocation":"1271:8:25","nodeType":"VariableDeclaration","scope":3561,"src":"1255:24:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3019,"name":"uint256","nodeType":"ElementaryTypeName","src":"1255:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":3022,"mutability":"mutable","name":"_wallet","nameLocation":"1351:7:25","nodeType":"VariableDeclaration","scope":3561,"src":"1327:31:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3021,"name":"address","nodeType":"ElementaryTypeName","src":"1327:15:25","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"private"},{"constant":false,"id":3024,"mutability":"mutable","name":"_fundsRaised","nameLocation":"1409:12:25","nodeType":"VariableDeclaration","scope":3561,"src":"1393:28:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3023,"name":"uint256","nodeType":"ElementaryTypeName","src":"1393:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":3026,"mutability":"mutable","name":"_vestingEndDate","nameLocation":"1468:15:25","nodeType":"VariableDeclaration","scope":3561,"src":"1452:31:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3025,"name":"uint256","nodeType":"ElementaryTypeName","src":"1452:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":3029,"mutability":"mutable","name":"_vestingVault","nameLocation":"1532:13:25","nodeType":"VariableDeclaration","scope":3561,"src":"1511:34:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"},"typeName":{"id":3028,"nodeType":"UserDefinedTypeName","pathNode":{"id":3027,"name":"VestingVault","nameLocations":["1511:12:25"],"nodeType":"IdentifierPath","referencedDeclaration":3944,"src":"1511:12:25"},"referencedDeclaration":3944,"src":"1511:12:25","typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}},"visibility":"private"},{"canonicalName":"CrowdSale.Vesting","id":3034,"members":[{"constant":false,"id":3031,"mutability":"mutable","name":"amount","nameLocation":"1585:6:25","nodeType":"VariableDeclaration","scope":3034,"src":"1577:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3030,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3033,"mutability":"mutable","name":"cliff","nameLocation":"1609:5:25","nodeType":"VariableDeclaration","scope":3034,"src":"1601:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3032,"name":"uint256","nodeType":"ElementaryTypeName","src":"1601:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Vesting","nameLocation":"1559:7:25","nodeType":"StructDefinition","scope":3561,"src":"1552:69:25","visibility":"public"},{"constant":false,"id":3039,"mutability":"mutable","name":"_vested","nameLocation":"1703:7:25","nodeType":"VariableDeclaration","scope":3561,"src":"1667:43:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Vesting_$3034_storage_$","typeString":"mapping(address => struct CrowdSale.Vesting)"},"typeName":{"id":3038,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3035,"name":"address","nodeType":"ElementaryTypeName","src":"1675:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1667:27:25","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Vesting_$3034_storage_$","typeString":"mapping(address => struct CrowdSale.Vesting)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3037,"nodeType":"UserDefinedTypeName","pathNode":{"id":3036,"name":"Vesting","nameLocations":["1686:7:25"],"nodeType":"IdentifierPath","referencedDeclaration":3034,"src":"1686:7:25"},"referencedDeclaration":3034,"src":"1686:7:25","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3034_storage_ptr","typeString":"struct CrowdSale.Vesting"}}},"visibility":"private"},{"body":{"id":3110,"nodeType":"Block","src":"1910:460:25","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3055,"name":"wallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"1928:7:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1947:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1939:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3056,"name":"address","nodeType":"ElementaryTypeName","src":"1939:7:25","typeDescriptions":{}}},"id":3059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1939:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1928:21:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43726f776473616c653a2077616c6c657420697320746865207a65726f2061646472657373","id":3061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1951:39:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_e2b432b30cf592332baa824ba45b03380bf314917ec1eb0e2522d19fb933b9f6","typeString":"literal_string \"Crowdsale: wallet is the zero address\""},"value":"Crowdsale: wallet is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e2b432b30cf592332baa824ba45b03380bf314917ec1eb0e2522d19fb933b9f6","typeString":"literal_string \"Crowdsale: wallet is the zero address\""}],"id":3054,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1920:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1920:71:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3063,"nodeType":"ExpressionStatement","src":"1920:71:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3065,"name":"token_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3043,"src":"2009:6:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2027:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2019:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"2019:7:25","typeDescriptions":{}}},"id":3069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2019:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2009:20:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43726f776473616c653a20746f6b656e20697320746865207a65726f2061646472657373","id":3071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2031:38:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_64ba396754921ac5cdc6388a09272386edd92a5c198850f31a7c165ba7c79b82","typeString":"literal_string \"Crowdsale: token is the zero address\""},"value":"Crowdsale: token is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64ba396754921ac5cdc6388a09272386edd92a5c198850f31a7c165ba7c79b82","typeString":"literal_string \"Crowdsale: token is the zero address\""}],"id":3064,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2001:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2001:69:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3073,"nodeType":"ExpressionStatement","src":"2001:69:25"},{"expression":{"arguments":[{"id":3075,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"2092:18:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3076,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2112:3:25","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2116:6:25","memberName":"sender","nodeType":"MemberAccess","src":"2112:10:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3074,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"2081:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":3078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3079,"nodeType":"ExpressionStatement","src":"2081:42:25"},{"expression":{"id":3084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3080,"name":"priceFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"2133:9:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3082,"name":"priceFeed_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"2167:10:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3081,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2972,"src":"2145:21:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AggregatorV3Interface_$2972_$","typeString":"type(contract AggregatorV3Interface)"}},"id":3083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2145:33:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}},"src":"2133:45:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}},"id":3085,"nodeType":"ExpressionStatement","src":"2133:45:25"},{"expression":{"id":3090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3086,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"2188:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3088,"name":"token_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3043,"src":"2204:6:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3087,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"2197:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1657_$","typeString":"type(contract IERC20)"}},"id":3089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2197:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"src":"2188:23:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":3091,"nodeType":"ExpressionStatement","src":"2188:23:25"},{"expression":{"id":3094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3092,"name":"_wallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"2221:7:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3093,"name":"wallet_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"2231:7:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2221:17:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3095,"nodeType":"ExpressionStatement","src":"2221:17:25"},{"expression":{"id":3098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3096,"name":"_usdRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"2248:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3097,"name":"usdRate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3047,"src":"2259:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2248:19:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3099,"nodeType":"ExpressionStatement","src":"2248:19:25"},{"expression":{"id":3102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3100,"name":"_vestingEndDate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3026,"src":"2277:15:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3101,"name":"vestingEndDate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3049,"src":"2295:15:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2277:33:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3103,"nodeType":"ExpressionStatement","src":"2277:33:25"},{"expression":{"id":3108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3104,"name":"_vestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3029,"src":"2320:13:25","typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3106,"name":"vestingVault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3051,"src":"2349:13:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3105,"name":"VestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"2336:12:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VestingVault_$3944_$","typeString":"type(contract VestingVault)"}},"id":3107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2336:27:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}},"src":"2320:43:25","typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}},"id":3109,"nodeType":"ExpressionStatement","src":"2320:43:25"}]},"id":3111,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3041,"mutability":"mutable","name":"priceFeed_","nameLocation":"1746:10:25","nodeType":"VariableDeclaration","scope":3111,"src":"1738:18:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3040,"name":"address","nodeType":"ElementaryTypeName","src":"1738:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3043,"mutability":"mutable","name":"token_","nameLocation":"1774:6:25","nodeType":"VariableDeclaration","scope":3111,"src":"1766:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3042,"name":"address","nodeType":"ElementaryTypeName","src":"1766:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3045,"mutability":"mutable","name":"wallet_","nameLocation":"1806:7:25","nodeType":"VariableDeclaration","scope":3111,"src":"1790:23:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3044,"name":"address","nodeType":"ElementaryTypeName","src":"1790:15:25","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3047,"mutability":"mutable","name":"usdRate_","nameLocation":"1831:8:25","nodeType":"VariableDeclaration","scope":3111,"src":"1823:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3046,"name":"uint256","nodeType":"ElementaryTypeName","src":"1823:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3049,"mutability":"mutable","name":"vestingEndDate_","nameLocation":"1857:15:25","nodeType":"VariableDeclaration","scope":3111,"src":"1849:23:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3048,"name":"uint256","nodeType":"ElementaryTypeName","src":"1849:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3051,"mutability":"mutable","name":"vestingVault_","nameLocation":"1890:13:25","nodeType":"VariableDeclaration","scope":3111,"src":"1882:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3050,"name":"address","nodeType":"ElementaryTypeName","src":"1882:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1728:181:25"},"returnParameters":{"id":3053,"nodeType":"ParameterList","parameters":[],"src":"1910:0:25"},"scope":3561,"src":"1717:653:25","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[62,2659],"body":{"id":3140,"nodeType":"Block","src":"2490:189:25","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3121,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3113,"src":"2507:11:25","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":3123,"name":"ICrowdSale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3610,"src":"2527:10:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICrowdSale_$3610_$","typeString":"type(contract ICrowdSale)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICrowdSale_$3610_$","typeString":"type(contract ICrowdSale)"}],"id":3122,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2522:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2522:16:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICrowdSale_$3610","typeString":"type(contract ICrowdSale)"}},"id":3125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2539:11:25","memberName":"interfaceId","nodeType":"MemberAccess","src":"2522:28:25","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2507:43:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3127,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3113,"src":"2554:11:25","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":3129,"name":"Pausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2567,"src":"2574:8:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Pausable_$2567_$","typeString":"type(contract Pausable)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_Pausable_$2567_$","typeString":"type(contract Pausable)"}],"id":3128,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2569:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2569:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_Pausable_$2567","typeString":"type(contract Pausable)"}},"id":3131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2584:11:25","memberName":"interfaceId","nodeType":"MemberAccess","src":"2569:26:25","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2554:41:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2507:88:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":3136,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3113,"src":"2635:11:25","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":3134,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2611:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_CrowdSale_$3561_$","typeString":"type(contract super CrowdSale)"}},"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2617:17:25","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":62,"src":"2611:23:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":3137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2611:36:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2507:140:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3120,"id":3139,"nodeType":"Return","src":"2500:147:25"}]},"functionSelector":"01ffc9a7","id":3141,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2385:17:25","nodeType":"FunctionDefinition","overrides":{"id":3117,"nodeType":"OverrideSpecifier","overrides":[{"id":3115,"name":"ERC165","nameLocations":["2452:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"2452:6:25"},{"id":3116,"name":"AccessControl","nameLocations":["2460:13:25"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"2460:13:25"}],"src":"2443:31:25"},"parameters":{"id":3114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3113,"mutability":"mutable","name":"interfaceId","nameLocation":"2410:11:25","nodeType":"VariableDeclaration","scope":3141,"src":"2403:18:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3112,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2403:6:25","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2402:20:25"},"returnParameters":{"id":3120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3119,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3141,"src":"2484:4:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3118,"name":"bool","nodeType":"ElementaryTypeName","src":"2484:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2483:6:25"},"scope":3561,"src":"2376:303:25","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":3150,"nodeType":"Block","src":"3230:40:25","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3146,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"3250:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3250:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3145,"name":"buyTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"3240:9:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3240:23:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3149,"nodeType":"ExpressionStatement","src":"3240:23:25"}]},"documentation":{"id":3142,"nodeType":"StructuredDocumentation","src":"2685:512:25","text":" @dev executed on a call to the contract if none of the other functions match the given function signature,\n or if no data was supplied at all and there is no receive Ether function\n Note that other contracts will transfer funds with a base gas stipend\n of 2300, which is not enough to call buyTokens. Consider calling\n buyTokens directly when purchasing tokens from a contract.\n Learn more: https://docs.soliditylang.org/en/latest/contracts.html#fallback-function"},"id":3151,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3143,"nodeType":"ParameterList","parameters":[],"src":"3210:2:25"},"returnParameters":{"id":3144,"nodeType":"ParameterList","parameters":[],"src":"3230:0:25"},"scope":3561,"src":"3202:68:25","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":3160,"nodeType":"Block","src":"3701:40:25","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3156,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"3721:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3721:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3155,"name":"buyTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"3711:9:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3711:23:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3159,"nodeType":"ExpressionStatement","src":"3711:23:25"}]},"documentation":{"id":3152,"nodeType":"StructuredDocumentation","src":"3276:393:25","text":" @dev is executed on a call to the contract with empty calldata\n Note that other contracts will transfer funds with a base gas stipend\n of 2300, which is not enough to call buyTokens. Consider calling\n buyTokens directly when purchasing tokens from a contract.\n Learn more: https://docs.soliditylang.org/en/latest/contracts.html#receive-ether-function"},"id":3161,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3153,"nodeType":"ParameterList","parameters":[],"src":"3681:2:25"},"returnParameters":{"id":3154,"nodeType":"ParameterList","parameters":[],"src":"3701:0:25"},"scope":3561,"src":"3674:67:25","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":3170,"nodeType":"Block","src":"3986:25:25","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3167,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2550,"src":"3996:6:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3996:8:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3169,"nodeType":"ExpressionStatement","src":"3996:8:25"}]},"documentation":{"id":3162,"nodeType":"StructuredDocumentation","src":"3747:196:25","text":" @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused.\n - The sender of the transaction must have the DEFAULT_ADMIN_ROLE"},"functionSelector":"8456cb59","id":3171,"implemented":true,"kind":"function","modifiers":[{"id":3165,"kind":"modifierInvocation","modifierName":{"id":3164,"name":"whenNotPaused","nameLocations":["3972:13:25"],"nodeType":"IdentifierPath","referencedDeclaration":2492,"src":"3972:13:25"},"nodeType":"ModifierInvocation","src":"3972:13:25"}],"name":"pause","nameLocation":"3957:5:25","nodeType":"FunctionDefinition","parameters":{"id":3163,"nodeType":"ParameterList","parameters":[],"src":"3962:2:25"},"returnParameters":{"id":3166,"nodeType":"ParameterList","parameters":[],"src":"3986:0:25"},"scope":3561,"src":"3948:63:25","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3180,"nodeType":"Block","src":"4252:27:25","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3177,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2566,"src":"4262:8:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4262:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3179,"nodeType":"ExpressionStatement","src":"4262:10:25"}]},"documentation":{"id":3172,"nodeType":"StructuredDocumentation","src":"4017:193:25","text":" @dev Returns to normal state.\n Requirements:\n - The contract must be paused.\n - The sender of the transaction must have the DEFAULT_ADMIN_ROLE"},"functionSelector":"3f4ba83a","id":3181,"implemented":true,"kind":"function","modifiers":[{"id":3175,"kind":"modifierInvocation","modifierName":{"id":3174,"name":"whenPaused","nameLocations":["4241:10:25"],"nodeType":"IdentifierPath","referencedDeclaration":2500,"src":"4241:10:25"},"nodeType":"ModifierInvocation","src":"4241:10:25"}],"name":"unpause","nameLocation":"4224:7:25","nodeType":"FunctionDefinition","parameters":{"id":3173,"nodeType":"ParameterList","parameters":[],"src":"4231:2:25"},"returnParameters":{"id":3176,"nodeType":"ParameterList","parameters":[],"src":"4252:0:25"},"scope":3561,"src":"4215:64:25","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3582],"body":{"id":3191,"nodeType":"Block","src":"4408:30:25","statements":[{"expression":{"id":3189,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"4425:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"functionReturnParameters":3188,"id":3190,"nodeType":"Return","src":"4418:13:25"}]},"documentation":{"id":3182,"nodeType":"StructuredDocumentation","src":"4285:63:25","text":" @return the address of the token being sold."},"functionSelector":"fc0c546a","id":3192,"implemented":true,"kind":"function","modifiers":[],"name":"token","nameLocation":"4362:5:25","nodeType":"FunctionDefinition","overrides":{"id":3184,"nodeType":"OverrideSpecifier","overrides":[],"src":"4382:8:25"},"parameters":{"id":3183,"nodeType":"ParameterList","parameters":[],"src":"4367:2:25"},"returnParameters":{"id":3188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3187,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3192,"src":"4400:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3186,"nodeType":"UserDefinedTypeName","pathNode":{"id":3185,"name":"IERC20","nameLocations":["4400:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"4400:6:25"},"referencedDeclaration":1657,"src":"4400:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"4399:8:25"},"scope":3561,"src":"4353:85:25","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3587],"body":{"id":3201,"nodeType":"Block","src":"4579:31:25","statements":[{"expression":{"id":3199,"name":"_wallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"4596:7:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":3198,"id":3200,"nodeType":"Return","src":"4589:14:25"}]},"documentation":{"id":3193,"nodeType":"StructuredDocumentation","src":"4444:65:25","text":" @return the address where funds are collected."},"functionSelector":"521eb273","id":3202,"implemented":true,"kind":"function","modifiers":[],"name":"wallet","nameLocation":"4523:6:25","nodeType":"FunctionDefinition","overrides":{"id":3195,"nodeType":"OverrideSpecifier","overrides":[],"src":"4544:8:25"},"parameters":{"id":3194,"nodeType":"ParameterList","parameters":[],"src":"4529:2:25"},"returnParameters":{"id":3198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3202,"src":"4562:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3196,"name":"address","nodeType":"ElementaryTypeName","src":"4562:15:25","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"4561:17:25"},"scope":3561,"src":"4514:96:25","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3592],"body":{"id":3211,"nodeType":"Block","src":"4737:36:25","statements":[{"expression":{"id":3209,"name":"_fundsRaised","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"4754:12:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3208,"id":3210,"nodeType":"Return","src":"4747:19:25"}]},"documentation":{"id":3203,"nodeType":"StructuredDocumentation","src":"4616:54:25","text":" @return the amount of funds raised."},"functionSelector":"6681b9fd","id":3212,"implemented":true,"kind":"function","modifiers":[],"name":"fundsRaised","nameLocation":"4684:11:25","nodeType":"FunctionDefinition","overrides":{"id":3205,"nodeType":"OverrideSpecifier","overrides":[],"src":"4710:8:25"},"parameters":{"id":3204,"nodeType":"ParameterList","parameters":[],"src":"4695:2:25"},"returnParameters":{"id":3208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3212,"src":"4728:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3206,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4727:9:25"},"scope":3561,"src":"4675:98:25","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3597],"body":{"id":3228,"nodeType":"Block","src":"4934:56:25","statements":[{"expression":{"arguments":[{"arguments":[{"id":3224,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4977:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_CrowdSale_$3561","typeString":"contract CrowdSale"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrowdSale_$3561","typeString":"contract CrowdSale"}],"id":3223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4969:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3222,"name":"address","nodeType":"ElementaryTypeName","src":"4969:7:25","typeDescriptions":{}}},"id":3225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4969:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3219,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3192,"src":"4951:5:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IERC20_$1657_$","typeString":"function () view returns (contract IERC20)"}},"id":3220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4951:7:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":3221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4959:9:25","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1614,"src":"4951:17:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":3226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4951:32:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3218,"id":3227,"nodeType":"Return","src":"4944:39:25"}]},"documentation":{"id":3213,"nodeType":"StructuredDocumentation","src":"4779:84:25","text":" @return the amount tokens available to the crowdsale for selling."},"functionSelector":"60659a92","id":3229,"implemented":true,"kind":"function","modifiers":[],"name":"tokensAvailable","nameLocation":"4877:15:25","nodeType":"FunctionDefinition","overrides":{"id":3215,"nodeType":"OverrideSpecifier","overrides":[],"src":"4907:8:25"},"parameters":{"id":3214,"nodeType":"ParameterList","parameters":[],"src":"4892:2:25"},"returnParameters":{"id":3218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3217,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3229,"src":"4925:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3216,"name":"uint256","nodeType":"ElementaryTypeName","src":"4925:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4924:9:25"},"scope":3561,"src":"4868:122:25","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3609],"body":{"id":3283,"nodeType":"Block","src":"5539:391:25","statements":[{"assignments":[3246],"declarations":[{"constant":false,"id":3246,"mutability":"mutable","name":"weiAmount","nameLocation":"5557:9:25","nodeType":"VariableDeclaration","scope":3283,"src":"5549:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3245,"name":"uint256","nodeType":"ElementaryTypeName","src":"5549:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3250,"initialValue":{"arguments":[{"id":3248,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3234,"src":"5582:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3247,"name":"getWeiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"5569:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":3249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5569:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5549:45:25"},{"expression":{"arguments":[{"id":3252,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"5624:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3253,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3246,"src":"5637:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3251,"name":"preValidatePurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3373,"src":"5604:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) view"}},"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5604:43:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3255,"nodeType":"ExpressionStatement","src":"5604:43:25"},{"expression":{"id":3258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3256,"name":"_fundsRaised","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"5657:12:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3257,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3246,"src":"5673:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5657:25:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3259,"nodeType":"ExpressionStatement","src":"5657:25:25"},{"expression":{"arguments":[{"id":3261,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"5708:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3262,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3234,"src":"5721:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3260,"name":"processPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3409,"src":"5692:15:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5692:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3264,"nodeType":"ExpressionStatement","src":"5692:41:25"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3266,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"5764:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5764:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3268,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"5778:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3269,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3246,"src":"5791:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3270,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3234,"src":"5802:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3265,"name":"TokensPurchased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3576,"src":"5748:15:25","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:66:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3272,"nodeType":"EmitStatement","src":"5743:71:25"},{"expression":{"arguments":[{"id":3274,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"5846:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3275,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3246,"src":"5859:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3273,"name":"updatePurchasingState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"5824:21:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:45:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3277,"nodeType":"ExpressionStatement","src":"5824:45:25"},{"expression":{"arguments":[{"id":3279,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"5900:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3280,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3246,"src":"5913:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3278,"name":"postValidatePurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3440,"src":"5879:20:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) view"}},"id":3281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5879:44:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3282,"nodeType":"ExpressionStatement","src":"5879:44:25"}]},"documentation":{"id":3230,"nodeType":"StructuredDocumentation","src":"4996:331:25","text":" @dev utility function to allow the owner to handle private and bitcoin buyers\n This function has a non-reentrancy guard, so it shouldn't be called by\n another `nonReentrant` function.\n @param tokenAmount Number of tokens to be purchased\n @param beneficiary Recipient of the token purchase"},"functionSelector":"5f1c3766","id":3284,"implemented":true,"kind":"function","modifiers":[{"id":3238,"kind":"modifierInvocation","modifierName":{"id":3237,"name":"nonReentrant","nameLocations":["5463:12:25"],"nodeType":"IdentifierPath","referencedDeclaration":2600,"src":"5463:12:25"},"nodeType":"ModifierInvocation","src":"5463:12:25"},{"id":3240,"kind":"modifierInvocation","modifierName":{"id":3239,"name":"whenNotPaused","nameLocations":["5484:13:25"],"nodeType":"IdentifierPath","referencedDeclaration":2492,"src":"5484:13:25"},"nodeType":"ModifierInvocation","src":"5484:13:25"},{"arguments":[{"id":3242,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5515:18:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3243,"kind":"modifierInvocation","modifierName":{"id":3241,"name":"onlyRole","nameLocations":["5506:8:25"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"5506:8:25"},"nodeType":"ModifierInvocation","src":"5506:28:25"}],"name":"externalBuyTokens","nameLocation":"5341:17:25","nodeType":"FunctionDefinition","overrides":{"id":3236,"nodeType":"OverrideSpecifier","overrides":[],"src":"5446:8:25"},"parameters":{"id":3235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3232,"mutability":"mutable","name":"beneficiary","nameLocation":"5376:11:25","nodeType":"VariableDeclaration","scope":3284,"src":"5368:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3231,"name":"address","nodeType":"ElementaryTypeName","src":"5368:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3234,"mutability":"mutable","name":"tokenAmount","nameLocation":"5405:11:25","nodeType":"VariableDeclaration","scope":3284,"src":"5397:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3233,"name":"uint256","nodeType":"ElementaryTypeName","src":"5397:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5358:64:25"},"returnParameters":{"id":3244,"nodeType":"ParameterList","parameters":[],"src":"5539:0:25"},"scope":3561,"src":"5332:598:25","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3602],"body":{"id":3344,"nodeType":"Block","src":"6335:458:25","statements":[{"assignments":[3299],"declarations":[{"constant":false,"id":3299,"mutability":"mutable","name":"weiAmount","nameLocation":"6353:9:25","nodeType":"VariableDeclaration","scope":3344,"src":"6345:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3298,"name":"uint256","nodeType":"ElementaryTypeName","src":"6345:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3302,"initialValue":{"expression":{"id":3300,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6365:3:25","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6369:5:25","memberName":"value","nodeType":"MemberAccess","src":"6365:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6345:29:25"},{"expression":{"arguments":[{"id":3304,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3287,"src":"6404:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3305,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"6417:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3303,"name":"preValidatePurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3373,"src":"6384:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) view"}},"id":3306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6384:43:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3307,"nodeType":"ExpressionStatement","src":"6384:43:25"},{"assignments":[3309],"declarations":[{"constant":false,"id":3309,"mutability":"mutable","name":"tokenAmount","nameLocation":"6446:11:25","nodeType":"VariableDeclaration","scope":3344,"src":"6438:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3308,"name":"uint256","nodeType":"ElementaryTypeName","src":"6438:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3313,"initialValue":{"arguments":[{"id":3311,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"6475:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3310,"name":"getTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"6460:14:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":3312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6460:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6438:47:25"},{"expression":{"id":3316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3314,"name":"_fundsRaised","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"6496:12:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3315,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"6512:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6496:25:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3317,"nodeType":"ExpressionStatement","src":"6496:25:25"},{"expression":{"arguments":[{"id":3319,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3287,"src":"6547:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3320,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3309,"src":"6560:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3318,"name":"processPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3409,"src":"6531:15:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6531:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3322,"nodeType":"ExpressionStatement","src":"6531:41:25"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3324,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"6603:10:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6603:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3326,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3287,"src":"6617:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3327,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"6630:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3328,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3309,"src":"6641:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3323,"name":"TokensPurchased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3576,"src":"6587:15:25","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":3329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6587:66:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3330,"nodeType":"EmitStatement","src":"6582:71:25"},{"expression":{"arguments":[{"id":3332,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3287,"src":"6685:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3333,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"6698:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3331,"name":"updatePurchasingState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"6663:21:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6663:45:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3335,"nodeType":"ExpressionStatement","src":"6663:45:25"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3336,"name":"forwardFunds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3560,"src":"6718:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6718:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3338,"nodeType":"ExpressionStatement","src":"6718:14:25"},{"expression":{"arguments":[{"id":3340,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3287,"src":"6763:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3341,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"6776:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3339,"name":"postValidatePurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3440,"src":"6742:20:25","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) view"}},"id":3342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6742:44:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3343,"nodeType":"ExpressionStatement","src":"6742:44:25"}]},"documentation":{"id":3285,"nodeType":"StructuredDocumentation","src":"5936:224:25","text":" @dev low level token purchase\n This function has a non-reentrancy guard, so it shouldn't be called by\n another `nonReentrant` function.\n @param beneficiary Recipient of the token purchase"},"functionSelector":"ec8ac4d8","id":3345,"implemented":true,"kind":"function","modifiers":[{"id":3291,"kind":"modifierInvocation","modifierName":{"id":3290,"name":"nonReentrant","nameLocations":["6261:12:25"],"nodeType":"IdentifierPath","referencedDeclaration":2600,"src":"6261:12:25"},"nodeType":"ModifierInvocation","src":"6261:12:25"},{"id":3293,"kind":"modifierInvocation","modifierName":{"id":3292,"name":"whenNotPaused","nameLocations":["6282:13:25"],"nodeType":"IdentifierPath","referencedDeclaration":2492,"src":"6282:13:25"},"nodeType":"ModifierInvocation","src":"6282:13:25"},{"arguments":[{"id":3295,"name":"WHITELISTED_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"6313:16:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3296,"kind":"modifierInvocation","modifierName":{"id":3294,"name":"onlyRole","nameLocations":["6304:8:25"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"6304:8:25"},"nodeType":"ModifierInvocation","src":"6304:26:25"}],"name":"buyTokens","nameLocation":"6174:9:25","nodeType":"FunctionDefinition","overrides":{"id":3289,"nodeType":"OverrideSpecifier","overrides":[],"src":"6244:8:25"},"parameters":{"id":3288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3287,"mutability":"mutable","name":"beneficiary","nameLocation":"6192:11:25","nodeType":"VariableDeclaration","scope":3345,"src":"6184:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3286,"name":"address","nodeType":"ElementaryTypeName","src":"6184:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6183:21:25"},"returnParameters":{"id":3297,"nodeType":"ParameterList","parameters":[],"src":"6335:0:25"},"scope":3561,"src":"6165:628:25","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":3372,"nodeType":"Block","src":"6972:304:25","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3354,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"6990:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7013:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3356,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7005:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3355,"name":"address","nodeType":"ElementaryTypeName","src":"7005:7:25","typeDescriptions":{}}},"id":3358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7005:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6990:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43726f776473616c653a2062656e656669636961727920697320746865207a65726f2061646472657373","id":3360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7017:44:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_b9d4bce01fb5c20cfa41c5b334ad79fcf3774809b1388b0603f3dcd505be7d6e","typeString":"literal_string \"Crowdsale: beneficiary is the zero address\""},"value":"Crowdsale: beneficiary is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b9d4bce01fb5c20cfa41c5b334ad79fcf3774809b1388b0603f3dcd505be7d6e","typeString":"literal_string \"Crowdsale: beneficiary is the zero address\""}],"id":3353,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6982:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6982:80:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3362,"nodeType":"ExpressionStatement","src":"6982:80:25"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3364,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3350,"src":"7080:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7093:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7080:14:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43726f776473616c653a20616d6f756e742069732030","id":3367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7096:24:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_08f803af48e9b81d3efaf025e78e0db0e9e555fd124ac844d9052d5a698cdd41","typeString":"literal_string \"Crowdsale: amount is 0\""},"value":"Crowdsale: amount is 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08f803af48e9b81d3efaf025e78e0db0e9e555fd124ac844d9052d5a698cdd41","typeString":"literal_string \"Crowdsale: amount is 0\""}],"id":3363,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7072:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7072:49:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3369,"nodeType":"ExpressionStatement","src":"7072:49:25"},{"expression":{"id":3370,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7131:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_CrowdSale_$3561","typeString":"contract CrowdSale"}},"id":3371,"nodeType":"ExpressionStatement","src":"7131:4:25"}]},"documentation":{"id":3346,"nodeType":"StructuredDocumentation","src":"6799:85:25","text":" @dev Validates beneficiary and weiAmount before executing purchase"},"id":3373,"implemented":true,"kind":"function","modifiers":[],"name":"preValidatePurchase","nameLocation":"6898:19:25","nodeType":"FunctionDefinition","parameters":{"id":3351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3348,"mutability":"mutable","name":"beneficiary","nameLocation":"6926:11:25","nodeType":"VariableDeclaration","scope":3373,"src":"6918:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3347,"name":"address","nodeType":"ElementaryTypeName","src":"6918:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3350,"mutability":"mutable","name":"weiAmount","nameLocation":"6947:9:25","nodeType":"VariableDeclaration","scope":3373,"src":"6939:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3349,"name":"uint256","nodeType":"ElementaryTypeName","src":"6939:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6917:40:25"},"returnParameters":{"id":3352,"nodeType":"ParameterList","parameters":[],"src":"6972:0:25"},"scope":3561,"src":"6889:387:25","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3408,"nodeType":"Block","src":"7618:271:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3381,"name":"_vestingEndDate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3026,"src":"7632:15:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7650:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7632:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3406,"nodeType":"Block","src":"7819:64:25","statements":[{"expression":{"arguments":[{"id":3402,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3376,"src":"7847:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3403,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"7860:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3401,"name":"deliverTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3431,"src":"7833:13:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7833:39:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3405,"nodeType":"ExpressionStatement","src":"7833:39:25"}]},"id":3407,"nodeType":"IfStatement","src":"7628:255:25","trueBody":{"id":3400,"nodeType":"Block","src":"7653:160:25","statements":[{"expression":{"arguments":[{"id":3387,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3376,"src":"7696:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3388,"name":"_vestingEndDate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3026,"src":"7709:15:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3389,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"7726:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3384,"name":"_vestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3029,"src":"7667:13:25","typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}},"id":3386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7681:14:25","memberName":"addBeneficiary","nodeType":"MemberAccess","referencedDeclaration":3820,"src":"7667:28:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":3390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7667:71:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3391,"nodeType":"ExpressionStatement","src":"7667:71:25"},{"expression":{"arguments":[{"arguments":[{"id":3395,"name":"_vestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3029,"src":"7774:13:25","typeDescriptions":{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VestingVault_$3944","typeString":"contract VestingVault"}],"id":3394,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7766:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3393,"name":"address","nodeType":"ElementaryTypeName","src":"7766:7:25","typeDescriptions":{}}},"id":3396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7766:22:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3397,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"7790:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3392,"name":"deliverTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3431,"src":"7752:13:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7752:50:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3399,"nodeType":"ExpressionStatement","src":"7752:50:25"}]}}]},"documentation":{"id":3374,"nodeType":"StructuredDocumentation","src":"7282:255:25","text":" @dev Executed when a purchase has been validated and is ready to be executed. Doesn't necessarily emit/send\n tokens.\n @param beneficiary Address receiving the tokens\n @param tokenAmount Number of tokens to be purchased"},"id":3409,"implemented":true,"kind":"function","modifiers":[],"name":"processPurchase","nameLocation":"7551:15:25","nodeType":"FunctionDefinition","parameters":{"id":3379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3376,"mutability":"mutable","name":"beneficiary","nameLocation":"7575:11:25","nodeType":"VariableDeclaration","scope":3409,"src":"7567:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3375,"name":"address","nodeType":"ElementaryTypeName","src":"7567:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3378,"mutability":"mutable","name":"tokenAmount","nameLocation":"7596:11:25","nodeType":"VariableDeclaration","scope":3409,"src":"7588:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3377,"name":"uint256","nodeType":"ElementaryTypeName","src":"7588:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7566:42:25"},"returnParameters":{"id":3380,"nodeType":"ParameterList","parameters":[],"src":"7618:0:25"},"scope":3561,"src":"7542:347:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3430,"nodeType":"Block","src":"8279:124:25","statements":[{"assignments":[3418],"declarations":[{"constant":false,"id":3418,"mutability":"mutable","name":"success","nameLocation":"8294:7:25","nodeType":"VariableDeclaration","scope":3430,"src":"8289:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3417,"name":"bool","nodeType":"ElementaryTypeName","src":"8289:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3424,"initialValue":{"arguments":[{"id":3421,"name":"beneficiary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"8320:11:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3422,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3414,"src":"8333:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3419,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"8304:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":3420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8311:8:25","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1624,"src":"8304:15:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8304:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"8289:56:25"},{"expression":{"arguments":[{"id":3426,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3418,"src":"8363:7:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e7366657220756e7375636365737366756c","id":3427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8372:23:25","typeDescriptions":{"typeIdentifier":"t_stringliteral_2513e3b474b9535d89f83135e4266a57601a044fa7a22e21c331f02f568fdc58","typeString":"literal_string \"Transfer unsuccessful\""},"value":"Transfer unsuccessful"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2513e3b474b9535d89f83135e4266a57601a044fa7a22e21c331f02f568fdc58","typeString":"literal_string \"Transfer unsuccessful\""}],"id":3425,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8355:7:25","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8355:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3429,"nodeType":"ExpressionStatement","src":"8355:41:25"}]},"documentation":{"id":3410,"nodeType":"StructuredDocumentation","src":"7895:305:25","text":" @dev Transfer of tokens from crowdsale to beneficiary. Override this method to modify the way in which the\n crowdsale ultimately gets and sends its tokens.\n @param beneficiary Address performing the token purchase\n @param tokenAmount Number of tokens to be transferred"},"id":3431,"implemented":true,"kind":"function","modifiers":[],"name":"deliverTokens","nameLocation":"8214:13:25","nodeType":"FunctionDefinition","parameters":{"id":3415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3412,"mutability":"mutable","name":"beneficiary","nameLocation":"8236:11:25","nodeType":"VariableDeclaration","scope":3431,"src":"8228:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3411,"name":"address","nodeType":"ElementaryTypeName","src":"8228:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3414,"mutability":"mutable","name":"tokenAmount","nameLocation":"8257:11:25","nodeType":"VariableDeclaration","scope":3431,"src":"8249:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3413,"name":"uint256","nodeType":"ElementaryTypeName","src":"8249:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8227:42:25"},"returnParameters":{"id":3416,"nodeType":"ParameterList","parameters":[],"src":"8279:0:25"},"scope":3561,"src":"8205:198:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3439,"nodeType":"Block","src":"8782:64:25","statements":[]},"documentation":{"id":3432,"nodeType":"StructuredDocumentation","src":"8409:284:25","text":" @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid\n conditions are not met.\n @param beneficiary Address performing the token purchase\n @param weiAmount Value in wei involved in the purchase"},"id":3440,"implemented":true,"kind":"function","modifiers":[],"name":"postValidatePurchase","nameLocation":"8707:20:25","nodeType":"FunctionDefinition","parameters":{"id":3437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3434,"mutability":"mutable","name":"beneficiary","nameLocation":"8736:11:25","nodeType":"VariableDeclaration","scope":3440,"src":"8728:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3433,"name":"address","nodeType":"ElementaryTypeName","src":"8728:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3436,"mutability":"mutable","name":"weiAmount","nameLocation":"8757:9:25","nodeType":"VariableDeclaration","scope":3440,"src":"8749:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3435,"name":"uint256","nodeType":"ElementaryTypeName","src":"8749:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8727:40:25"},"returnParameters":{"id":3438,"nodeType":"ParameterList","parameters":[],"src":"8782:0:25"},"scope":3561,"src":"8698:148:25","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3448,"nodeType":"Block","src":"9196:64:25","statements":[]},"documentation":{"id":3441,"nodeType":"StructuredDocumentation","src":"8852:259:25","text":" @dev Override for extensions that require an internal state to check for validity (current user contributions,\n etc.)\n @param beneficiary Address receiving the tokens\n @param weiAmount Value in wei involved in the purchase"},"id":3449,"implemented":true,"kind":"function","modifiers":[],"name":"updatePurchasingState","nameLocation":"9125:21:25","nodeType":"FunctionDefinition","parameters":{"id":3446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3443,"mutability":"mutable","name":"beneficiary","nameLocation":"9155:11:25","nodeType":"VariableDeclaration","scope":3449,"src":"9147:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3442,"name":"address","nodeType":"ElementaryTypeName","src":"9147:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3445,"mutability":"mutable","name":"weiAmount","nameLocation":"9176:9:25","nodeType":"VariableDeclaration","scope":3449,"src":"9168:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3444,"name":"uint256","nodeType":"ElementaryTypeName","src":"9168:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9146:40:25"},"returnParameters":{"id":3447,"nodeType":"ParameterList","parameters":[],"src":"9196:0:25"},"scope":3561,"src":"9116:144:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3497,"nodeType":"Block","src":"9475:323:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3459,"name":"priceFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"9497:9:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}],"id":3458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9489:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3457,"name":"address","nodeType":"ElementaryTypeName","src":"9489:7:25","typeDescriptions":{}}},"id":3460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9489:18:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9519:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9511:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3461,"name":"address","nodeType":"ElementaryTypeName","src":"9511:7:25","typeDescriptions":{}}},"id":3464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9511:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9489:32:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3488,"nodeType":"IfStatement","src":"9485:229:25","trueBody":{"id":3487,"nodeType":"Block","src":"9523:191:25","statements":[{"assignments":[null,3467,null,null,null],"declarations":[null,{"constant":false,"id":3467,"mutability":"mutable","name":"price","nameLocation":"9592:5:25","nodeType":"VariableDeclaration","scope":3487,"src":"9585:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3466,"name":"int256","nodeType":"ElementaryTypeName","src":"9585:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},null,null,null],"id":3471,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3468,"name":"priceFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"9604:9:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}},"id":3469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9614:15:25","memberName":"latestRoundData","nodeType":"MemberAccess","referencedDeclaration":2971,"src":"9604:25:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"function () view external returns (uint80,int256,uint256,uint256,uint80)"}},"id":3470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9604:27:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"nodeType":"VariableDeclarationStatement","src":"9582:49:25"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3472,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"9654:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":3475,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3467,"src":"9674:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9666:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3473,"name":"uint256","nodeType":"ElementaryTypeName","src":"9666:7:25","typeDescriptions":{}}},"id":3476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9666:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9654:26:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3478,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9653:28:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3479,"name":"_usdRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"9684:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9653:39:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3481,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9652:41:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":3484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9696:2:25","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":3483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9702:1:25","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"9696:7:25","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"9652:51:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3456,"id":3486,"nodeType":"Return","src":"9645:58:25"}]}},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3489,"name":"weiAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"9732:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3130","id":3490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9744:2:25","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"9732:14:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3492,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9731:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3493,"name":"_usdRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"9750:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9731:27:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3495,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9730:29:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3456,"id":3496,"nodeType":"Return","src":"9723:36:25"}]},"documentation":{"id":3450,"nodeType":"StructuredDocumentation","src":"9266:131:25","text":" @dev Converts the weiAmount into equivalent number of tokens\n @param weiAmount Value of wei for conversion"},"functionSelector":"c2507ac1","id":3498,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenAmount","nameLocation":"9411:14:25","nodeType":"FunctionDefinition","parameters":{"id":3453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3452,"mutability":"mutable","name":"weiAmount","nameLocation":"9434:9:25","nodeType":"VariableDeclaration","scope":3498,"src":"9426:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3451,"name":"uint256","nodeType":"ElementaryTypeName","src":"9426:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9425:19:25"},"returnParameters":{"id":3456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3498,"src":"9466:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3454,"name":"uint256","nodeType":"ElementaryTypeName","src":"9466:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9465:9:25"},"scope":3561,"src":"9402:396:25","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3547,"nodeType":"Block","src":"10018:329:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3508,"name":"priceFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"10040:9:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}],"id":3507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10032:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3506,"name":"address","nodeType":"ElementaryTypeName","src":"10032:7:25","typeDescriptions":{}}},"id":3509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10032:18:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10062:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10054:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3510,"name":"address","nodeType":"ElementaryTypeName","src":"10054:7:25","typeDescriptions":{}}},"id":3513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10054:10:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10032:32:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3537,"nodeType":"IfStatement","src":"10028:231:25","trueBody":{"id":3536,"nodeType":"Block","src":"10066:193:25","statements":[{"assignments":[null,3516,null,null,null],"declarations":[null,{"constant":false,"id":3516,"mutability":"mutable","name":"price","nameLocation":"10135:5:25","nodeType":"VariableDeclaration","scope":3536,"src":"10128:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3515,"name":"int256","nodeType":"ElementaryTypeName","src":"10128:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},null,null,null],"id":3520,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3517,"name":"priceFeed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"10147:9:25","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$2972","typeString":"contract AggregatorV3Interface"}},"id":3518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10157:15:25","memberName":"latestRoundData","nodeType":"MemberAccess","referencedDeclaration":2971,"src":"10147:25:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"function () view external returns (uint80,int256,uint256,uint256,uint80)"}},"id":3519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10147:27:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"nodeType":"VariableDeclarationStatement","src":"10125:49:25"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3521,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"10196:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":3524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10210:2:25","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":3523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10216:1:25","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10210:7:25","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10196:21:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3526,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10195:23:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3529,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3516,"src":"10230:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10222:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3527,"name":"uint256","nodeType":"ElementaryTypeName","src":"10222:7:25","typeDescriptions":{}}},"id":3530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10222:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3531,"name":"_usdRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"10239:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10222:25:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3533,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10221:27:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10195:53:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3505,"id":3535,"nodeType":"Return","src":"10188:60:25"}]}},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":3538,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"10278:11:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3539,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10277:13:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3540,"name":"_usdRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"10293:8:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10277:24:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3542,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10276:26:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":3543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10305:2:25","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"10276:31:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3545,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10275:33:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3505,"id":3546,"nodeType":"Return","src":"10268:40:25"}]},"documentation":{"id":3499,"nodeType":"StructuredDocumentation","src":"9804:136:25","text":" @dev Converts the tokenAmount into equivalent number of wei\n @param tokenAmount Number of tokens for convertion"},"functionSelector":"82d5d7ac","id":3548,"implemented":true,"kind":"function","modifiers":[],"name":"getWeiAmount","nameLocation":"9954:12:25","nodeType":"FunctionDefinition","parameters":{"id":3502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3501,"mutability":"mutable","name":"tokenAmount","nameLocation":"9975:11:25","nodeType":"VariableDeclaration","scope":3548,"src":"9967:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3500,"name":"uint256","nodeType":"ElementaryTypeName","src":"9967:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9966:21:25"},"returnParameters":{"id":3505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3548,"src":"10009:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3503,"name":"uint256","nodeType":"ElementaryTypeName","src":"10009:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10008:9:25"},"scope":3561,"src":"9945:402:25","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3559,"nodeType":"Block","src":"10467:44:25","statements":[{"expression":{"arguments":[{"expression":{"id":3555,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10494:3:25","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10498:5:25","memberName":"value","nodeType":"MemberAccess","src":"10494:9:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3552,"name":"_wallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"10477:7:25","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10485:8:25","memberName":"transfer","nodeType":"MemberAccess","src":"10477:16:25","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10477:27:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3558,"nodeType":"ExpressionStatement","src":"10477:27:25"}]},"documentation":{"id":3549,"nodeType":"StructuredDocumentation","src":"10353:76:25","text":" @dev Determines how ETH is stored/forwarded on purchases."},"id":3560,"implemented":true,"kind":"function","modifiers":[],"name":"forwardFunds","nameLocation":"10443:12:25","nodeType":"FunctionDefinition","parameters":{"id":3550,"nodeType":"ParameterList","parameters":[],"src":"10455:2:25"},"returnParameters":{"id":3551,"nodeType":"ParameterList","parameters":[],"src":"10467:0:25"},"scope":3561,"src":"10434:77:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3562,"src":"813:9700:25","usedErrors":[305,308,2481,2484,2581],"usedEvents":[317,326,335,2473,2478,3576]}],"src":"59:10455:25"},"id":25},"contracts/library/ICrowdSale.sol":{"ast":{"absolutePath":"contracts/library/ICrowdSale.sol","exportedSymbols":{"ICrowdSale":[3610],"IERC20":[1657]},"id":3611,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":3563,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:26"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3565,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3611,"sourceUnit":1658,"src":"85:72:26","symbolAliases":[{"foreign":{"id":3564,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"94:6:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ICrowdSale","contractDependencies":[],"contractKind":"interface","documentation":{"id":3566,"nodeType":"StructuredDocumentation","src":"159:28:26","text":" @title ICrowdSale"},"fullyImplemented":false,"id":3610,"linearizedBaseContracts":[3610],"name":"ICrowdSale","nameLocation":"198:10:26","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b","id":3576,"name":"TokensPurchased","nameLocation":"221:15:26","nodeType":"EventDefinition","parameters":{"id":3575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3568,"indexed":true,"mutability":"mutable","name":"purchaser","nameLocation":"253:9:26","nodeType":"VariableDeclaration","scope":3576,"src":"237:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3567,"name":"address","nodeType":"ElementaryTypeName","src":"237:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3570,"indexed":true,"mutability":"mutable","name":"beneficiary","nameLocation":"280:11:26","nodeType":"VariableDeclaration","scope":3576,"src":"264:27:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3569,"name":"address","nodeType":"ElementaryTypeName","src":"264:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3572,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"301:5:26","nodeType":"VariableDeclaration","scope":3576,"src":"293:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3571,"name":"uint256","nodeType":"ElementaryTypeName","src":"293:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3574,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"316:6:26","nodeType":"VariableDeclaration","scope":3576,"src":"308:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3573,"name":"uint256","nodeType":"ElementaryTypeName","src":"308:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"236:87:26"},"src":"215:109:26"},{"functionSelector":"fc0c546a","id":3582,"implemented":false,"kind":"function","modifiers":[],"name":"token","nameLocation":"339:5:26","nodeType":"FunctionDefinition","parameters":{"id":3577,"nodeType":"ParameterList","parameters":[],"src":"344:2:26"},"returnParameters":{"id":3581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3582,"src":"370:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3579,"nodeType":"UserDefinedTypeName","pathNode":{"id":3578,"name":"IERC20","nameLocations":["370:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"370:6:26"},"referencedDeclaration":1657,"src":"370:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"369:8:26"},"scope":3610,"src":"330:48:26","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"521eb273","id":3587,"implemented":false,"kind":"function","modifiers":[],"name":"wallet","nameLocation":"393:6:26","nodeType":"FunctionDefinition","parameters":{"id":3583,"nodeType":"ParameterList","parameters":[],"src":"399:2:26"},"returnParameters":{"id":3586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3585,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3587,"src":"425:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3584,"name":"address","nodeType":"ElementaryTypeName","src":"425:15:26","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"424:17:26"},"scope":3610,"src":"384:58:26","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6681b9fd","id":3592,"implemented":false,"kind":"function","modifiers":[],"name":"fundsRaised","nameLocation":"457:11:26","nodeType":"FunctionDefinition","parameters":{"id":3588,"nodeType":"ParameterList","parameters":[],"src":"468:2:26"},"returnParameters":{"id":3591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3590,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3592,"src":"494:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3589,"name":"uint256","nodeType":"ElementaryTypeName","src":"494:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"493:9:26"},"scope":3610,"src":"448:55:26","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"60659a92","id":3597,"implemented":false,"kind":"function","modifiers":[],"name":"tokensAvailable","nameLocation":"518:15:26","nodeType":"FunctionDefinition","parameters":{"id":3593,"nodeType":"ParameterList","parameters":[],"src":"533:2:26"},"returnParameters":{"id":3596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3597,"src":"559:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3594,"name":"uint256","nodeType":"ElementaryTypeName","src":"559:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"558:9:26"},"scope":3610,"src":"509:59:26","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ec8ac4d8","id":3602,"implemented":false,"kind":"function","modifiers":[],"name":"buyTokens","nameLocation":"583:9:26","nodeType":"FunctionDefinition","parameters":{"id":3600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3599,"mutability":"mutable","name":"beneficiary","nameLocation":"601:11:26","nodeType":"VariableDeclaration","scope":3602,"src":"593:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3598,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:21:26"},"returnParameters":{"id":3601,"nodeType":"ParameterList","parameters":[],"src":"630:0:26"},"scope":3610,"src":"574:57:26","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"5f1c3766","id":3609,"implemented":false,"kind":"function","modifiers":[],"name":"externalBuyTokens","nameLocation":"646:17:26","nodeType":"FunctionDefinition","parameters":{"id":3607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3604,"mutability":"mutable","name":"beneficiary","nameLocation":"672:11:26","nodeType":"VariableDeclaration","scope":3609,"src":"664:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3603,"name":"address","nodeType":"ElementaryTypeName","src":"664:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3606,"mutability":"mutable","name":"tokenAmount","nameLocation":"693:11:26","nodeType":"VariableDeclaration","scope":3609,"src":"685:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3605,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"663:42:26"},"returnParameters":{"id":3608,"nodeType":"ParameterList","parameters":[],"src":"714:0:26"},"scope":3610,"src":"637:78:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3611,"src":"188:529:26","usedErrors":[],"usedEvents":[3576]}],"src":"59:659:26"},"id":26},"contracts/library/IVestingVault.sol":{"ast":{"absolutePath":"contracts/library/IVestingVault.sol","exportedSymbols":{"IERC20":[1657],"IVestingVault":[3665]},"id":3666,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":3612,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:27"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3614,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3666,"sourceUnit":1658,"src":"85:72:27","symbolAliases":[{"foreign":{"id":3613,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"94:6:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVestingVault","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":3665,"linearizedBaseContracts":[3665],"name":"IVestingVault","nameLocation":"169:13:27","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IVestingVault.Vesting","id":3621,"members":[{"constant":false,"id":3616,"mutability":"mutable","name":"beneficiary","nameLocation":"279:11:27","nodeType":"VariableDeclaration","scope":3621,"src":"271:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3615,"name":"address","nodeType":"ElementaryTypeName","src":"271:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3618,"mutability":"mutable","name":"releaseTime","nameLocation":"359:11:27","nodeType":"VariableDeclaration","scope":3621,"src":"351:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3617,"name":"uint256","nodeType":"ElementaryTypeName","src":"351:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3620,"mutability":"mutable","name":"tokenAmount","nameLocation":"427:11:27","nodeType":"VariableDeclaration","scope":3621,"src":"419:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3619,"name":"uint256","nodeType":"ElementaryTypeName","src":"419:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Vesting","nameLocation":"196:7:27","nodeType":"StructDefinition","scope":3665,"src":"189:256:27","visibility":"public"},{"anonymous":false,"eventSelector":"970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac","id":3629,"name":"VestingLockedIn","nameLocation":"457:15:27","nodeType":"EventDefinition","parameters":{"id":3628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3623,"indexed":true,"mutability":"mutable","name":"beneficiary","nameLocation":"489:11:27","nodeType":"VariableDeclaration","scope":3629,"src":"473:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3622,"name":"address","nodeType":"ElementaryTypeName","src":"473:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3625,"indexed":false,"mutability":"mutable","name":"releaseTime","nameLocation":"510:11:27","nodeType":"VariableDeclaration","scope":3629,"src":"502:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3624,"name":"uint256","nodeType":"ElementaryTypeName","src":"502:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3627,"indexed":false,"mutability":"mutable","name":"tokenAmount","nameLocation":"531:11:27","nodeType":"VariableDeclaration","scope":3629,"src":"523:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3626,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"472:71:27"},"src":"451:93:27"},{"anonymous":false,"eventSelector":"c35bc0b152cc4084b62942d2235605f7e5db6fc6217bc7ef532ba71acf7a58ce","id":3637,"name":"VestingReleased","nameLocation":"555:15:27","nodeType":"EventDefinition","parameters":{"id":3636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3631,"indexed":true,"mutability":"mutable","name":"beneficiary","nameLocation":"587:11:27","nodeType":"VariableDeclaration","scope":3637,"src":"571:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3630,"name":"address","nodeType":"ElementaryTypeName","src":"571:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3633,"indexed":false,"mutability":"mutable","name":"releaseTime","nameLocation":"608:11:27","nodeType":"VariableDeclaration","scope":3637,"src":"600:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3632,"name":"uint256","nodeType":"ElementaryTypeName","src":"600:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3635,"indexed":false,"mutability":"mutable","name":"tokenAmount","nameLocation":"629:11:27","nodeType":"VariableDeclaration","scope":3637,"src":"621:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3634,"name":"uint256","nodeType":"ElementaryTypeName","src":"621:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"570:71:27"},"src":"549:93:27"},{"functionSelector":"f74bc9d6","id":3646,"implemented":false,"kind":"function","modifiers":[],"name":"addBeneficiary","nameLocation":"657:14:27","nodeType":"FunctionDefinition","parameters":{"id":3644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3639,"mutability":"mutable","name":"beneficiary_","nameLocation":"680:12:27","nodeType":"VariableDeclaration","scope":3646,"src":"672:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3638,"name":"address","nodeType":"ElementaryTypeName","src":"672:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3641,"mutability":"mutable","name":"releaseTime_","nameLocation":"702:12:27","nodeType":"VariableDeclaration","scope":3646,"src":"694:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3640,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3643,"mutability":"mutable","name":"tokenAmount_","nameLocation":"724:12:27","nodeType":"VariableDeclaration","scope":3646,"src":"716:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3642,"name":"uint256","nodeType":"ElementaryTypeName","src":"716:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"671:66:27"},"returnParameters":{"id":3645,"nodeType":"ParameterList","parameters":[],"src":"746:0:27"},"scope":3665,"src":"648:99:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"fc0c546a","id":3652,"implemented":false,"kind":"function","modifiers":[],"name":"token","nameLocation":"762:5:27","nodeType":"FunctionDefinition","parameters":{"id":3647,"nodeType":"ParameterList","parameters":[],"src":"767:2:27"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3652,"src":"793:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3649,"nodeType":"UserDefinedTypeName","pathNode":{"id":3648,"name":"IERC20","nameLocations":["793:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"793:6:27"},"referencedDeclaration":1657,"src":"793:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"792:8:27"},"scope":3665,"src":"753:48:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f4753b38","id":3661,"implemented":false,"kind":"function","modifiers":[],"name":"vestingFor","nameLocation":"816:10:27","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3654,"mutability":"mutable","name":"beneficary_","nameLocation":"835:11:27","nodeType":"VariableDeclaration","scope":3661,"src":"827:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3653,"name":"address","nodeType":"ElementaryTypeName","src":"827:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"826:21:27"},"returnParameters":{"id":3660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3661,"src":"871:16:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting[]"},"typeName":{"baseType":{"id":3657,"nodeType":"UserDefinedTypeName","pathNode":{"id":3656,"name":"Vesting","nameLocations":["871:7:27"],"nodeType":"IdentifierPath","referencedDeclaration":3621,"src":"871:7:27"},"referencedDeclaration":3621,"src":"871:7:27","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage_ptr","typeString":"struct IVestingVault.Vesting"}},"id":3658,"nodeType":"ArrayTypeName","src":"871:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr","typeString":"struct IVestingVault.Vesting[]"}},"visibility":"internal"}],"src":"870:18:27"},"scope":3665,"src":"807:82:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"86d1a69f","id":3664,"implemented":false,"kind":"function","modifiers":[],"name":"release","nameLocation":"904:7:27","nodeType":"FunctionDefinition","parameters":{"id":3662,"nodeType":"ParameterList","parameters":[],"src":"911:2:27"},"returnParameters":{"id":3663,"nodeType":"ParameterList","parameters":[],"src":"922:0:27"},"scope":3665,"src":"895:28:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3666,"src":"159:766:27","usedErrors":[],"usedEvents":[3629,3637]}],"src":"59:867:27"},"id":27},"contracts/library/VestingVault.sol":{"ast":{"absolutePath":"contracts/library/VestingVault.sol","exportedSymbols":{"AccessControl":[295],"ERC165":[2660],"IERC20":[1657],"IVestingVault":[3665],"VestingVault":[3944]},"id":3945,"license":"FSL-1.1-MIT","nodeType":"SourceUnit","nodes":[{"id":3667,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"59:24:28"},{"absolutePath":"contracts/library/IVestingVault.sol","file":"./IVestingVault.sol","id":3669,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3945,"sourceUnit":3666,"src":"85:52:28","symbolAliases":[{"foreign":{"id":3668,"name":"IVestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3665,"src":"94:13:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","file":"@openzeppelin/contracts/access/AccessControl.sol","id":3671,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3945,"sourceUnit":296,"src":"138:81:28","symbolAliases":[{"foreign":{"id":3670,"name":"AccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"147:13:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165.sol","id":3673,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3945,"sourceUnit":2661,"src":"220:80:28","symbolAliases":[{"foreign":{"id":3672,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2660,"src":"229:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3675,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3945,"sourceUnit":1658,"src":"301:72:28","symbolAliases":[{"foreign":{"id":3674,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"310:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3677,"name":"IVestingVault","nameLocations":["431:13:28"],"nodeType":"IdentifierPath","referencedDeclaration":3665,"src":"431:13:28"},"id":3678,"nodeType":"InheritanceSpecifier","src":"431:13:28"},{"baseName":{"id":3679,"name":"ERC165","nameLocations":["446:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"446:6:28"},"id":3680,"nodeType":"InheritanceSpecifier","src":"446:6:28"},{"baseName":{"id":3681,"name":"AccessControl","nameLocations":["454:13:28"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"454:13:28"},"id":3682,"nodeType":"InheritanceSpecifier","src":"454:13:28"}],"canonicalName":"VestingVault","contractDependencies":[],"contractKind":"contract","documentation":{"id":3676,"nodeType":"StructuredDocumentation","src":"375:30:28","text":" @title VestingVault"},"fullyImplemented":true,"id":3944,"linearizedBaseContracts":[3944,295,2660,2672,378,2437,3665],"name":"VestingVault","nameLocation":"415:12:28","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"704e2b2d","id":3687,"mutability":"constant","name":"VAULT_CONTROLLER_ROLE","nameLocation":"498:21:28","nodeType":"VariableDeclaration","scope":3944,"src":"474:82:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"474:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5641554c545f434f4e54524f4c4c45525f524f4c45","id":3685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"532:23:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd9","typeString":"literal_string \"VAULT_CONTROLLER_ROLE\""},"value":"VAULT_CONTROLLER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd9","typeString":"literal_string \"VAULT_CONTROLLER_ROLE\""}],"id":3684,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"522:9:28","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"522:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":3690,"mutability":"immutable","name":"_token","nameLocation":"587:6:28","nodeType":"VariableDeclaration","scope":3944,"src":"562:31:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3689,"nodeType":"UserDefinedTypeName","pathNode":{"id":3688,"name":"IERC20","nameLocations":["562:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"562:6:28"},"referencedDeclaration":1657,"src":"562:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":3696,"mutability":"mutable","name":"_vesting","nameLocation":"637:8:28","nodeType":"VariableDeclaration","scope":3944,"src":"599:46:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting[])"},"typeName":{"id":3695,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3691,"name":"address","nodeType":"ElementaryTypeName","src":"607:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"599:29:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting[])"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"baseType":{"id":3693,"nodeType":"UserDefinedTypeName","pathNode":{"id":3692,"name":"Vesting","nameLocations":["618:7:28"],"nodeType":"IdentifierPath","referencedDeclaration":3621,"src":"618:7:28"},"referencedDeclaration":3621,"src":"618:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage_ptr","typeString":"struct IVestingVault.Vesting"}},"id":3694,"nodeType":"ArrayTypeName","src":"618:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr","typeString":"struct IVestingVault.Vesting[]"}}},"visibility":"private"},{"body":{"id":3717,"nodeType":"Block","src":"679:150:28","statements":[{"expression":{"id":3704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3702,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3690,"src":"689:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3703,"name":"token_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3699,"src":"698:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"src":"689:15:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":3705,"nodeType":"ExpressionStatement","src":"689:15:28"},{"expression":{"arguments":[{"id":3707,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"725:18:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3708,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"745:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"749:6:28","memberName":"sender","nodeType":"MemberAccess","src":"745:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3706,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"714:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":3710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"714:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3711,"nodeType":"ExpressionStatement","src":"714:42:28"},{"expression":{"arguments":[{"id":3713,"name":"VAULT_CONTROLLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"780:21:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3714,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"803:18:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3712,"name":"_setRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":217,"src":"766:13:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":3715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"766:56:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3716,"nodeType":"ExpressionStatement","src":"766:56:28"}]},"id":3718,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3699,"mutability":"mutable","name":"token_","nameLocation":"671:6:28","nodeType":"VariableDeclaration","scope":3718,"src":"664:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3698,"nodeType":"UserDefinedTypeName","pathNode":{"id":3697,"name":"IERC20","nameLocations":["664:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"664:6:28"},"referencedDeclaration":1657,"src":"664:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"663:15:28"},"returnParameters":{"id":3701,"nodeType":"ParameterList","parameters":[],"src":"679:0:28"},"scope":3944,"src":"652:177:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[62,2659],"body":{"id":3740,"nodeType":"Block","src":"949:120:28","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3728,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3720,"src":"966:11:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":3730,"name":"IVestingVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3665,"src":"986:13:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVestingVault_$3665_$","typeString":"type(contract IVestingVault)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IVestingVault_$3665_$","typeString":"type(contract IVestingVault)"}],"id":3729,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"981:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"981:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IVestingVault_$3665","typeString":"type(contract IVestingVault)"}},"id":3732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1001:11:28","memberName":"interfaceId","nodeType":"MemberAccess","src":"981:31:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"966:46:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":3736,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3720,"src":"1040:11:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":3734,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1016:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_VestingVault_$3944_$","typeString":"type(contract super VestingVault)"}},"id":3735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1022:17:28","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":62,"src":"1016:23:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":3737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1016:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"966:86:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3727,"id":3739,"nodeType":"Return","src":"959:93:28"}]},"functionSelector":"01ffc9a7","id":3741,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"844:17:28","nodeType":"FunctionDefinition","overrides":{"id":3724,"nodeType":"OverrideSpecifier","overrides":[{"id":3722,"name":"ERC165","nameLocations":["911:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":2660,"src":"911:6:28"},{"id":3723,"name":"AccessControl","nameLocations":["919:13:28"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"919:13:28"}],"src":"902:31:28"},"parameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3720,"mutability":"mutable","name":"interfaceId","nameLocation":"869:11:28","nodeType":"VariableDeclaration","scope":3741,"src":"862:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3719,"name":"bytes4","nodeType":"ElementaryTypeName","src":"862:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"861:20:28"},"returnParameters":{"id":3727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3741,"src":"943:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3725,"name":"bool","nodeType":"ElementaryTypeName","src":"943:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"942:6:28"},"scope":3944,"src":"835:234:28","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[3646],"body":{"id":3819,"nodeType":"Block","src":"1543:559:28","statements":[{"assignments":[3759],"declarations":[{"constant":false,"id":3759,"mutability":"mutable","name":"vestings","nameLocation":"1570:8:28","nodeType":"VariableDeclaration","scope":3819,"src":"1553:25:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting[]"},"typeName":{"baseType":{"id":3757,"nodeType":"UserDefinedTypeName","pathNode":{"id":3756,"name":"Vesting","nameLocations":["1553:7:28"],"nodeType":"IdentifierPath","referencedDeclaration":3621,"src":"1553:7:28"},"referencedDeclaration":3621,"src":"1553:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage_ptr","typeString":"struct IVestingVault.Vesting"}},"id":3758,"nodeType":"ArrayTypeName","src":"1553:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr","typeString":"struct IVestingVault.Vesting[]"}},"visibility":"internal"}],"id":3763,"initialValue":{"baseExpression":{"id":3760,"name":"_vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3696,"src":"1581:8:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting storage ref[] storage ref)"}},"id":3762,"indexExpression":{"id":3761,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"1590:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1581:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage","typeString":"struct IVestingVault.Vesting storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1553:50:28"},{"body":{"id":3799,"nodeType":"Block","src":"1660:259:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3775,"name":"releaseTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"1678:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"baseExpression":{"id":3776,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3759,"src":"1694:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3778,"indexExpression":{"id":3777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"1703:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1694:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}},"id":3779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1706:11:28","memberName":"releaseTime","nodeType":"MemberAccess","referencedDeclaration":3618,"src":"1694:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1678:39:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3798,"nodeType":"IfStatement","src":"1674:235:28","trueBody":{"id":3797,"nodeType":"Block","src":"1719:190:28","statements":[{"expression":{"id":3788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"baseExpression":{"id":3781,"name":"_vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3696,"src":"1737:8:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting storage ref[] storage ref)"}},"id":3784,"indexExpression":{"id":3782,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"1746:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1737:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage","typeString":"struct IVestingVault.Vesting storage ref[] storage ref"}},"id":3785,"indexExpression":{"id":3783,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"1760:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1737:25:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage","typeString":"struct IVestingVault.Vesting storage ref"}},"id":3786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1763:11:28","memberName":"tokenAmount","nodeType":"MemberAccess","referencedDeclaration":3620,"src":"1737:37:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3787,"name":"tokenAmount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3748,"src":"1778:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1737:53:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3789,"nodeType":"ExpressionStatement","src":"1737:53:28"},{"eventCall":{"arguments":[{"id":3791,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"1829:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3792,"name":"releaseTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"1843:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3793,"name":"tokenAmount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3748,"src":"1857:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3790,"name":"VestingLockedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3629,"src":"1813:15:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1813:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3795,"nodeType":"EmitStatement","src":"1808:62:28"},{"functionReturnParameters":3754,"id":3796,"nodeType":"Return","src":"1888:7:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3768,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"1634:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3769,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3759,"src":"1638:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1647:6:28","memberName":"length","nodeType":"MemberAccess","src":"1638:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1634:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3800,"initializationExpression":{"assignments":[3765],"declarations":[{"constant":false,"id":3765,"mutability":"mutable","name":"i","nameLocation":"1627:1:28","nodeType":"VariableDeclaration","scope":3800,"src":"1619:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3764,"name":"uint256","nodeType":"ElementaryTypeName","src":"1619:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3767,"initialValue":{"hexValue":"30","id":3766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1631:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1619:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1655:3:28","subExpression":{"id":3772,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"1655:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3774,"nodeType":"ExpressionStatement","src":"1655:3:28"},"nodeType":"ForStatement","src":"1614:305:28"},{"expression":{"arguments":[{"arguments":[{"id":3806,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"1965:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3807,"name":"releaseTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"1979:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3808,"name":"tokenAmount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3748,"src":"1993:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3805,"name":"Vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"1957:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Vesting_$3621_storage_ptr_$","typeString":"type(struct IVestingVault.Vesting storage pointer)"}},"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1957:49:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}],"expression":{"baseExpression":{"id":3801,"name":"_vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3696,"src":"1929:8:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting storage ref[] storage ref)"}},"id":3803,"indexExpression":{"id":3802,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"1938:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1929:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage","typeString":"struct IVestingVault.Vesting storage ref[] storage ref"}},"id":3804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1952:4:28","memberName":"push","nodeType":"MemberAccess","src":"1929:27:28","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr_$_t_struct$_Vesting_$3621_storage_$returns$__$attached_to$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr_$","typeString":"function (struct IVestingVault.Vesting storage ref[] storage pointer,struct IVestingVault.Vesting storage ref)"}},"id":3810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1929:78:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3811,"nodeType":"ExpressionStatement","src":"1929:78:28"},{"eventCall":{"arguments":[{"id":3813,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"2038:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3814,"name":"releaseTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"2052:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3815,"name":"tokenAmount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3748,"src":"2066:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3812,"name":"VestingLockedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3629,"src":"2022:15:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2022:57:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3817,"nodeType":"EmitStatement","src":"2017:62:28"},{"functionReturnParameters":3754,"id":3818,"nodeType":"Return","src":"2089:7:28"}]},"documentation":{"id":3742,"nodeType":"StructuredDocumentation","src":"1075:267:28","text":" @dev function to create a vesting for the beneficiary\n @param beneficiary_ Beneficiary of tokens after they are released\n @param releaseTime_ Timestamp when token release is enabled\n @param tokenAmount_ Amount of tokens to release"},"functionSelector":"f74bc9d6","id":3820,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":3752,"name":"VAULT_CONTROLLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"1516:21:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3753,"kind":"modifierInvocation","modifierName":{"id":3751,"name":"onlyRole","nameLocations":["1507:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"1507:8:28"},"nodeType":"ModifierInvocation","src":"1507:31:28"}],"name":"addBeneficiary","nameLocation":"1356:14:28","nodeType":"FunctionDefinition","overrides":{"id":3750,"nodeType":"OverrideSpecifier","overrides":[],"src":"1490:8:28"},"parameters":{"id":3749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3744,"mutability":"mutable","name":"beneficiary_","nameLocation":"1388:12:28","nodeType":"VariableDeclaration","scope":3820,"src":"1380:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3743,"name":"address","nodeType":"ElementaryTypeName","src":"1380:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3746,"mutability":"mutable","name":"releaseTime_","nameLocation":"1418:12:28","nodeType":"VariableDeclaration","scope":3820,"src":"1410:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3745,"name":"uint256","nodeType":"ElementaryTypeName","src":"1410:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3748,"mutability":"mutable","name":"tokenAmount_","nameLocation":"1448:12:28","nodeType":"VariableDeclaration","scope":3820,"src":"1440:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3747,"name":"uint256","nodeType":"ElementaryTypeName","src":"1440:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1370:96:28"},"returnParameters":{"id":3754,"nodeType":"ParameterList","parameters":[],"src":"1543:0:28"},"scope":3944,"src":"1347:755:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3652],"body":{"id":3830,"nodeType":"Block","src":"2233:30:28","statements":[{"expression":{"id":3828,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3690,"src":"2250:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"functionReturnParameters":3827,"id":3829,"nodeType":"Return","src":"2243:13:28"}]},"documentation":{"id":3821,"nodeType":"StructuredDocumentation","src":"2108:65:28","text":" @return the address of the token being stored."},"functionSelector":"fc0c546a","id":3831,"implemented":true,"kind":"function","modifiers":[],"name":"token","nameLocation":"2187:5:28","nodeType":"FunctionDefinition","overrides":{"id":3823,"nodeType":"OverrideSpecifier","overrides":[],"src":"2207:8:28"},"parameters":{"id":3822,"nodeType":"ParameterList","parameters":[],"src":"2192:2:28"},"returnParameters":{"id":3827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3826,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3831,"src":"2225:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"},"typeName":{"id":3825,"nodeType":"UserDefinedTypeName","pathNode":{"id":3824,"name":"IERC20","nameLocations":["2225:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":1657,"src":"2225:6:28"},"referencedDeclaration":1657,"src":"2225:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2224:8:28"},"scope":3944,"src":"2178:85:28","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3661],"body":{"id":3846,"nodeType":"Block","src":"2490:46:28","statements":[{"expression":{"baseExpression":{"id":3842,"name":"_vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3696,"src":"2507:8:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting storage ref[] storage ref)"}},"id":3844,"indexExpression":{"id":3843,"name":"beneficiary_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3834,"src":"2516:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2507:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage","typeString":"struct IVestingVault.Vesting storage ref[] storage ref"}},"functionReturnParameters":3841,"id":3845,"nodeType":"Return","src":"2500:29:28"}]},"documentation":{"id":3832,"nodeType":"StructuredDocumentation","src":"2269:126:28","text":" @return the vesting for an address\n @param beneficiary_ the address for which the vesting is returned"},"functionSelector":"f4753b38","id":3847,"implemented":true,"kind":"function","modifiers":[],"name":"vestingFor","nameLocation":"2409:10:28","nodeType":"FunctionDefinition","overrides":{"id":3836,"nodeType":"OverrideSpecifier","overrides":[],"src":"2454:8:28"},"parameters":{"id":3835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3834,"mutability":"mutable","name":"beneficiary_","nameLocation":"2428:12:28","nodeType":"VariableDeclaration","scope":3847,"src":"2420:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3833,"name":"address","nodeType":"ElementaryTypeName","src":"2420:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2419:22:28"},"returnParameters":{"id":3841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3847,"src":"2472:16:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting[]"},"typeName":{"baseType":{"id":3838,"nodeType":"UserDefinedTypeName","pathNode":{"id":3837,"name":"Vesting","nameLocations":["2472:7:28"],"nodeType":"IdentifierPath","referencedDeclaration":3621,"src":"2472:7:28"},"referencedDeclaration":3621,"src":"2472:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage_ptr","typeString":"struct IVestingVault.Vesting"}},"id":3839,"nodeType":"ArrayTypeName","src":"2472:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr","typeString":"struct IVestingVault.Vesting[]"}},"visibility":"internal"}],"src":"2471:18:28"},"scope":3944,"src":"2400:136:28","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3664],"body":{"id":3942,"nodeType":"Block","src":"2643:693:28","statements":[{"assignments":[3856],"declarations":[{"constant":false,"id":3856,"mutability":"mutable","name":"vestings","nameLocation":"2670:8:28","nodeType":"VariableDeclaration","scope":3942,"src":"2653:25:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting[]"},"typeName":{"baseType":{"id":3854,"nodeType":"UserDefinedTypeName","pathNode":{"id":3853,"name":"Vesting","nameLocations":["2653:7:28"],"nodeType":"IdentifierPath","referencedDeclaration":3621,"src":"2653:7:28"},"referencedDeclaration":3621,"src":"2653:7:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage_ptr","typeString":"struct IVestingVault.Vesting"}},"id":3855,"nodeType":"ArrayTypeName","src":"2653:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_ptr","typeString":"struct IVestingVault.Vesting[]"}},"visibility":"internal"}],"id":3861,"initialValue":{"baseExpression":{"id":3857,"name":"_vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3696,"src":"2681:8:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting storage ref[] storage ref)"}},"id":3860,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3858,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"2690:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2690:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2681:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage","typeString":"struct IVestingVault.Vesting storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2653:50:28"},{"assignments":[3863],"declarations":[{"constant":false,"id":3863,"mutability":"mutable","name":"tokensToRelease","nameLocation":"2721:15:28","nodeType":"VariableDeclaration","scope":3942,"src":"2713:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3862,"name":"uint256","nodeType":"ElementaryTypeName","src":"2713:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3865,"initialValue":{"hexValue":"30","id":3864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2739:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2713:27:28"},{"body":{"id":3918,"nodeType":"Block","src":"2796:325:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":3877,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2814:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3879,"indexExpression":{"id":3878,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"2823:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2814:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}},"id":3880,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2826:11:28","memberName":"releaseTime","nodeType":"MemberAccess","referencedDeclaration":3618,"src":"2814:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":3881,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2841:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2847:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"2841:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2814:42:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3917,"nodeType":"IfStatement","src":"2810:301:28","trueBody":{"id":3916,"nodeType":"Block","src":"2858:253:28","statements":[{"expression":{"id":3891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3884,"name":"tokensToRelease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"2876:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3885,"name":"tokensToRelease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"2894:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"baseExpression":{"id":3886,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2912:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3888,"indexExpression":{"id":3887,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"2921:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2912:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}},"id":3889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2924:11:28","memberName":"tokenAmount","nodeType":"MemberAccess","referencedDeclaration":3620,"src":"2912:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2894:41:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2876:59:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3892,"nodeType":"ExpressionStatement","src":"2876:59:28"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3894,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"2974:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2974:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3896,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2988:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3898,"indexExpression":{"id":3897,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"2997:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2988:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}},"id":3899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3000:11:28","memberName":"releaseTime","nodeType":"MemberAccess","referencedDeclaration":3618,"src":"2988:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":3900,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"3013:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3902,"indexExpression":{"id":3901,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"3022:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3013:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_memory_ptr","typeString":"struct IVestingVault.Vesting memory"}},"id":3903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3025:11:28","memberName":"tokenAmount","nodeType":"MemberAccess","referencedDeclaration":3620,"src":"3013:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3893,"name":"VestingReleased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3637,"src":"2958:15:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2958:79:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3905,"nodeType":"EmitStatement","src":"2953:84:28"},{"expression":{"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"baseExpression":{"id":3906,"name":"_vesting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3696,"src":"3055:8:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage_$","typeString":"mapping(address => struct IVestingVault.Vesting storage ref[] storage ref)"}},"id":3910,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3907,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"3064:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3064:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3055:22:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_storage_$dyn_storage","typeString":"struct IVestingVault.Vesting storage ref[] storage ref"}},"id":3911,"indexExpression":{"id":3909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"3078:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3055:25:28","typeDescriptions":{"typeIdentifier":"t_struct$_Vesting_$3621_storage","typeString":"struct IVestingVault.Vesting storage ref"}},"id":3912,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3081:11:28","memberName":"tokenAmount","nodeType":"MemberAccess","referencedDeclaration":3620,"src":"3055:37:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3095:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3055:41:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3915,"nodeType":"ExpressionStatement","src":"3055:41:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3870,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"2770:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3871,"name":"vestings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2774:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Vesting_$3621_memory_ptr_$dyn_memory_ptr","typeString":"struct IVestingVault.Vesting memory[] memory"}},"id":3872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2783:6:28","memberName":"length","nodeType":"MemberAccess","src":"2774:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2770:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3919,"initializationExpression":{"assignments":[3867],"declarations":[{"constant":false,"id":3867,"mutability":"mutable","name":"i","nameLocation":"2763:1:28","nodeType":"VariableDeclaration","scope":3919,"src":"2755:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3866,"name":"uint256","nodeType":"ElementaryTypeName","src":"2755:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3869,"initialValue":{"hexValue":"30","id":3868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2767:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2755:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2791:3:28","subExpression":{"id":3874,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"2791:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3876,"nodeType":"ExpressionStatement","src":"2791:3:28"},"nodeType":"ForStatement","src":"2750:371:28"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3921,"name":"tokensToRelease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"3138:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3156:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3138:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"56657374696e675661756c743a2043616e6e6f742072656c65617365203020746f6b656e73","id":3924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3159:39:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_0425e356e44b138f30baacd236efa5966916acf2e2d3456c93edbbc0b437d8e9","typeString":"literal_string \"VestingVault: Cannot release 0 tokens\""},"value":"VestingVault: Cannot release 0 tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0425e356e44b138f30baacd236efa5966916acf2e2d3456c93edbbc0b437d8e9","typeString":"literal_string \"VestingVault: Cannot release 0 tokens\""}],"id":3920,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3130:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3130:69:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3926,"nodeType":"ExpressionStatement","src":"3130:69:28"},{"assignments":[3928],"declarations":[{"constant":false,"id":3928,"mutability":"mutable","name":"success","nameLocation":"3215:7:28","nodeType":"VariableDeclaration","scope":3942,"src":"3210:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3927,"name":"bool","nodeType":"ElementaryTypeName","src":"3210:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3936,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3932,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"3242:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3242:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3934,"name":"tokensToRelease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"3256:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3929,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3831,"src":"3225:5:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IERC20_$1657_$","typeString":"function () view returns (contract IERC20)"}},"id":3930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3225:7:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1657","typeString":"contract IERC20"}},"id":3931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3233:8:28","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1624,"src":"3225:16:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3225:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3210:62:28"},{"expression":{"arguments":[{"id":3938,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3928,"src":"3290:7:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e207472616e7366657220756e7375636365737366756c","id":3939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3299:29:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4a089f7683eeafdc5ba80b3e16c3490611fd4beb7e7e74a93c07558b969bdc0","typeString":"literal_string \"Token transfer unsuccessful\""},"value":"Token transfer unsuccessful"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c4a089f7683eeafdc5ba80b3e16c3490611fd4beb7e7e74a93c07558b969bdc0","typeString":"literal_string \"Token transfer unsuccessful\""}],"id":3937,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3282:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3282:47:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3941,"nodeType":"ExpressionStatement","src":"3282:47:28"}]},"documentation":{"id":3848,"nodeType":"StructuredDocumentation","src":"2542:61:28","text":" @dev releases the tokens of the msg sender"},"functionSelector":"86d1a69f","id":3943,"implemented":true,"kind":"function","modifiers":[],"name":"release","nameLocation":"2617:7:28","nodeType":"FunctionDefinition","overrides":{"id":3850,"nodeType":"OverrideSpecifier","overrides":[],"src":"2634:8:28"},"parameters":{"id":3849,"nodeType":"ParameterList","parameters":[],"src":"2624:2:28"},"returnParameters":{"id":3851,"nodeType":"ParameterList","parameters":[],"src":"2643:0:28"},"scope":3944,"src":"2608:728:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":3945,"src":"406:2932:28","usedErrors":[305,308],"usedEvents":[317,326,335,3629,3637]}],"src":"59:3280:28"},"id":28}},"contracts":{"@openzeppelin/contracts/access/AccessControl.sol":{"AccessControl":{"abi":[{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"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"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\"}],\"devdoc\":{\"details\":\"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: ```solidity 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}: ```solidity 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. We recommend using {AccessControlDefaultAdminRules} to enforce additional security measures for this role.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67\",\"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/IAccessControl.sol":{"IAccessControl":{"abi":[{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"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"},{"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":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\"}],\"devdoc\":{\"details\":\"External interface of AccessControl declared to support ERC-165 detection.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"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 `callerConfirmation`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/finance/VestingWallet.sol":{"VestingWallet":{"abi":[{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint64","name":"durationSeconds","type":"uint64"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"end","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_uint64_fromMemory":{"entryPoint":294,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60c0601f610b9338819003918201601f19168301916001600160401b038311848410176101105780849260609460405283398101031261010b5780516001600160a01b038116919082900361010b57610066604061005f60208401610126565b9201610126565b9082156100f557600080546001600160a01b031981168517825560405194916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805260a052610a58908161013b8239608051818181610217015281816108dc0152610911015260a0518181816106a8015281816108b101526109790152f35b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160401b038216820361010b5756fe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630a17b06b146106cc5780630fb5a6b414610687578063191655871461054a578063715018a6146104cc578063810ec23b1461049257806386d1a69f146102f75780638da5cb5b146102c357806396132521146102a55780639852595c1461025e578063a3f8eace1461023b578063be9a6555146101f6578063efbe1c1c146101db578063f2fde38b146101075763fbccedae0361000e57346101025760006003193601126101025760206100fa6100f1476100ec67ffffffffffffffff42169160015490610727565b610901565b60015490610853565b604051908152f35b600080fd5b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff610135610704565b61013d6109d3565b1680156101ac5773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346101025760006003193601126101025760206100fa6108a3565b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760206100fa610259610704565b610860565b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff61028c610704565b1660005260026020526020604060002054604051908152f35b34610102576000600319360112610102576020600154604051908152f35b3461010257600060031936011261010257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b3461010257600060031936011261010257610324476100ec67ffffffffffffffff42169160015490610727565b61033b6103346001548093610853565b8092610727565b6001557fda9d4e5f101b8b9b1c5b76d0c5a9f7923571acfc02376aa076b75a8c080c956b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff6000541681471061046057600080809381935af13d15610458573d9067ffffffffffffffff821161042957604051916103de60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610763565b82523d6000602084013e5b156103f057005b8051156103ff57805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060906103e9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b34610102576040600319360112610102576104ab610704565b6024359067ffffffffffffffff82168203610102576020916100fa916107a4565b34610102576000600319360112610102576104e56109d3565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010257602060031936011261010257610563610704565b6020600073ffffffffffffffffffffffffffffffffffffffff61058584610860565b931692838252600283526040822061059e828254610727565b9055837fc0e523490dd523c33b1878c9eb14ff46991e3f5b2cd33710918618f2a39cba1b84604051848152a273ffffffffffffffffffffffffffffffffffffffff8254169060405190848201927fa9059cbb0000000000000000000000000000000000000000000000000000000084526024830152604482015260448152610627606482610763565b519082855af11561067b576000513d6106725750803b155b61064557005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6001141561063f565b6040513d6000823e3d90fd5b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760043567ffffffffffffffff81168103610102576100fa6020916100ec4760015490610727565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010257565b9190820180921161073457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761042957604052565b73ffffffffffffffffffffffffffffffffffffffff16906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa90811561067b5760009161081f575b506100ec9061081c93600052600260205260406000205490610727565b90565b90506020813d60201161084b575b8161083a60209383610763565b81010312610102575161081c6107ff565b3d915061082d565b9190820391821161073457565b61081c9073ffffffffffffffffffffffffffffffffffffffff61088d67ffffffffffffffff4216836107a4565b9116600052600260205260406000205490610853565b61081c67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610727565b9067ffffffffffffffff908116907f0000000000000000000000000000000000000000000000000000000000000000168082101561094157505050600090565b6109496108a3565b821061095457505090565b61095d91610853565b908181029181830414901517156107345767ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156109a4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff6000541633036109f457565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea26469706673582212202f594eb2fdf2e38302150eacd6c1fff5bb8a086637ad9434f980f3fdd4876aea64736f6c634300081b0033","opcodes":"PUSH1 0xC0 PUSH1 0x1F PUSH2 0xB93 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x110 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x10B JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 SWAP1 DUP3 SWAP1 SUB PUSH2 0x10B JUMPI PUSH2 0x66 PUSH1 0x40 PUSH2 0x5F PUSH1 0x20 DUP5 ADD PUSH2 0x126 JUMP JUMPDEST SWAP3 ADD PUSH2 0x126 JUMP JUMPDEST SWAP1 DUP3 ISZERO PUSH2 0xF5 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND DUP6 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH2 0xA58 SWAP1 DUP2 PUSH2 0x13B DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x217 ADD MSTORE DUP2 DUP2 PUSH2 0x8DC ADD MSTORE PUSH2 0x911 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x6A8 ADD MSTORE DUP2 DUP2 PUSH2 0x8B1 ADD MSTORE PUSH2 0x979 ADD MSTORE RETURN JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10B JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x1B JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA17B06B EQ PUSH2 0x6CC JUMPI DUP1 PUSH4 0xFB5A6B4 EQ PUSH2 0x687 JUMPI DUP1 PUSH4 0x19165587 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0x810EC23B EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0x96132521 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x9852595C EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0xA3F8EACE EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xEFBE1C1C EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x107 JUMPI PUSH4 0xFBCCEDAE SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0xF1 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x901 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x135 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x13D PUSH2 0x9D3 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND OR PUSH1 0x0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x8A3 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x259 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x860 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x28C PUSH2 0x704 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x324 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x33B PUSH2 0x334 PUSH1 0x1 SLOAD DUP1 SWAP4 PUSH2 0x853 JUMP JUMPDEST DUP1 SWAP3 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH32 0xDA9D4E5F101B8B9B1C5B76D0C5A9F7923571ACFC02376AA076B75A8C080C956B PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND DUP2 SELFBALANCE LT PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 DUP1 SWAP4 DUP2 SWAP4 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x458 JUMPI RETURNDATASIZE SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x429 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3DE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x763 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x3F0 JUMPI STOP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3FF JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x3E9 JUMP JUMPDEST POP SELFBALANCE PUSH32 0xCF47918100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4AB PUSH2 0x704 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI PUSH1 0x20 SWAP2 PUSH2 0xFA SWAP2 PUSH2 0x7A4 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4E5 PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x563 PUSH2 0x704 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x585 DUP5 PUSH2 0x860 JUMP JUMPDEST SWAP4 AND SWAP3 DUP4 DUP3 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 DUP3 KECCAK256 PUSH2 0x59E DUP3 DUP3 SLOAD PUSH2 0x727 JUMP JUMPDEST SWAP1 SSTORE DUP4 PUSH32 0xC0E523490DD523C33B1878C9EB14FF46991E3F5B2CD33710918618F2A39CBA1B DUP5 PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE LOG2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SLOAD AND SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP5 DUP3 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x627 PUSH1 0x64 DUP3 PUSH2 0x763 JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 MLOAD RETURNDATASIZE PUSH2 0x672 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x645 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x63F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x102 JUMPI PUSH2 0xFA PUSH1 0x20 SWAP2 PUSH2 0xEC SELFBALANCE PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x429 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 SWAP2 PUSH2 0x81F JUMPI JUMPDEST POP PUSH2 0xEC SWAP1 PUSH2 0x81C SWAP4 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x84B JUMPI JUMPDEST DUP2 PUSH2 0x83A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x763 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x102 JUMPI MLOAD PUSH2 0x81C PUSH2 0x7FF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x82D JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH2 0x81C SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x88D PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND DUP4 PUSH2 0x7A4 JUMP JUMPDEST SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH2 0x81C PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x727 JUMP JUMPDEST SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH32 0x0 AND DUP1 DUP3 LT ISZERO PUSH2 0x941 JUMPI POP POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x949 PUSH2 0x8A3 JUMP JUMPDEST DUP3 LT PUSH2 0x954 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x95D SWAP2 PUSH2 0x853 JUMP JUMPDEST SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x734 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP2 ISZERO PUSH2 0x9A4 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND CALLER SUB PUSH2 0x9F4 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F MSIZE 0x4E 0xB2 REVERT CALLCODE 0xE3 DUP4 MUL ISZERO 0xE 0xAC 0xD6 0xC1 SELFDESTRUCT CREATE2 0xBB DUP11 ADDMOD PUSH7 0x37AD9434F980F3 REVERT 0xD4 DUP8 PUSH11 0xEA64736F6C634300081B00 CALLER ","sourceMap":"2053:4001:3:-:0;;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;-1:-1:-1;;;;;2053:4001:3;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2053:4001:3;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;1273:26:2;;;1269:95;;-1:-1:-1;2053:4001:3;;-1:-1:-1;;;;;;2053:4001:3;;;;;;;;;;-1:-1:-1;;;;;2053:4001:3;;;;3052:40:2;;-1:-1:-1;3052:40:2;2644:23:3;;2677:27;;2053:4001;;;;;;2644:23;2053:4001;;;;;;;;;;;;;;;2677:27;2053:4001;;;;;;;;;;;;;;;;1269:95:2;1322:31;;;-1:-1:-1;1322:31:2;-1:-1:-1;1322:31:2;2053:4001:3;;-1:-1:-1;1322:31:2;2053:4001:3;-1:-1:-1;2053:4001:3;;;;;;-1:-1:-1;2053:4001:3;;;;;-1:-1:-1;2053:4001:3;;;;-1:-1:-1;;;;;2053:4001:3;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1796,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint256":{"entryPoint":1831,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2131,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1891,"id":null,"parameterSlots":2,"returnSlots":0},"fun_checkOwner":{"entryPoint":2515,"id":463,"parameterSlots":0,"returnSlots":0},"fun_end":{"entryPoint":2211,"id":621,"parameterSlots":0,"returnSlots":1},"fun_releasable":{"entryPoint":2144,"id":683,"parameterSlots":1,"returnSlots":1},"fun_vestedAmount":{"entryPoint":1956,"id":796,"parameterSlots":2,"returnSlots":1},"fun_vestingSchedule":{"entryPoint":2305,"id":836,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"561":[{"length":32,"start":535},{"length":32,"start":2268},{"length":32,"start":2321}],"563":[{"length":32,"start":1704},{"length":32,"start":2225},{"length":32,"start":2425}]},"linkReferences":{},"object":"6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630a17b06b146106cc5780630fb5a6b414610687578063191655871461054a578063715018a6146104cc578063810ec23b1461049257806386d1a69f146102f75780638da5cb5b146102c357806396132521146102a55780639852595c1461025e578063a3f8eace1461023b578063be9a6555146101f6578063efbe1c1c146101db578063f2fde38b146101075763fbccedae0361000e57346101025760006003193601126101025760206100fa6100f1476100ec67ffffffffffffffff42169160015490610727565b610901565b60015490610853565b604051908152f35b600080fd5b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff610135610704565b61013d6109d3565b1680156101ac5773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346101025760006003193601126101025760206100fa6108a3565b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760206100fa610259610704565b610860565b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff61028c610704565b1660005260026020526020604060002054604051908152f35b34610102576000600319360112610102576020600154604051908152f35b3461010257600060031936011261010257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b3461010257600060031936011261010257610324476100ec67ffffffffffffffff42169160015490610727565b61033b6103346001548093610853565b8092610727565b6001557fda9d4e5f101b8b9b1c5b76d0c5a9f7923571acfc02376aa076b75a8c080c956b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff6000541681471061046057600080809381935af13d15610458573d9067ffffffffffffffff821161042957604051916103de60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610763565b82523d6000602084013e5b156103f057005b8051156103ff57805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060906103e9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b34610102576040600319360112610102576104ab610704565b6024359067ffffffffffffffff82168203610102576020916100fa916107a4565b34610102576000600319360112610102576104e56109d3565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010257602060031936011261010257610563610704565b6020600073ffffffffffffffffffffffffffffffffffffffff61058584610860565b931692838252600283526040822061059e828254610727565b9055837fc0e523490dd523c33b1878c9eb14ff46991e3f5b2cd33710918618f2a39cba1b84604051848152a273ffffffffffffffffffffffffffffffffffffffff8254169060405190848201927fa9059cbb0000000000000000000000000000000000000000000000000000000084526024830152604482015260448152610627606482610763565b519082855af11561067b576000513d6106725750803b155b61064557005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6001141561063f565b6040513d6000823e3d90fd5b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760043567ffffffffffffffff81168103610102576100fa6020916100ec4760015490610727565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010257565b9190820180921161073457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761042957604052565b73ffffffffffffffffffffffffffffffffffffffff16906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa90811561067b5760009161081f575b506100ec9061081c93600052600260205260406000205490610727565b90565b90506020813d60201161084b575b8161083a60209383610763565b81010312610102575161081c6107ff565b3d915061082d565b9190820391821161073457565b61081c9073ffffffffffffffffffffffffffffffffffffffff61088d67ffffffffffffffff4216836107a4565b9116600052600260205260406000205490610853565b61081c67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610727565b9067ffffffffffffffff908116907f0000000000000000000000000000000000000000000000000000000000000000168082101561094157505050600090565b6109496108a3565b821061095457505090565b61095d91610853565b908181029181830414901517156107345767ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156109a4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff6000541633036109f457565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea26469706673582212202f594eb2fdf2e38302150eacd6c1fff5bb8a086637ad9434f980f3fdd4876aea64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x1B JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA17B06B EQ PUSH2 0x6CC JUMPI DUP1 PUSH4 0xFB5A6B4 EQ PUSH2 0x687 JUMPI DUP1 PUSH4 0x19165587 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0x810EC23B EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0x96132521 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x9852595C EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0xA3F8EACE EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xEFBE1C1C EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x107 JUMPI PUSH4 0xFBCCEDAE SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0xF1 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x901 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x135 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x13D PUSH2 0x9D3 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND OR PUSH1 0x0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x8A3 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x259 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x860 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x28C PUSH2 0x704 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x324 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x33B PUSH2 0x334 PUSH1 0x1 SLOAD DUP1 SWAP4 PUSH2 0x853 JUMP JUMPDEST DUP1 SWAP3 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH32 0xDA9D4E5F101B8B9B1C5B76D0C5A9F7923571ACFC02376AA076B75A8C080C956B PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND DUP2 SELFBALANCE LT PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 DUP1 SWAP4 DUP2 SWAP4 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x458 JUMPI RETURNDATASIZE SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x429 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3DE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x763 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x3F0 JUMPI STOP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3FF JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x3E9 JUMP JUMPDEST POP SELFBALANCE PUSH32 0xCF47918100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4AB PUSH2 0x704 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI PUSH1 0x20 SWAP2 PUSH2 0xFA SWAP2 PUSH2 0x7A4 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4E5 PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x563 PUSH2 0x704 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x585 DUP5 PUSH2 0x860 JUMP JUMPDEST SWAP4 AND SWAP3 DUP4 DUP3 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 DUP3 KECCAK256 PUSH2 0x59E DUP3 DUP3 SLOAD PUSH2 0x727 JUMP JUMPDEST SWAP1 SSTORE DUP4 PUSH32 0xC0E523490DD523C33B1878C9EB14FF46991E3F5B2CD33710918618F2A39CBA1B DUP5 PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE LOG2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SLOAD AND SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP5 DUP3 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x627 PUSH1 0x64 DUP3 PUSH2 0x763 JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 MLOAD RETURNDATASIZE PUSH2 0x672 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x645 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x63F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x102 JUMPI PUSH2 0xFA PUSH1 0x20 SWAP2 PUSH2 0xEC SELFBALANCE PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x429 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 SWAP2 PUSH2 0x81F JUMPI JUMPDEST POP PUSH2 0xEC SWAP1 PUSH2 0x81C SWAP4 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x84B JUMPI JUMPDEST DUP2 PUSH2 0x83A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x763 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x102 JUMPI MLOAD PUSH2 0x81C PUSH2 0x7FF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x82D JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH2 0x81C SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x88D PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND DUP4 PUSH2 0x7A4 JUMP JUMPDEST SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH2 0x81C PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x727 JUMP JUMPDEST SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH32 0x0 AND DUP1 DUP3 LT ISZERO PUSH2 0x941 JUMPI POP POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x949 PUSH2 0x8A3 JUMP JUMPDEST DUP3 LT PUSH2 0x954 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x95D SWAP2 PUSH2 0x853 JUMP JUMPDEST SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x734 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP2 ISZERO PUSH2 0x9A4 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND CALLER SUB PUSH2 0x9F4 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F MSIZE 0x4E 0xB2 REVERT CALLCODE 0xE3 DUP4 MUL ISZERO 0xE 0xAC 0xD6 0xC1 SELFDESTRUCT CREATE2 0xBB DUP11 ADDMOD PUSH7 0x37AD9434F980F3 REVERT 0xD4 DUP8 PUSH11 0xEA64736F6C634300081B00 CALLER ","sourceMap":"2053:4001:3:-:0;;;;;;;;;-1:-1:-1;2053:4001:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;;3787:50;5092:63;5109:21;:34;2053:4001;3807:15;2053:4001;;3436:9;2053:4001;5109:34;;:::i;:::-;5092:63;:::i;:::-;3436:9;2053:4001;3787:50;;:::i;:::-;2053:4001;;;;;;;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;:::i;:::-;1500:62:2;;:::i;:::-;2053:4001:3;2627:22:2;;2623:91;;2053:4001:3;;;;;;;;;;;3052:40:2;2053:4001:3;3052:40:2;;2053:4001:3;2623:91:2;2672:31;2053:4001:3;2672:31:2;2053:4001:3;;;;;2672:31:2;2053:4001:3;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;;2964:6;2053:4001;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;:::i;:::-;;;;3607:14;2053:4001;;;;;;;;;;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;;3436:9;2053:4001;;;;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;5092:63;5109:21;:34;2053:4001;3807:15;2053:4001;;3436:9;2053:4001;5109:34;;:::i;5092:63::-;4372:19;3787:50;3436:9;2053:4001;3787:50;;;:::i;:::-;4372:19;;;:::i;:::-;3436:9;2053:4001;4406:21;2053:4001;;;;;;4406:21;2053:4001;;;;1375:21:12;;:30;1371:125;;2053:4001:3;1548:33:12;;;;;;;2053:4001:3;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1595:8:12;1591:58;;2053:4001:3;1591:58:12;2053:4001:3;;5690:21:12;:17;;5815:158;;;2053:4001:3;5815:158:12;;5686:354;6010:19;2053:4001:3;6010:19:12;2053:4001:3;;6010:19:12;2053:4001:3;;;;;;;;;;;;;;;1371:125:12;1455:21;;1428:57;2053:4001:3;1428:57:12;2053:4001:3;;;;;;1428:57:12;2053:4001:3;;;;;-1:-1:-1;;2053:4001:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2053:4001:3;;;;;1500:62:2;;:::i;:::-;2053:4001:3;;;;;;;;;;3052:40:2;;;;2053:4001:3;;;;;;-1:-1:-1;;2053:4001:3;;;;;;;:::i;:::-;;;;4685:17;;;:::i;:::-;2053:4001;;;;;;4712:14;2053:4001;;;;;4712:31;2053:4001;;;4712:31;:::i;:::-;2053:4001;;;4758:28;2053:4001;;;;;;4758:28;2053:4001;;;;;;;1328:43:11;;;;;2053:4001:3;1328:43:11;;;;;2053:4001:3;;;;;;1328:43:11;;;;;;:::i;:::-;8507:421;;;;;;;;;2053:4001:3;8507:421:11;;8942:15;;8960:26;;;:31;8942:68;8938:146;;2053:4001:3;8938:146:11;9033:40;2053:4001:3;9033:40:11;2053:4001:3;;1328:43:11;2053:4001:3;9033:40:11;8942:68;9009:1;8994:16;;8942:68;;8507:421;2053:4001:3;8507:421:11;;2053:4001:3;8507:421:11;;;;;2053:4001:3;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;;3119:9;2053:4001;;;;;;;;;-1:-1:-1;;2053:4001:3;;;;;;;;;;;;;;5092:63;2053:4001;;5109:34;:21;3436:9;2053:4001;5109:34;;:::i;2053:4001::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5303:202::-;2053:4001;;;;;;5430:38;;5462:4;5430:38;;;2053:4001;;5430:38;;;;;;;;;;;-1:-1:-1;5430:38:3;;;5303:202;2053:4001;5430:56;2053:4001;5413:85;2053:4001;-1:-1:-1;2053:4001:3;3607:14;2053:4001;;;-1:-1:-1;2053:4001:3;;5430:56;;:::i;5413:85::-;5303:202;:::o;5430:38::-;;;2053:4001;5430:38;;2053:4001;5430:38;;;;;;2053:4001;5430:38;;;:::i;:::-;;;2053:4001;;;;;5413:85;5430:38;;;;;-1:-1:-1;5430:38:3;;2053:4001;;;;;;;;;;:::o;3992:159::-;4082:62;3992:159;2053:4001;4082:44;2053:4001;4109:15;2053:4001;4082:44;;:::i;:::-;2053:4001;;-1:-1:-1;2053:4001:3;3607:14;2053:4001;;;-1:-1:-1;2053:4001:3;;4082:62;;:::i;3199:97::-;3269:20;2053:4001;3119:9;2053:4001;;2964:6;2053:4001;3269:20;:::i;5700:352::-;;2053:4001;;;;;2964:6;2053:4001;5823:19;;;;;;5858:8;;;2053:4001;5858:8;:::o;5819:227::-;5900:5;;:::i;:::-;5887:18;;5900:5;;5921:22;;;:::o;5883:163::-;6001:19;;;:::i;:::-;2053:4001;;;;;;;;;;;;;;;;3119:9;2053:4001;;;;;;;5974:61;:::o;2053:4001::-;;;;;;;;;;1796:162:2;2053:4001:3;1710:6:2;2053:4001:3;;735:10:13;1855:23:2;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:13;1901:40:2;2053:4001:3;;1710:6:2;1901:40"},"methodIdentifiers":{"duration()":"0fb5a6b4","end()":"efbe1c1c","owner()":"8da5cb5b","releasable()":"fbccedae","releasable(address)":"a3f8eace","release()":"86d1a69f","release(address)":"19165587","released()":"96132521","released(address)":"9852595c","renounceOwnership()":"715018a6","start()":"be9a6555","transferOwnership(address)":"f2fde38b","vestedAmount(address,uint64)":"810ec23b","vestedAmount(uint64)":"0a17b06b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"startTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"durationSeconds\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EtherReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"duration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"end\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"vestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"vestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"A vesting wallet is an ownable contract that can receive native currency and ERC-20 tokens, and release these assets to the wallet owner, also referred to as \\\"beneficiary\\\", according to a vesting schedule. Any assets transferred to this contract will follow the vesting schedule as if they were locked from the beginning. Consequently, if the vesting has already started, any amount of tokens sent to this contract will (at least partly) be immediately releasable. By setting the duration to 0, one can configure this contract to behave like an asset timelock that holds tokens for a beneficiary until a specified time. NOTE: Since the wallet is {Ownable}, and ownership can be transferred, it is possible to sell unvested tokens. Preventing this in a smart contract is difficult, considering that: 1) a beneficiary address could be a counterfactually deployed contract, 2) there is likely to be a migration path for EOAs to become contracts in the near future. NOTE: When using this contract with any token whose balance is adjusted automatically (i.e. a rebase token), make sure to account the supply/balance adjustment in the vesting schedule to ensure the vested amount is as intended. NOTE: Chains with support for native ERC20s may allow the vesting wallet to withdraw the underlying asset as both an ERC20 and as native currency. For example, if chain C supports token A and the wallet gets deposited 100 A, then at 50% of the vesting period, the beneficiary can withdraw 50 A as ERC20 and 25 A as native currency (totaling 75 A). Consider disabling one of the withdrawal methods.\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Sets the beneficiary (owner), the start timestamp and the vesting duration (in seconds) of the vesting wallet.\"},\"duration()\":{\"details\":\"Getter for the vesting duration.\"},\"end()\":{\"details\":\"Getter for the end timestamp.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"releasable()\":{\"details\":\"Getter for the amount of releasable eth.\"},\"releasable(address)\":{\"details\":\"Getter for the amount of releasable `token` tokens. `token` should be the address of an {IERC20} contract.\"},\"release()\":{\"details\":\"Release the native token (ether) that have already vested. Emits a {EtherReleased} event.\"},\"release(address)\":{\"details\":\"Release the tokens that have already vested. Emits a {ERC20Released} event.\"},\"released()\":{\"details\":\"Amount of eth already released\"},\"released(address)\":{\"details\":\"Amount of token already released\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"start()\":{\"details\":\"Getter for the start timestamp.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"vestedAmount(address,uint64)\":{\"details\":\"Calculates the amount of tokens that has already vested. Default implementation is a linear vesting curve.\"},\"vestedAmount(uint64)\":{\"details\":\"Calculates the amount of ether that has already vested. Default implementation is a linear vesting curve.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/finance/VestingWallet.sol\":\"VestingWallet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/finance/VestingWallet.sol\":{\"keccak256\":\"0x79de2c47546e7d9e9785dff775e1cadda15fa877ff956f5b33b7a572e4d43e5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c431f66acb879d3dba4f4e32a21efcad38b49983cfc0a31d49bfa95a738c9f6\",\"dweb:/ipfs/QmQodRbcvFSLc7Cu6XXmGk75CZbsLmL1aZTtjeiDXVagtq\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"IERC1363":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"}],"name":"transferAndCall","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":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveAndCall(address,uint256)":"3177029f","approveAndCall(address,uint256,bytes)":"cae9ca51","balanceOf(address)":"70a08231","supportsInterface(bytes4)":"01ffc9a7","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferAndCall(address,uint256)":"1296ee62","transferAndCall(address,uint256,bytes)":"4000aea0","transferFrom(address,address,uint256)":"23b872dd","transferFromAndCall(address,address,uint256)":"d8fbe994","transferFromAndCall(address,address,uint256,bytes)":"c1d34b89"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"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\"}],\"name\":\"transferAndCall\",\"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\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens 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.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. 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 ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. Both values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"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 default value returned by this function, unless it's 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}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a\",\"dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens 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.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens 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.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212209e2e453fc0911a3f1f8528ff26a0fbe433a7b4bee7fe9426dc7bbfbbfac089d264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x2E GASLIMIT EXTCODEHASH 0xC0 SWAP2 BYTE EXTCODEHASH 0x1F DUP6 0x28 SELFDESTRUCT 0x26 LOG0 0xFB 0xE4 CALLER 0xA7 0xB4 0xBE 0xE7 INVALID SWAP5 0x26 0xDC PUSH28 0xBFBBFAC089D264736F6C634300081B00330000000000000000000000 ","sourceMap":"698:9376:11:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"600080fdfea26469706673582212209e2e453fc0911a3f1f8528ff26a0fbe433a7b4bee7fe9426dc7bbfbbfac089d264736f6c634300081b0033","opcodes":"PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x2E GASLIMIT EXTCODEHASH 0xC0 SWAP2 BYTE EXTCODEHASH 0x1F DUP6 0x28 SELFDESTRUCT 0x26 LOG0 0xFB 0xE4 CALLER 0xA7 0xB4 0xBE 0xE7 INVALID SWAP5 0x26 0xDC PUSH28 0xBFBBFAC089D264736F6C634300081B00330000000000000000000000 ","sourceMap":"698:9376:11:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220c564db79004ef96d335ae64fe81f5e6c875bc1c9701ed721858f4caf50f2439c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 PUSH5 0xDB79004EF9 PUSH14 0x335AE64FE81F5E6C875BC1C9701E 0xD7 0x21 DUP6 DUP16 0x4C 0xAF POP CALLCODE NUMBER SWAP13 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"233:5815:12:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"600080fdfea2646970667358221220c564db79004ef96d335ae64fe81f5e6c875bc1c9701ed721858f4caf50f2439c64736f6c634300081b0033","opcodes":"PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC5 PUSH5 0xDB79004EF9 PUSH14 0x335AE64FE81F5E6C875BC1C9701E 0xD7 0x21 DUP6 DUP16 0x4C 0xAF POP CALLCODE NUMBER SWAP13 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"233:5815:12:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MissingPrecompile","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212206563c7e9308ca6c3ee5386549883347e477d0c27e5dce2b23d1a78f812104d0564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x63C7E9308CA6 0xC3 0xEE MSTORE8 DUP7 SLOAD SWAP9 DUP4 CALLVALUE PUSH31 0x477D0C27E5DCE2B23D1A78F812104D0564736F6C634300081B003300000000 ","sourceMap":"411:484:14:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"600080fdfea26469706673582212206563c7e9308ca6c3ee5386549883347e477d0c27e5dce2b23d1a78f812104d0564736f6c634300081b0033","opcodes":"PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x63C7E9308CA6 0xC3 0xEE MSTORE8 DUP7 SLOAD SWAP9 DUP4 CALLVALUE PUSH31 0x477D0C27E5DCE2B23D1A78F812104D0564736F6C634300081B003300000000 ","sourceMap":"411:484:14:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Pausable.sol":{"Pausable":{"abi":[{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"paused()":"5c975abb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/ReentrancyGuard.sol":{"ReentrancyGuard":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 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); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"contracts/ExampleCrowdSale.sol":{"ExampleCrowdSale":{"abi":[{"inputs":[{"internalType":"address","name":"priceFeed_","type":"address"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"address payable","name":"wallet_","type":"address"},{"internalType":"uint256","name":"usdRate_","type":"uint256"},{"internalType":"uint256","name":"vestingEndDate_","type":"uint256"},{"internalType":"address","name":"vestingVault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"purchaser","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELISTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"externalBuyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getWeiAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":483,"id":256,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080346101b457601f61154b38819003918201601f19168301916001600160401b038311848410176101b95780849260c0946040528339810103126101b457610047816101cf565b90610054602082016101cf565b60408201519092906001600160a01b038116908190036101b45760608301519161008560a0608086015195016101cf565b9460016002558215610161576001600160a01b0316908115610110576100aa336101e3565b5060018060a01b031660018060a01b0319600454161760045560018060a01b0319600354161760035560018060a01b0319600654161760065560055560085560018060a01b031660018060a01b031960095416176009556040516112b990816102728239f35b60405162461bcd60e51b8152602060048201526024808201527f43726f776473616c653a20746f6b656e20697320746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f43726f776473616c653a2077616c6c657420697320746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036101b457565b6001600160a01b038116600090815260008051602061152b833981519152602052604090205460ff1661026b576001600160a01b0316600081815260008051602061152b83398151915260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b5060009056fe6080806040526004361015610028575b5036156100205761001e610b7e565b005b61001e610b7e565b60003560e01c90816301ffc9a71461076357508063248a9ca3146107365780632f2ff15d146106f657806336568abe1461068a5780633f4ba83a14610615578063521eb273146105e15780635c975abb146105be5780635f1c3766146104aa57806360659a92146103fe5780636681b9fd146103e05780637a3226ec146103a557806382d5d7ac146103875780638456cb591461030f57806391d14854146102b4578063a217fddf14610298578063c2507ac114610272578063d547741f1461022d578063ec8ac4d81461013f5763fc0c546a14610106573861000f565b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b600080fd5b602060031936011261013a57610153610888565b61015b610f18565b610163610f51565b61016b610c36565b6101753482610f87565b73ffffffffffffffffffffffffffffffffffffffff61019334610abc565b916101a0346007546108ab565b6007556101ad838261108b565b60405192348452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610223575b3491f115610217576001600255005b6040513d6000823e3d90fd5b6108fc9150610208565b3461013a57604060031936011261013a5761001e60043561024c610865565b9061026d61026882600052600160205260016040600020015490565b610cc1565b610e0d565b3461013a57602060031936011261013a576020610290600435610abc565b604051908152f35b3461013a57600060031936011261013a57602060405160008152f35b3461013a57604060031936011261013a576102cd610865565b600435600052600160205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461013a57600060031936011261013a57610328610f51565b610330610f51565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060005416176000557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461013a57602060031936011261013a5760206102906004356109b6565b3461013a57600060031936011261013a5760206040517f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b498152f35b3461013a57600060031936011261013a576020600754604051908152f35b3461013a57600060031936011261013a576024602073ffffffffffffffffffffffffffffffffffffffff60035416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa801561021757600090610477575b602090604051908152f35b506020813d6020116104a2575b81610491602093836108e7565b8101031261013a576020905161046c565b3d9150610484565b3461013a57604060031936011261013a576104c3610888565b602435906104cf610f18565b6104d7610f51565b3360009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff161561058b5773ffffffffffffffffffffffffffffffffffffffff9061052d836109b6565b926105388483610f87565b610544846007546108ab565b600755610551818361108b565b604051938452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a36001600255005b7fe2517d3f0000000000000000000000000000000000000000000000000000000060005233600452600060245260446000fd5b3461013a57600060031936011261013a57602060ff600054166040519015158152f35b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b3461013a57600060031936011261013a5761062e610ee1565b610636610ee1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600054166000557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461013a57604060031936011261013a576106a3610865565b3373ffffffffffffffffffffffffffffffffffffffff8216036106cc5761001e90600435610e0d565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b3461013a57604060031936011261013a5761001e600435610715610865565b9061073161026882600052600160205260016040600020015490565b610d2e565b3461013a57602060031936011261013a576020610290600435600052600160205260016040600020015490565b3461013a57602060031936011261013a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361013a57817f1b6036c8000000000000000000000000000000000000000000000000000000006020931490811561083b575b81156107de575b5015158152f35b7f7965db0b00000000000000000000000000000000000000000000000000000000811491508115610811575b50836107d7565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361080a565b7f5c975abb00000000000000000000000000000000000000000000000000000000811491506107d0565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b919082018092116108b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761092857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b519069ffffffffffffffffffff8216820361013a57565b908160a091031261013a5761098281610957565b916020820151916040810151916109a0608060608401519301610957565b90565b818102929181159184041417156108b857565b73ffffffffffffffffffffffffffffffffffffffff60045416806109e857506109e4600a91600554906109a3565b0490565b60a0600491604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa90811561021757600091610a88575b506305f5e1008202918083046305f5e10014901517156108b857600554610a4e916109a3565b908115610a59570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b610aaa915060a03d60a011610ab5575b610aa281836108e7565b81019061096e565b505050905038610a28565b503d610a98565b73ffffffffffffffffffffffffffffffffffffffff6004541680610afa5750600a810290808204600a14901517156108b8576005546109a0916109a3565b9060a0600492604051938480927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa918215610217576305f5e100926109e492610b4f92600092610b58575b506109a3565b600554906109a3565b610b7291925060a03d60a011610ab557610aa281836108e7565b50505090509038610b49565b610b86610f18565b610b8e610f51565b610b96610c36565b610ba03433610f87565b610ba934610abc565b610bb5346007546108ab565b600755610bc2813361108b565b60405190348252602082015233907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610c2c575b3491f115610217576001600255565b6108fc9150610c1d565b3360009081527f9a12e7d163daa3679fdde2f980fb077ecd75d9611348bc15a31355afb064154e602052604090205460ff1615610c6f57565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b4960245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cfd5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b60ff6000541615610eee57565b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b6002805414610f275760028055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b60ff60005416610f5d57565b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff16156110075715610fa957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43726f776473616c653a20616d6f756e742069732030000000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43726f776473616c653a2062656e656669636961727920697320746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152fd5b600854909291906000901561116c5773ffffffffffffffffffffffffffffffffffffffff600954169360085494803b1561116857606483928373ffffffffffffffffffffffffffffffffffffffff93604051998a9586947ff74bc9d600000000000000000000000000000000000000000000000000000000865216600485015260248401528760448401525af193841561115b57611149939461114b575b505073ffffffffffffffffffffffffffffffffffffffff60095416611173565b565b81611155916108e7565b38611129565b50604051903d90823e3d90fd5b8280fd5b5061114991925b73ffffffffffffffffffffffffffffffffffffffff60446020926000836003541660405196879586947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af190811561021757600091611241575b50156111e357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5472616e7366657220756e7375636365737366756c00000000000000000000006044820152fd5b6020813d60201161127b575b8161125a602093836108e7565b8101031261127757519081151582036112745750386111db565b80fd5b5080fd5b3d915061124d56fea26469706673582212205bf3fd9073f5061daf374d574041b6436de91daf00d672a5ae6142b05c4e543464736f6c634300081b0033a6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49","opcodes":"PUSH1 0x80 CALLVALUE PUSH2 0x1B4 JUMPI PUSH1 0x1F PUSH2 0x154B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1B9 JUMPI DUP1 DUP5 SWAP3 PUSH1 0xC0 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1B4 JUMPI PUSH2 0x47 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP1 PUSH2 0x54 PUSH1 0x20 DUP3 ADD PUSH2 0x1CF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 SWAP1 SUB PUSH2 0x1B4 JUMPI PUSH1 0x60 DUP4 ADD MLOAD SWAP2 PUSH2 0x85 PUSH1 0xA0 PUSH1 0x80 DUP7 ADD MLOAD SWAP6 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x2 SSTORE DUP3 ISZERO PUSH2 0x161 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 ISZERO PUSH2 0x110 JUMPI PUSH2 0xAA CALLER PUSH2 0x1E3 JUMP JUMPDEST POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x4 SLOAD AND OR PUSH1 0x4 SSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x3 SLOAD AND OR PUSH1 0x3 SSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x6 SLOAD AND OR PUSH1 0x6 SSTORE PUSH1 0x5 SSTORE PUSH1 0x8 SSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x9 SLOAD AND OR PUSH1 0x9 SSTORE PUSH1 0x40 MLOAD PUSH2 0x12B9 SWAP1 DUP2 PUSH2 0x272 DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A20746F6B656E20697320746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A2077616C6C657420697320746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B4 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x152B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x152B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x28 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x20 JUMPI PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x763 JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x6F6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x615 JUMPI DUP1 PUSH4 0x521EB273 EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x5F1C3766 EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x60659A92 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x6681B9FD EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x7A3226EC EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x82D5D7AC EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x30F JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xC2507AC1 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0xEC8AC4D8 EQ PUSH2 0x13F JUMPI PUSH4 0xFC0C546A EQ PUSH2 0x106 JUMPI CODESIZE PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x153 PUSH2 0x888 JUMP JUMPDEST PUSH2 0x15B PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x163 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x16B PUSH2 0xC36 JUMP JUMPDEST PUSH2 0x175 CALLVALUE DUP3 PUSH2 0xF87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x193 CALLVALUE PUSH2 0xABC JUMP JUMPDEST SWAP2 PUSH2 0x1A0 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x1AD DUP4 DUP3 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 CALLVALUE DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0x223 JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0x208 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x24C PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x26D PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH2 0xE0D JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0xABC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x2CD PUSH2 0x865 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x328 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x330 PUSH2 0xF51 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND OR PUSH1 0x0 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0x9B6 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x24 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP1 PUSH2 0x477 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4A2 JUMPI JUMPDEST DUP2 PUSH2 0x491 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x13A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x46C JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x484 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x4C3 PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x4CF PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x4D7 PUSH2 0xF51 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA6EEF7E35ABE7026729641147F7915573C7E97B47EFA546F5F6E3230263BCB49 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x58B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x52D DUP4 PUSH2 0x9B6 JUMP JUMPDEST SWAP3 PUSH2 0x538 DUP5 DUP4 PUSH2 0xF87 JUMP JUMPDEST PUSH2 0x544 DUP5 PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x551 DUP2 DUP4 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x0 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x62E PUSH2 0xEE1 JUMP JUMPDEST PUSH2 0x636 PUSH2 0xEE1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND PUSH1 0x0 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x6A3 PUSH2 0x865 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x6CC JUMPI PUSH2 0x1E SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xE0D JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x715 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x731 PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD2E JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13A JUMPI DUP2 PUSH32 0x1B6036C800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x83B JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7DE JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x811 JUMPI JUMPDEST POP DUP4 PUSH2 0x7D7 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x80A JUMP JUMPDEST PUSH32 0x5C975ABB00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x928 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0xA0 SWAP2 SUB SLT PUSH2 0x13A JUMPI PUSH2 0x982 DUP2 PUSH2 0x957 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH1 0x40 DUP2 ADD MLOAD SWAP2 PUSH2 0x9A0 PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0x957 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0x9E8 JUMPI POP PUSH2 0x9E4 PUSH1 0xA SWAP2 PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x4 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0xA88 JUMPI JUMPDEST POP PUSH4 0x5F5E100 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH4 0x5F5E100 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0xA4E SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0xA59 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xAAA SWAP2 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI JUMPDEST PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96E JUMP JUMPDEST POP POP POP SWAP1 POP CODESIZE PUSH2 0xA28 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0xAFA JUMPI POP PUSH1 0xA DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0xA EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0x9A0 SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x4 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x217 JUMPI PUSH4 0x5F5E100 SWAP3 PUSH2 0x9E4 SWAP3 PUSH2 0xB4F SWAP3 PUSH1 0x0 SWAP3 PUSH2 0xB58 JUMPI JUMPDEST POP PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST PUSH2 0xB72 SWAP2 SWAP3 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 CODESIZE PUSH2 0xB49 JUMP JUMPDEST PUSH2 0xB86 PUSH2 0xF18 JUMP JUMPDEST PUSH2 0xB8E PUSH2 0xF51 JUMP JUMPDEST PUSH2 0xB96 PUSH2 0xC36 JUMP JUMPDEST PUSH2 0xBA0 CALLVALUE CALLER PUSH2 0xF87 JUMP JUMPDEST PUSH2 0xBA9 CALLVALUE PUSH2 0xABC JUMP JUMPDEST PUSH2 0xBB5 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0xBC2 DUP2 CALLER PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 CALLVALUE DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0xC2C JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0xC1D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9A12E7D163DAA3679FDDE2F980FB077ECD75D9611348BC15A31355AFB064154E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC6F JUMPI JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCFD JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND ISZERO PUSH2 0xEEE JUMPI JUMP JUMPDEST PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD EQ PUSH2 0xF27 JUMPI PUSH1 0x2 DUP1 SSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1007 JUMPI ISZERO PUSH2 0xFA9 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A20616D6F756E74206973203000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A2062656E656669636961727920697320746865207A65 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x726F206164647265737300000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x8 SLOAD SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x0 SWAP1 ISZERO PUSH2 0x116C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND SWAP4 PUSH1 0x8 SLOAD SWAP5 DUP1 EXTCODESIZE ISZERO PUSH2 0x1168 JUMPI PUSH1 0x64 DUP4 SWAP3 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xF74BC9D600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE DUP8 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x115B JUMPI PUSH2 0x1149 SWAP4 SWAP5 PUSH2 0x114B JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND PUSH2 0x1173 JUMP JUMPDEST JUMP JUMPDEST DUP2 PUSH2 0x1155 SWAP2 PUSH2 0x8E7 JUMP JUMPDEST CODESIZE PUSH2 0x1129 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP PUSH2 0x1149 SWAP2 SWAP3 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 PUSH1 0x20 SWAP3 PUSH1 0x0 DUP4 PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x1241 JUMPI JUMPDEST POP ISZERO PUSH2 0x11E3 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657220756E7375636365737366756C0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x127B JUMPI JUMPDEST DUP2 PUSH2 0x125A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1277 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1274 JUMPI POP CODESIZE PUSH2 0x11DB JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x124D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST RETURN REVERT SWAP1 PUSH20 0xF5061DAF374D574041B6436DE91DAF00D672A5AE PUSH2 0x42B0 TLOAD 0x4E SLOAD CALLVALUE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER 0xA6 0xEE 0xF7 0xE3 GAS 0xBE PUSH17 0x26729641147F7915573C7E97B47EFA546F PUSH0 PUSH15 0x3230263BCB49000000000000000000 ","sourceMap":"174:336:19:-:0;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;-1:-1:-1;;;;;174:336:19;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;174:336:19;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2232:4:0;174:336:19;2061:21:16;2232:4:0;1928:21:25;;174:336:19;;-1:-1:-1;;;;;174:336:19;;2009:20:25;;174:336:19;;2081:42:25;2112:10;2081:42;:::i;:::-;;174:336:19;;;;;;;;;;;2232:4:0;2133:45:25;2232:4:0;;;2133:45:25;2232:4:0;174:336:19;;;;;2232:4:0;2188:23:25;2232:4:0;;;2188:23:25;2232:4:0;174:336:19;;;;;2232:4:0;2221:17:25;2232:4:0;;;2221:17:25;2232:4:0;2248:19:25;2232:4:0;2277:33:25;2232:4:0;174:336:19;;;;;;;;;;;2232:4:0;2320:43:25;2232:4:0;;;2320:43:25;2232:4:0;174:336:19;;;;;;;;;;;;-1:-1:-1;;;174:336:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;174:336:19;;;;;;;;;;-1:-1:-1;;;174:336:19;;;;;;;;;;;;;;;;;-1:-1:-1;;;174:336:19;;;;;;;;-1:-1:-1;174:336:19;;;;;;-1:-1:-1;174:336:19;;;;;-1:-1:-1;174:336:19;;;;-1:-1:-1;;;;;174:336:19;;;;;;:::o;6179:316:0:-;-1:-1:-1;;;;;174:336:19;;1947:1:25;174:336:19;;;-1:-1:-1;;;;;;;;;;;174:336:19;;;;;;;;;;-1:-1:-1;;;;;174:336:19;1947:1:25;174:336:19;;;-1:-1:-1;;;;;;;;;;;174:336:19;;;;;;;-1:-1:-1;;174:336:19;2954:6:0;174:336:19;;;735:10:13;;174:336:19;6370:40:0;1947:1:25;;6370:40:0;2954:6;6424:11;:::o;6272:217::-;6466:12;1947:1:25;6466:12:0;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6564":{"entryPoint":2149,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint80_fromMemory":{"entryPoint":2391,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint80t_int256t_uint256t_uint256t_uint80_fromMemory":{"entryPoint":2414,"id":null,"parameterSlots":2,"returnSlots":5},"checked_add_uint256":{"entryPoint":2219,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":2467,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2279,"id":null,"parameterSlots":2,"returnSlots":0},"fun":{"entryPoint":2942,"id":3161,"parameterSlots":0,"returnSlots":0},"fun_checkRole":{"entryPoint":3265,"id":93,"parameterSlots":1,"returnSlots":0},"fun_checkRole_6571":{"entryPoint":3126,"id":93,"parameterSlots":0,"returnSlots":0},"fun_deliverTokens":{"entryPoint":4467,"id":3431,"parameterSlots":2,"returnSlots":0},"fun_getRoleAdmin":{"entryPoint":null,"id":128,"parameterSlots":1,"returnSlots":1},"fun_getTokenAmount":{"entryPoint":2748,"id":3498,"parameterSlots":1,"returnSlots":1},"fun_getWeiAmount":{"entryPoint":2486,"id":3548,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":3374,"id":256,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":3864,"id":2616,"parameterSlots":0,"returnSlots":0},"fun_preValidatePurchase":{"entryPoint":3975,"id":3373,"parameterSlots":2,"returnSlots":0},"fun_processPurchase":{"entryPoint":4235,"id":3409,"parameterSlots":2,"returnSlots":0},"fun_requireNotPaused":{"entryPoint":3921,"id":2521,"parameterSlots":0,"returnSlots":0},"fun_requirePaused":{"entryPoint":3809,"id":2534,"parameterSlots":0,"returnSlots":0},"fun_revokeRole":{"entryPoint":3597,"id":294,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080806040526004361015610028575b5036156100205761001e610b7e565b005b61001e610b7e565b60003560e01c90816301ffc9a71461076357508063248a9ca3146107365780632f2ff15d146106f657806336568abe1461068a5780633f4ba83a14610615578063521eb273146105e15780635c975abb146105be5780635f1c3766146104aa57806360659a92146103fe5780636681b9fd146103e05780637a3226ec146103a557806382d5d7ac146103875780638456cb591461030f57806391d14854146102b4578063a217fddf14610298578063c2507ac114610272578063d547741f1461022d578063ec8ac4d81461013f5763fc0c546a14610106573861000f565b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b600080fd5b602060031936011261013a57610153610888565b61015b610f18565b610163610f51565b61016b610c36565b6101753482610f87565b73ffffffffffffffffffffffffffffffffffffffff61019334610abc565b916101a0346007546108ab565b6007556101ad838261108b565b60405192348452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610223575b3491f115610217576001600255005b6040513d6000823e3d90fd5b6108fc9150610208565b3461013a57604060031936011261013a5761001e60043561024c610865565b9061026d61026882600052600160205260016040600020015490565b610cc1565b610e0d565b3461013a57602060031936011261013a576020610290600435610abc565b604051908152f35b3461013a57600060031936011261013a57602060405160008152f35b3461013a57604060031936011261013a576102cd610865565b600435600052600160205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461013a57600060031936011261013a57610328610f51565b610330610f51565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060005416176000557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461013a57602060031936011261013a5760206102906004356109b6565b3461013a57600060031936011261013a5760206040517f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b498152f35b3461013a57600060031936011261013a576020600754604051908152f35b3461013a57600060031936011261013a576024602073ffffffffffffffffffffffffffffffffffffffff60035416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa801561021757600090610477575b602090604051908152f35b506020813d6020116104a2575b81610491602093836108e7565b8101031261013a576020905161046c565b3d9150610484565b3461013a57604060031936011261013a576104c3610888565b602435906104cf610f18565b6104d7610f51565b3360009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff161561058b5773ffffffffffffffffffffffffffffffffffffffff9061052d836109b6565b926105388483610f87565b610544846007546108ab565b600755610551818361108b565b604051938452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a36001600255005b7fe2517d3f0000000000000000000000000000000000000000000000000000000060005233600452600060245260446000fd5b3461013a57600060031936011261013a57602060ff600054166040519015158152f35b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b3461013a57600060031936011261013a5761062e610ee1565b610636610ee1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600054166000557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461013a57604060031936011261013a576106a3610865565b3373ffffffffffffffffffffffffffffffffffffffff8216036106cc5761001e90600435610e0d565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b3461013a57604060031936011261013a5761001e600435610715610865565b9061073161026882600052600160205260016040600020015490565b610d2e565b3461013a57602060031936011261013a576020610290600435600052600160205260016040600020015490565b3461013a57602060031936011261013a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361013a57817f1b6036c8000000000000000000000000000000000000000000000000000000006020931490811561083b575b81156107de575b5015158152f35b7f7965db0b00000000000000000000000000000000000000000000000000000000811491508115610811575b50836107d7565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361080a565b7f5c975abb00000000000000000000000000000000000000000000000000000000811491506107d0565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b919082018092116108b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761092857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b519069ffffffffffffffffffff8216820361013a57565b908160a091031261013a5761098281610957565b916020820151916040810151916109a0608060608401519301610957565b90565b818102929181159184041417156108b857565b73ffffffffffffffffffffffffffffffffffffffff60045416806109e857506109e4600a91600554906109a3565b0490565b60a0600491604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa90811561021757600091610a88575b506305f5e1008202918083046305f5e10014901517156108b857600554610a4e916109a3565b908115610a59570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b610aaa915060a03d60a011610ab5575b610aa281836108e7565b81019061096e565b505050905038610a28565b503d610a98565b73ffffffffffffffffffffffffffffffffffffffff6004541680610afa5750600a810290808204600a14901517156108b8576005546109a0916109a3565b9060a0600492604051938480927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa918215610217576305f5e100926109e492610b4f92600092610b58575b506109a3565b600554906109a3565b610b7291925060a03d60a011610ab557610aa281836108e7565b50505090509038610b49565b610b86610f18565b610b8e610f51565b610b96610c36565b610ba03433610f87565b610ba934610abc565b610bb5346007546108ab565b600755610bc2813361108b565b60405190348252602082015233907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610c2c575b3491f115610217576001600255565b6108fc9150610c1d565b3360009081527f9a12e7d163daa3679fdde2f980fb077ecd75d9611348bc15a31355afb064154e602052604090205460ff1615610c6f57565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b4960245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cfd5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b60ff6000541615610eee57565b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b6002805414610f275760028055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b60ff60005416610f5d57565b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff16156110075715610fa957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43726f776473616c653a20616d6f756e742069732030000000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43726f776473616c653a2062656e656669636961727920697320746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152fd5b600854909291906000901561116c5773ffffffffffffffffffffffffffffffffffffffff600954169360085494803b1561116857606483928373ffffffffffffffffffffffffffffffffffffffff93604051998a9586947ff74bc9d600000000000000000000000000000000000000000000000000000000865216600485015260248401528760448401525af193841561115b57611149939461114b575b505073ffffffffffffffffffffffffffffffffffffffff60095416611173565b565b81611155916108e7565b38611129565b50604051903d90823e3d90fd5b8280fd5b5061114991925b73ffffffffffffffffffffffffffffffffffffffff60446020926000836003541660405196879586947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af190811561021757600091611241575b50156111e357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5472616e7366657220756e7375636365737366756c00000000000000000000006044820152fd5b6020813d60201161127b575b8161125a602093836108e7565b8101031261127757519081151582036112745750386111db565b80fd5b5080fd5b3d915061124d56fea26469706673582212205bf3fd9073f5061daf374d574041b6436de91daf00d672a5ae6142b05c4e543464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x28 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x20 JUMPI PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x763 JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x6F6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x615 JUMPI DUP1 PUSH4 0x521EB273 EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x5F1C3766 EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x60659A92 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x6681B9FD EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x7A3226EC EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x82D5D7AC EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x30F JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xC2507AC1 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0xEC8AC4D8 EQ PUSH2 0x13F JUMPI PUSH4 0xFC0C546A EQ PUSH2 0x106 JUMPI CODESIZE PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x153 PUSH2 0x888 JUMP JUMPDEST PUSH2 0x15B PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x163 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x16B PUSH2 0xC36 JUMP JUMPDEST PUSH2 0x175 CALLVALUE DUP3 PUSH2 0xF87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x193 CALLVALUE PUSH2 0xABC JUMP JUMPDEST SWAP2 PUSH2 0x1A0 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x1AD DUP4 DUP3 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 CALLVALUE DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0x223 JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0x208 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x24C PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x26D PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH2 0xE0D JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0xABC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x2CD PUSH2 0x865 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x328 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x330 PUSH2 0xF51 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND OR PUSH1 0x0 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0x9B6 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x24 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP1 PUSH2 0x477 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4A2 JUMPI JUMPDEST DUP2 PUSH2 0x491 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x13A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x46C JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x484 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x4C3 PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x4CF PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x4D7 PUSH2 0xF51 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA6EEF7E35ABE7026729641147F7915573C7E97B47EFA546F5F6E3230263BCB49 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x58B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x52D DUP4 PUSH2 0x9B6 JUMP JUMPDEST SWAP3 PUSH2 0x538 DUP5 DUP4 PUSH2 0xF87 JUMP JUMPDEST PUSH2 0x544 DUP5 PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x551 DUP2 DUP4 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x0 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x62E PUSH2 0xEE1 JUMP JUMPDEST PUSH2 0x636 PUSH2 0xEE1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND PUSH1 0x0 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x6A3 PUSH2 0x865 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x6CC JUMPI PUSH2 0x1E SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xE0D JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x715 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x731 PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD2E JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13A JUMPI DUP2 PUSH32 0x1B6036C800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x83B JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7DE JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x811 JUMPI JUMPDEST POP DUP4 PUSH2 0x7D7 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x80A JUMP JUMPDEST PUSH32 0x5C975ABB00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x928 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0xA0 SWAP2 SUB SLT PUSH2 0x13A JUMPI PUSH2 0x982 DUP2 PUSH2 0x957 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH1 0x40 DUP2 ADD MLOAD SWAP2 PUSH2 0x9A0 PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0x957 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0x9E8 JUMPI POP PUSH2 0x9E4 PUSH1 0xA SWAP2 PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x4 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0xA88 JUMPI JUMPDEST POP PUSH4 0x5F5E100 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH4 0x5F5E100 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0xA4E SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0xA59 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xAAA SWAP2 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI JUMPDEST PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96E JUMP JUMPDEST POP POP POP SWAP1 POP CODESIZE PUSH2 0xA28 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0xAFA JUMPI POP PUSH1 0xA DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0xA EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0x9A0 SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x4 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x217 JUMPI PUSH4 0x5F5E100 SWAP3 PUSH2 0x9E4 SWAP3 PUSH2 0xB4F SWAP3 PUSH1 0x0 SWAP3 PUSH2 0xB58 JUMPI JUMPDEST POP PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST PUSH2 0xB72 SWAP2 SWAP3 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 CODESIZE PUSH2 0xB49 JUMP JUMPDEST PUSH2 0xB86 PUSH2 0xF18 JUMP JUMPDEST PUSH2 0xB8E PUSH2 0xF51 JUMP JUMPDEST PUSH2 0xB96 PUSH2 0xC36 JUMP JUMPDEST PUSH2 0xBA0 CALLVALUE CALLER PUSH2 0xF87 JUMP JUMPDEST PUSH2 0xBA9 CALLVALUE PUSH2 0xABC JUMP JUMPDEST PUSH2 0xBB5 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0xBC2 DUP2 CALLER PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 CALLVALUE DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0xC2C JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0xC1D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9A12E7D163DAA3679FDDE2F980FB077ECD75D9611348BC15A31355AFB064154E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC6F JUMPI JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCFD JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND ISZERO PUSH2 0xEEE JUMPI JUMP JUMPDEST PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD EQ PUSH2 0xF27 JUMPI PUSH1 0x2 DUP1 SSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1007 JUMPI ISZERO PUSH2 0xFA9 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A20616D6F756E74206973203000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A2062656E656669636961727920697320746865207A65 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x726F206164647265737300000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x8 SLOAD SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x0 SWAP1 ISZERO PUSH2 0x116C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND SWAP4 PUSH1 0x8 SLOAD SWAP5 DUP1 EXTCODESIZE ISZERO PUSH2 0x1168 JUMPI PUSH1 0x64 DUP4 SWAP3 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xF74BC9D600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE DUP8 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x115B JUMPI PUSH2 0x1149 SWAP4 SWAP5 PUSH2 0x114B JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND PUSH2 0x1173 JUMP JUMPDEST JUMP JUMPDEST DUP2 PUSH2 0x1155 SWAP2 PUSH2 0x8E7 JUMP JUMPDEST CODESIZE PUSH2 0x1129 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP PUSH2 0x1149 SWAP2 SWAP3 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 PUSH1 0x20 SWAP3 PUSH1 0x0 DUP4 PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x1241 JUMPI JUMPDEST POP ISZERO PUSH2 0x11E3 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657220756E7375636365737366756C0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x127B JUMPI JUMPDEST DUP2 PUSH2 0x125A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1277 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1274 JUMPI POP CODESIZE PUSH2 0x11DB JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x124D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST RETURN REVERT SWAP1 PUSH20 0xF5061DAF374D574041B6436DE91DAF00D672A5AE PUSH2 0x42B0 TLOAD 0x4E SLOAD CALLVALUE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"174:336:19:-:0;;;;;;;;;;-1:-1:-1;174:336:19;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;;;4425:6:25;174:336:19;;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;;;:::i;:::-;2466:103:16;;:::i;:::-;1315:72:15;;:::i;:::-;2475:4:0;;:::i;:::-;6417:9:25;6365;6417;;:::i;:::-;174:336:19;6460:25:25;6365:9;6460:25;:::i;:::-;6365:9;6496:25;6365:9;6496:25;174:336:19;6496:25:25;:::i;:::-;;174:336:19;6560:11:25;;;;:::i;:::-;174:336:19;;6365:9:25;;174:336:19;;;;;;;735:10:13;6587:66:25;174:336:19;735:10:13;6587:66:25;;174:336:19;;;;;10477:7:25;174:336:19;;10477:27:25;6365:9;;10477:27;;;174:336:19;6365:9:25;10477:27;;;;;1857:1:16;3068:21;174:336:19;;10477:27:25;174:336:19;;;;;;;;;10477:27:25;;;-1:-1:-1;10477:27:25;;174:336:19;;;;;-1:-1:-1;;174:336:19;;;;;4747:26:0;174:336:19;;;;:::i;:::-;4717:18:0;2475:4;4717:18;;-1:-1:-1;174:336:19;3901:6:0;174:336:19;;3901:6:0;174:336:19;-1:-1:-1;174:336:19;3901:22:0;174:336:19;3810:120:0;;4717:18;2475:4;:::i;:::-;4747:26;:::i;174:336:19:-;;;;;-1:-1:-1;;174:336:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;;;:::i;:::-;;;;;;;;;;;;2954:29:0;174:336:19;-1:-1:-1;174:336:19;;;;;;-1:-1:-1;174:336:19;;;;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;1315:72:15;;:::i;:::-;;;:::i;:::-;2408:4;174:336:19;;;;;;;2427:20:15;174:336:19;;;735:10:13;174:336:19;;2427:20:15;174:336:19;;;;;;-1:-1:-1;;174:336:19;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;174:336:19;;;;;;;;954:29:25;174:336:19;;;;;;;;-1:-1:-1;;174:336:19;;;;;;4754:12:25;174:336:19;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;4951:32:25;174:336:19;;4425:6:25;174:336:19;;;;4951:32:25;;;;174:336:19;4951:32:25;;4977:4;174:336:19;4951:32:25;;174:336:19;4951:32:25;;;;;;174:336:19;4951:32:25;;;174:336:19;;;;;;;;;4951:32:25;;174:336:19;4951:32:25;;174:336:19;4951:32:25;;;;;;174:336:19;4951:32:25;;;:::i;:::-;;;174:336:19;;;;;;;4951:32:25;;;;;-1:-1:-1;4951:32:25;;174:336:19;;;;;-1:-1:-1;;174:336:19;;;;;;;:::i;:::-;;;2466:103:16;;;:::i;:::-;1315:72:15;;:::i;:::-;735:10:13;174:336:19;;;;;;;;;;;;;3519:23:0;3515:108;;174:336:19;5569:25:25;;;;:::i;:::-;5637:9;;;;;:::i;:::-;5657:25;174:336:19;5657:25:25;174:336:19;5657:25:25;:::i;:::-;;174:336:19;5721:11:25;;;;:::i;:::-;174:336:19;;;;;;;;;;735:10:13;5748:66:25;174:336:19;735:10:13;5748:66:25;;174:336:19;3068:21:16;174:336:19;;3515:108:0;3565:47;174:336:19;3565:47:0;735:10:13;174:336:19;;;;;;;3565:47:0;174:336:19;;;;;-1:-1:-1;;174:336:19;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;;;4596:7:25;174:336:19;;;;;;;;;;;;;-1:-1:-1;;174:336:19;;;;;1565:66:15;;:::i;:::-;;;:::i;:::-;174:336:19;;;;;;2674:22:15;174:336:19;;;735:10:13;174:336:19;;2674:22:15;174:336:19;;;;;;-1:-1:-1;;174:336:19;;;;;;;:::i;:::-;735:10:13;174:336:19;;;5421:34:0;5417:102;;5529:37;174:336:19;;;5529:37:0;:::i;5417:102::-;5478:30;174:336:19;5478:30:0;174:336:19;;5478:30:0;174:336:19;;;;;-1:-1:-1;;174:336:19;;;;;4330:25:0;174:336:19;;;;:::i;:::-;4300:18:0;2475:4;4300:18;;-1:-1:-1;174:336:19;3901:6:0;174:336:19;;3901:6:0;174:336:19;-1:-1:-1;174:336:19;3901:22:0;174:336:19;3810:120:0;;2475:4;4330:25;:::i;174:336:19:-;;;;;-1:-1:-1;;174:336:19;;;;;;;;;-1:-1:-1;174:336:19;3901:6:0;174:336:19;;3901:6:0;174:336:19;-1:-1:-1;174:336:19;3901:22:0;174:336:19;3810:120:0;;174:336:19;;;;;-1:-1:-1;;174:336:19;;;;;;;;;;;;;;;;2507:43:25;2522:28;174:336:19;2507:43:25;;:88;;;;;174:336:19;2507:140:25;;;;174:336:19;;;;;;;2507:140:25;2688:32:0;2673:47;;;-1:-1:-1;2673:87:0;;;;2507:140:25;;;;;2673:87:0;877:25:17;862:40;;;2673:87:0;;;2507:88:25;2569:26;2554:41;;;-1:-1:-1;2507:88:25;;174:336:19;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;174:336:19;;;;;-1:-1:-1;174:336:19;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;:::o;9945:402:25:-;174:336:19;10040:9:25;174:336:19;;10032:32:25;10028:231;;174:336:19;10277:24:25;10305:2;174:336:19;10293:8:25;174:336:19;10277:24:25;;:::i;:::-;174:336:19;9945:402:25;:::o;10028:231::-;10147:27;10040:9;174:336:19;;;10147:27:25;;;;174:336:19;10147:27:25;;;;;;;;;174:336:19;10147:27:25;;;10028:231;174:336:19;10210:7:25;174:336:19;;;;;;10210:7:25;174:336:19;;;;;;;10239:8:25;174:336:19;10222:25:25;;;:::i;:::-;10195:53;174:336:19;;;;;10188:60:25;:::o;174:336:19:-;;;;;10040:9:25;174:336:19;;;;10147:27:25;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;9402:396;174:336:19;9497:9:25;174:336:19;;9489:32:25;9485:229;;174:336:19;9744:2:25;174:336:19;;;;;;9744:2:25;174:336:19;;;;;;;9750:8:25;174:336:19;9731:27:25;;;:::i;9485:229::-;174:336:19;9604:27:25;9497:9;174:336:19;;;9604:27:25;;;;174:336:19;9604:27:25;;;;;;;;;9696:7;174:336:19;9653:39:25;174:336:19;9654:26:25;174:336:19;;9604:27:25;;;9485:229;9654:26;;:::i;:::-;9684:8;174:336:19;9653:39:25;;:::i;9604:27::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3674:67;2466:103:16;;:::i;:::-;1315:72:15;;:::i;:::-;2475:4:0;;:::i;:::-;6417:9:25;6365;735:10:13;6417:9:25;:::i;:::-;6460:25;6365:9;6460:25;:::i;:::-;6496;6365:9;6496:25;174:336:19;6496:25:25;:::i;:::-;;174:336:19;6560:11:25;735:10:13;;6560:11:25;:::i;:::-;174:336:19;;6365:9:25;;174:336:19;;;;;;735:10:13;;6587:66:25;174:336:19;735:10:13;6587:66:25;;-1:-1:-1;174:336:19;;;;10477:7:25;174:336:19;;10477:27:25;6365:9;;10477:27;;;3674:67;6365:9;10477:27;;;;;1857:1:16;3068:21;174:336:19;3674:67:25:o;10477:27::-;;;-1:-1:-1;10477:27:25;;3199:103:0;735:10:13;-1:-1:-1;174:336:19;;;;;;;;;;;;3519:23:0;3515:108;;3199:103::o;3515:108::-;3565:47;-1:-1:-1;3565:47:0;735:10:13;3565:47:0;174:336:19;954:29:25;174:336:19;;;-1:-1:-1;3565:47:0;3199:103;174:336:19;-1:-1:-1;174:336:19;2954:6:0;174:336:19;;;-1:-1:-1;174:336:19;;735:10:13;174:336:19;-1:-1:-1;174:336:19;;;;;-1:-1:-1;174:336:19;;;3519:23:0;3515:108;;3199:103;:::o;3515:108::-;3565:47;-1:-1:-1;3565:47:0;735:10:13;3565:47:0;174:336:19;;;;-1:-1:-1;3565:47:0;6179:316;174:336:19;;;2954:6:0;174:336:19;;;;;;;;-1:-1:-1;174:336:19;;;;;-1:-1:-1;174:336:19;;;6276:23:0;6272:217;174:336:19;;;;;;2954:6:0;174:336:19;;;;;;;;-1:-1:-1;174:336:19;;;;-1:-1:-1;174:336:19;2954:6:0;174:336:19;;;;;;;;735:10:13;174:336:19;;6370:40:0;;174:336:19;6370:40:0;;2954:6;6424:11;:::o;6272:217::-;6466:12;;174:336:19;6466:12:0;:::o;6732:317::-;174:336:19;;;2954:6:0;174:336:19;;;;;;;;-1:-1:-1;174:336:19;;;;;-1:-1:-1;174:336:19;;;6826:217:0;174:336:19;;;;;;2954:6:0;174:336:19;;;;;;;;-1:-1:-1;174:336:19;;;;-1:-1:-1;174:336:19;;;;;;;;735:10:13;174:336:19;;6924:40:0;;174:336:19;6924:40:0;;2954:6;6978:11;:::o;2078:126:15:-;174:336:19;1796:7:15;174:336:19;;2140:9:15;2136:62;;2078:126::o;2136:62::-;2172:15;1796:7;2172:15;;1796:7;2172:15;2575:307:16;2702:7;174:336:19;;2702:18:16;2698:86;;2702:7;174:336:19;;2575:307:16:o;2698:86::-;2743:30;-1:-1:-1;2743:30:16;;-1:-1:-1;2743:30:16;1878:128:15;174:336:19;1796:7:15;174:336:19;;1939:61:15;;1878:128::o;1939:61::-;1974:15;1796:7;1974:15;;1796:7;1974:15;6889:387:25;174:336:19;;6990:25:25;174:336:19;;7080:14:25;174:336:19;;6889:387:25:o;174:336:19:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7542:347:25;7632:15;174:336:19;7542:347:25;;;;-1:-1:-1;;7632:19:25;;;174:336:19;7667:13:25;174:336:19;;;7632:15:25;174:336:19;7667:71:25;;;;;;;174:336:19;;;;;;;7667:71:25;;;;;174:336:19;7667:71:25;;174:336:19;7667:71:25;;;174:336:19;;;;;;;;;;7667:71:25;;;;;;;7790:11;7667:71;;;;7628:255;174:336:19;;;7667:13:25;174:336:19;;7790:11:25;:::i;:::-;7542:347::o;7667:71::-;;;;;:::i;:::-;;;;;174:336:19;;;;;;;;;;;7667:71:25;174:336:19;;;7628:255:25;7860:11;;;;8205:198;174:336:19;8304:41:25;174:336:19;8205:198:25;-1:-1:-1;174:336:19;8304:6:25;174:336:19;;;;8304:41:25;;;;;174:336:19;8304:41:25;;174:336:19;8304:41:25;;;174:336:19;;;;;8304:41:25;;;;;;;-1:-1:-1;8304:41:25;;;8205:198;174:336:19;;;;8205:198:25:o;174:336:19:-;;;;;;;;8304:41:25;174:336:19;;;;;;;;;8304:41:25;174:336:19;;;;8304:41:25;174:336:19;8304:41:25;;174:336:19;8304:41:25;;;;;;174:336:19;8304:41:25;;;:::i;:::-;;;174:336:19;;;;;;;;;;;;;8304:41:25;;;;174:336:19;;;;;;;8304:41:25;;;-1:-1:-1;8304:41:25;"},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","WHITELISTED_ROLE()":"7a3226ec","buyTokens(address)":"ec8ac4d8","externalBuyTokens(address,uint256)":"5f1c3766","fundsRaised()":"6681b9fd","getRoleAdmin(bytes32)":"248a9ca3","getTokenAmount(uint256)":"c2507ac1","getWeiAmount(uint256)":"82d5d7ac","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","pause()":"8456cb59","paused()":"5c975abb","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","tokensAvailable()":"60659a92","unpause()":"3f4ba83a","wallet()":"521eb273"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"wallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"usdRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vestingEndDate_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"vestingVault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"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\":\"purchaser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELISTED_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"buyTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"externalBuyTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsRaised\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weiAmount\",\"type\":\"uint256\"}],\"name\":\"getTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"getWeiAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"buyTokens(address)\":{\"details\":\"low level token purchase This function has a non-reentrancy guard, so it shouldn't be called by another `nonReentrant` function.\",\"params\":{\"beneficiary\":\"Recipient of the token purchase\"}},\"externalBuyTokens(address,uint256)\":{\"details\":\"utility function to allow the owner to handle private and bitcoin buyers This function has a non-reentrancy guard, so it shouldn't be called by another `nonReentrant` function.\",\"params\":{\"beneficiary\":\"Recipient of the token purchase\",\"tokenAmount\":\"Number of tokens to be purchased\"}},\"fundsRaised()\":{\"returns\":{\"_0\":\"the amount of funds raised.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getTokenAmount(uint256)\":{\"details\":\"Converts the weiAmount into equivalent number of tokens\",\"params\":{\"weiAmount\":\"Value of wei for conversion\"}},\"getWeiAmount(uint256)\":{\"details\":\"Converts the tokenAmount into equivalent number of wei\",\"params\":{\"tokenAmount\":\"Number of tokens for convertion\"}},\"grantRole(bytes32,address)\":{\"details\":\"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. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pause()\":{\"details\":\"Triggers stopped state. Requirements: - The contract must not be paused. - The sender of the transaction must have the DEFAULT_ADMIN_ROLE\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"token()\":{\"returns\":{\"_0\":\"the address of the token being sold.\"}},\"tokensAvailable()\":{\"returns\":{\"_0\":\"the amount tokens available to the crowdsale for selling.\"}},\"unpause()\":{\"details\":\"Returns to normal state. Requirements: - The contract must be paused. - The sender of the transaction must have the DEFAULT_ADMIN_ROLE\"},\"wallet()\":{\"returns\":{\"_0\":\"the address where funds are collected.\"}}},\"title\":\"ExampleCrowdSale\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ExampleCrowdSale.sol\":\"ExampleCrowdSale\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67\",\"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a\",\"dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"contracts/ExampleCrowdSale.sol\":{\"keccak256\":\"0xe5a0e34725bd73ea710cab6c17941d1ab35047dc4bf532d30d06f8a19acd9bbb\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://4436dd594f102b555a4f02aeab0b795e9e9ec302e3b998e04d2de0dc265994f1\",\"dweb:/ipfs/QmecLoA7j1gR5BcmYWJr8cgPDL8Mz6tSYjPS2RTyzjs92k\"]},\"contracts/library/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6fe9022adc0ea2fe59271183cd952e1679262f1c239583ecad824dbd25f723b8\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c7eb625f0943857cb5d4820d8b44918153fae0b6e6204debb4a0c3dd763f91de\",\"dweb:/ipfs/QmNz2mLb7X17sqf7EQmNai3bG9NqVw732M9ogyddeqgRuV\"]},\"contracts/library/CrowdSale.sol\":{\"keccak256\":\"0x6daf7c8f3c38229eca479270cbbee2aec5090f1758941f9979faf6117af4787d\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://0bfc8f658db29b8ad4055fe1f4bf5090e5a7043be3eda0d308e9d7ac943b147d\",\"dweb:/ipfs/QmNMGdx1tgoy8ZE4boqYsnXvBmaoGMqtquz16hP5JfrssD\"]},\"contracts/library/ICrowdSale.sol\":{\"keccak256\":\"0xe5539638218e0e027b15b9c236cb9d2dcffcb0ea3ed79d8374e11d120d1b1d4d\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://3600a70cc759026e923c594f69fd68d5ad3476fcfaa5945245ce08fe94b0a953\",\"dweb:/ipfs/QmRq9A3iei2J1ocWDoq1xL5xLdnSAgxfuktuC3XsFhFUqh\"]},\"contracts/library/IVestingVault.sol\":{\"keccak256\":\"0xf3f074546fdb24b8d2889ffd7947b5134669f1eb47c4baf30abf4663f6d320d7\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://e13d929241510074238c4d3797aeaa9a8f3bea58c9d8beab73c2a39583dcf56e\",\"dweb:/ipfs/QmNX2cSo1uxxuviE5SL8wUgMgC2DBrDEyZa8KVd9DipUAU\"]},\"contracts/library/VestingVault.sol\":{\"keccak256\":\"0x0386c58188ed9a89f544a617e7b628210935857895b07549854a19e140a1b21c\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c2d8275e0105f4a6c134acb7057706b00c437e3b5e72185479024343346ab1ee\",\"dweb:/ipfs/QmegrKCswosuTqn2uizDBKmrMFboBN9ATcXPVcyLzbUpdR\"]}},\"version\":1}"}},"contracts/ExampleToken.sol":{"ExampleToken":{"abi":[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"supply_","type":"uint256"},{"internalType":"address","name":"wallet_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":[{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1021,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":984,"id":null,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":1128,"id":256,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346103d3576111d880380380610019816103d8565b9283398101906080818303126103d35780516001600160401b0381116103d357826100459183016103fd565b602082015190926001600160401b0382116103d3576100659183016103fd565b604082015160609092015190916001600160a01b038216918290036103d35783516001600160401b0381116102dc57600354600181811c911680156103c9575b60208210146102bc57601f8111610364575b50602094601f82116001146102fd579481929394956000926102f2575b50508160011b916000199060031b1c1916176003555b82516001600160401b0381116102dc57600454600181811c911680156102d2575b60208210146102bc57601f8111610257575b506020601f82116001146101f057819293946000926101e5575b50508160011b916000199060031b1c1916176004555b61015633610468565b5081156101cf576002548181018091116101b9576002557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060009284845283825260408420818154019055604051908152a3604051610cc190816104f78239f35b634e487b7160e01b600052601160045260246000fd5b63ec442f0560e01b600052600060045260246000fd5b015190503880610137565b601f198216906004600052806000209160005b81811061023f57509583600195969710610226575b505050811b0160045561014d565b015160001960f88460031b161c19169055388080610218565b9192602060018192868b015181550194019201610203565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810191602084106102b2575b601f0160051c01905b8181106102a6575061011d565b60008155600101610299565b9091508190610290565b634e487b7160e01b600052602260045260246000fd5b90607f169061010b565b634e487b7160e01b600052604160045260246000fd5b0151905038806100d4565b601f198216956003600052806000209160005b88811061034c57508360019596979810610333575b505050811b016003556100ea565b015160001960f88460031b161c19169055388080610325565b91926020600181928685015181550194019201610310565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810191602084106103bf575b601f0160051c01905b8181106103b357506100b7565b600081556001016103a6565b909150819061039d565b90607f16906100a5565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176102dc57604052565b81601f820112156103d3578051906001600160401b0382116102dc5761042c601f8301601f19166020016103d8565b92828452602083830101116103d35760005b82811061045357505060206000918301015290565b8060208092840101518282870101520161043e565b6001600160a01b03811660009081526000805160206111b8833981519152602052604090205460ff166104f0576001600160a01b031660008181526000805160206111b883398151915260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b5060009056fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146108135750806306fdde0314610733578063095ea7b3146106a057806318160ddd1461068257806323b872dd146104fc578063248a9ca3146104c75780632f2ff15d14610487578063313ce5671461046b57806336568abe146103ff57806370a08231146103b857806391d148541461035d57806395d89b41146101da578063a217fddf146101be578063a9059cbb1461018d578063d547741f146101465763dd62ed3e146100cf57600080fd5b34610141576040600319360112610141576100e86108fb565b73ffffffffffffffffffffffffffffffffffffffff61010561091e565b9116600052600160205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b600080fd5b346101415760406003193601126101415761018b60043561016561091e565b9061018661018182600052600560205260016040600020015490565b610a6b565b610bb7565b005b34610141576040600319360112610141576101b36101a96108fb565b6024359033610941565b602060405160018152f35b3461014157600060031936011261014157602060405160008152f35b3461014157600060031936011261014157604051600090600454918260011c60018416938415610353575b60208210851461032657839482855290816000146102e45750600114610287575b5003601f01601f191681019067ffffffffffffffff82118183101761025857610254829182604052826108b1565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6004600090815291507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8183106102c85750508101602001601f19610226565b60209193508060019154838588010152019101909183926102b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b84019091019150601f199050610226565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610205565b346101415760406003193601126101415761037661091e565b600435600052600560205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6103e66108fb565b1660005260006020526020604060002054604051908152f35b346101415760406003193601126101415761041861091e565b3373ffffffffffffffffffffffffffffffffffffffff8216036104415761018b90600435610bb7565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b3461014157600060031936011261014157602060405160128152f35b346101415760406003193601126101415761018b6004356104a661091e565b906104c261018182600052600560205260016040600020015490565b610ad8565b346101415760206003193601126101415760206104f4600435600052600560205260016040600020015490565b604051908152f35b34610141576060600319360112610141576105156108fb565b61051d61091e565b6044359073ffffffffffffffffffffffffffffffffffffffff831692836000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff33166000526020526040600020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811061059d575b506101b39350610941565b83811061064c57841561061d5733156105ee576101b3946000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff33166000526020528360406000209103905584610592565b7f94280d6200000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7fe602df0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000006000523360045260245260445260646000fd5b34610141576000600319360112610141576020600254604051908152f35b34610141576040600319360112610141576106b96108fb565b60243590331561061d5773ffffffffffffffffffffffffffffffffffffffff169081156105ee57336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461014157600060031936011261014157604051600090600354918260011c60018416938415610809575b60208210851461032657839482855290816000146102e457506001146107ac575003601f01601f191681019067ffffffffffffffff82118183101761025857610254829182604052826108b1565b6003600090815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106107ed5750508101602001601f19610226565b60209193508060019154838588010152019101909183926107d7565b90607f169061075e565b3461014157602060031936011261014157600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361014157817f7965db0b0000000000000000000000000000000000000000000000000000000060209314908115610887575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610880565b9190916020815282519283602083015260005b8481106108e5575050601f19601f8460006040809697860101520116010190565b80602080928401015160408286010152016108c4565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361014157565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361014157565b73ffffffffffffffffffffffffffffffffffffffff16908115610a3c5773ffffffffffffffffffffffffffffffffffffffff16918215610a0d5760008281528060205260408120548281106109da5791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b6064937fe450d38c0000000000000000000000000000000000000000000000000000000083949352600452602452604452fd5b7fec442f0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7f96c6fd1e00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610aa75750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610bb057806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610bb057806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a460019056fea264697066735822122038fc9d419e6931dae1732c1d42fd38958c7a289f8162e2c50f47ee23796c16bd64736f6c634300081b003305b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x3D3 JUMPI PUSH2 0x11D8 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x3D8 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0x3D3 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3D3 JUMPI DUP3 PUSH2 0x45 SWAP2 DUP4 ADD PUSH2 0x3FD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3D3 JUMPI PUSH2 0x65 SWAP2 DUP4 ADD PUSH2 0x3FD JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 DUP3 SWAP1 SUB PUSH2 0x3D3 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2DC JUMPI PUSH1 0x3 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x3C9 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x2BC JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x364 JUMPI JUMPDEST POP PUSH1 0x20 SWAP5 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x2FD JUMPI SWAP5 DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH1 0x0 SWAP3 PUSH2 0x2F2 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH1 0x0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2DC JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x2D2 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x2BC JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x257 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x1F0 JUMPI DUP2 SWAP3 SWAP4 SWAP5 PUSH1 0x0 SWAP3 PUSH2 0x1E5 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH1 0x0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x156 CALLER PUSH2 0x468 JUMP JUMPDEST POP DUP2 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x2 SLOAD DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1B9 JUMPI PUSH1 0x2 SSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x20 PUSH1 0x0 SWAP3 DUP5 DUP5 MSTORE DUP4 DUP3 MSTORE PUSH1 0x40 DUP5 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 PUSH1 0x40 MLOAD PUSH2 0xCC1 SWAP1 DUP2 PUSH2 0x4F7 DUP3 CODECOPY RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0xEC442F05 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADD MLOAD SWAP1 POP CODESIZE DUP1 PUSH2 0x137 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 AND SWAP1 PUSH1 0x4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 SWAP2 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x23F JUMPI POP SWAP6 DUP4 PUSH1 0x1 SWAP6 SWAP7 SWAP8 LT PUSH2 0x226 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x14D JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x218 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x203 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP5 LT PUSH2 0x2B2 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x2A6 JUMPI POP PUSH2 0x11D JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x299 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x290 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x10B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADD MLOAD SWAP1 POP CODESIZE DUP1 PUSH2 0xD4 JUMP JUMPDEST PUSH1 0x1F NOT DUP3 AND SWAP6 PUSH1 0x3 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 SWAP2 PUSH1 0x0 JUMPDEST DUP9 DUP2 LT PUSH2 0x34C JUMPI POP DUP4 PUSH1 0x1 SWAP6 SWAP7 SWAP8 SWAP9 LT PUSH2 0x333 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0xEA JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x325 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x310 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP5 LT PUSH2 0x3BF JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x3B3 JUMPI POP PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3A6 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x39D JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x2DC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D3 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x2DC JUMPI PUSH2 0x42C PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x3D8 JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D3 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT PUSH2 0x453 JUMPI POP POP PUSH1 0x20 PUSH1 0x0 SWAP2 DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP1 SWAP3 DUP5 ADD ADD MLOAD DUP3 DUP3 DUP8 ADD ADD MSTORE ADD PUSH2 0x43E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x11B8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4F0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x11B8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x813 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x6A0 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x4FC JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x4C7 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x487 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x35D JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x146 JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0xE8 PUSH2 0x8FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x105 PUSH2 0x91E JUMP JUMPDEST SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x18B PUSH1 0x4 CALLDATALOAD PUSH2 0x165 PUSH2 0x91E JUMP JUMPDEST SWAP1 PUSH2 0x186 PUSH2 0x181 DUP3 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH2 0xBB7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x1B3 PUSH2 0x1A9 PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER PUSH2 0x941 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x4 SLOAD SWAP2 DUP3 PUSH1 0x1 SHR PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x353 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT DUP6 EQ PUSH2 0x326 JUMPI DUP4 SWAP5 DUP3 DUP6 MSTORE SWAP1 DUP2 PUSH1 0x0 EQ PUSH2 0x2E4 JUMPI POP PUSH1 0x1 EQ PUSH2 0x287 JUMPI JUMPDEST POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP2 DUP4 LT OR PUSH2 0x258 JUMPI PUSH2 0x254 DUP3 SWAP2 DUP3 PUSH1 0x40 MSTORE DUP3 PUSH2 0x8B1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP2 DUP4 LT PUSH2 0x2C8 JUMPI POP POP DUP2 ADD PUSH1 0x20 ADD PUSH1 0x1F NOT PUSH2 0x226 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP DUP1 PUSH1 0x1 SWAP2 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP2 DUP4 SWAP3 PUSH2 0x2B2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x20 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x5 SHL DUP5 ADD SWAP1 SWAP2 ADD SWAP2 POP PUSH1 0x1F NOT SWAP1 POP PUSH2 0x226 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x205 JUMP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x376 PUSH2 0x91E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3E6 PUSH2 0x8FB JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x418 PUSH2 0x91E JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x441 JUMPI PUSH2 0x18B SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xBB7 JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x18B PUSH1 0x4 CALLDATALOAD PUSH2 0x4A6 PUSH2 0x91E JUMP JUMPDEST SWAP1 PUSH2 0x4C2 PUSH2 0x181 DUP3 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAD8 JUMP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH2 0x4F4 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x515 PUSH2 0x8FB JUMP JUMPDEST PUSH2 0x51D PUSH2 0x91E JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP3 DUP4 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT PUSH2 0x59D JUMPI JUMPDEST POP PUSH2 0x1B3 SWAP4 POP PUSH2 0x941 JUMP JUMPDEST DUP4 DUP2 LT PUSH2 0x64C JUMPI DUP5 ISZERO PUSH2 0x61D JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI PUSH2 0x1B3 SWAP5 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE DUP4 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 SUB SWAP1 SSTORE DUP5 PUSH2 0x592 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP4 SWAP1 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x6B9 PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x61D JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x5EE JUMPI CALLER PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP3 PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH1 0x0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x20 CALLER SWAP3 LOG3 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x3 SLOAD SWAP2 DUP3 PUSH1 0x1 SHR PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x809 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT DUP6 EQ PUSH2 0x326 JUMPI DUP4 SWAP5 DUP3 DUP6 MSTORE SWAP1 DUP2 PUSH1 0x0 EQ PUSH2 0x2E4 JUMPI POP PUSH1 0x1 EQ PUSH2 0x7AC JUMPI POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP2 DUP4 LT OR PUSH2 0x258 JUMPI PUSH2 0x254 DUP3 SWAP2 DUP3 PUSH1 0x40 MSTORE DUP3 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP2 DUP4 LT PUSH2 0x7ED JUMPI POP POP DUP2 ADD PUSH1 0x20 ADD PUSH1 0x1F NOT PUSH2 0x226 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP DUP1 PUSH1 0x1 SWAP2 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP2 DUP4 SWAP3 PUSH2 0x7D7 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x75E JUMP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x141 JUMPI DUP2 PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x887 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x880 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 DUP2 MSTORE DUP3 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 JUMPDEST DUP5 DUP2 LT PUSH2 0x8E5 JUMPI POP POP PUSH1 0x1F NOT PUSH1 0x1F DUP5 PUSH1 0x0 PUSH1 0x40 DUP1 SWAP7 SWAP8 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP1 SWAP3 DUP5 ADD ADD MLOAD PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x8C4 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x141 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x141 JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0xA3C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 DUP3 ISZERO PUSH2 0xA0D JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE DUP1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 DUP2 LT PUSH2 0x9DA JUMPI SWAP2 PUSH1 0x40 DUP3 DUP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP6 DUP8 PUSH1 0x20 SWAP7 MSTORE DUP3 DUP7 MSTORE SUB DUP3 DUP3 KECCAK256 SSTORE DUP7 DUP2 MSTORE DUP1 DUP5 MSTORE KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST PUSH1 0x64 SWAP4 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 DUP4 SWAP5 SWAP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAA7 JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xBB0 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xBB0 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE 0xFC SWAP14 COINBASE SWAP15 PUSH10 0x31DAE1732C1D42FD3895 DUP13 PUSH27 0x289F8162E2C50F47EE23796C16BD64736F6C634300081B003305B8 0xCC 0xBB SWAP14 0x4D DUP16 0xB1 PUSH15 0xA74CE3C29A41F1B461FBDAFF4714A0 0xD9 0xA8 0xEB SDIV BLOBHASH SWAP8 CHAINID 0xBC ","sourceMap":"320:545:20:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;320:545:20;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;320:545:20;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;320:545:20;;;;;;;;;;-1:-1:-1;;;;;320:545:20;;;;1648:13:8;320:545:20;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;;;1648:13:8;320:545:20;;;;;1648:13:8;320:545:20;;;;-1:-1:-1;;;;;320:545:20;;;;1671:17:8;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;;;1648:13:8;320:545:20;;;;;1671:17:8;320:545:20;;502:44;735:10:13;502:44:20;:::i;:::-;;7509:21:8;;7505:91;;6214:21;320:545:20;;;;;;;;;6214:21:8;320:545:20;7064:25:8;320:545:20;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;;;;;7064:25:8;320:545:20;;;;;;;;;;;;;-1:-1:-1;320:545:20;;1671:17:8;320:545:20;;-1:-1:-1;320:545:20;7505:91:8;7553:32;;;-1:-1:-1;7553:32:8;-1:-1:-1;1671:17:8;320:545:20;;-1:-1:-1;7553:32:8;320:545:20;;;;-1:-1:-1;320:545:20;;;;;;;;;;1671:17:8;-1:-1:-1;320:545:20;;-1:-1:-1;320:545:20;;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;;;;;;;1671:17:8;320:545:20;;;;;;;;;;1648:13:8;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1671:17:8;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;-1:-1:-1;320:545:20;;1671:17:8;320:545:20;;-1:-1:-1;320:545:20;;;;;;;;;;;;-1:-1:-1;320:545:20;;1671:17:8;320:545:20;;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;;;;;;;;1648:13:8;-1:-1:-1;320:545:20;;-1:-1:-1;320:545:20;;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;;;;;;;1648:13:8;320:545:20;;;;;;;;;;1648:13:8;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1648:13:8;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;-1:-1:-1;;320:545:20;;;-1:-1:-1;;;;;320:545:20;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;320:545:20;;;;;;;;-1:-1:-1;;320:545:20;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;;;-1:-1:-1;320:545:20;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;6179:316:0;-1:-1:-1;;;;;320:545:20;;;;;;-1:-1:-1;;;;;;;;;;;320:545:20;;;;;;;;;;-1:-1:-1;;;;;320:545:20;;;;;-1:-1:-1;;;;;;;;;;;320:545:20;;;;;;;-1:-1:-1;;320:545:20;;;;;735:10:13;;320:545:20;6370:40:0;320:545:20;;6370:40:0;6347:4;6424:11;:::o;6272:217::-;6466:12;320:545:20;6466:12:0;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2299,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_4890":{"entryPoint":2334,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_string":{"entryPoint":2225,"id":null,"parameterSlots":2,"returnSlots":1},"fun_checkRole":{"entryPoint":2667,"id":93,"parameterSlots":1,"returnSlots":0},"fun_getRoleAdmin":{"entryPoint":null,"id":128,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":2776,"id":256,"parameterSlots":2,"returnSlots":1},"fun_revokeRole":{"entryPoint":2999,"id":294,"parameterSlots":2,"returnSlots":1},"fun_transfer":{"entryPoint":2369,"id":1309,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146108135750806306fdde0314610733578063095ea7b3146106a057806318160ddd1461068257806323b872dd146104fc578063248a9ca3146104c75780632f2ff15d14610487578063313ce5671461046b57806336568abe146103ff57806370a08231146103b857806391d148541461035d57806395d89b41146101da578063a217fddf146101be578063a9059cbb1461018d578063d547741f146101465763dd62ed3e146100cf57600080fd5b34610141576040600319360112610141576100e86108fb565b73ffffffffffffffffffffffffffffffffffffffff61010561091e565b9116600052600160205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b600080fd5b346101415760406003193601126101415761018b60043561016561091e565b9061018661018182600052600560205260016040600020015490565b610a6b565b610bb7565b005b34610141576040600319360112610141576101b36101a96108fb565b6024359033610941565b602060405160018152f35b3461014157600060031936011261014157602060405160008152f35b3461014157600060031936011261014157604051600090600454918260011c60018416938415610353575b60208210851461032657839482855290816000146102e45750600114610287575b5003601f01601f191681019067ffffffffffffffff82118183101761025857610254829182604052826108b1565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6004600090815291507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8183106102c85750508101602001601f19610226565b60209193508060019154838588010152019101909183926102b2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b84019091019150601f199050610226565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610205565b346101415760406003193601126101415761037661091e565b600435600052600560205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6103e66108fb565b1660005260006020526020604060002054604051908152f35b346101415760406003193601126101415761041861091e565b3373ffffffffffffffffffffffffffffffffffffffff8216036104415761018b90600435610bb7565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b3461014157600060031936011261014157602060405160128152f35b346101415760406003193601126101415761018b6004356104a661091e565b906104c261018182600052600560205260016040600020015490565b610ad8565b346101415760206003193601126101415760206104f4600435600052600560205260016040600020015490565b604051908152f35b34610141576060600319360112610141576105156108fb565b61051d61091e565b6044359073ffffffffffffffffffffffffffffffffffffffff831692836000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff33166000526020526040600020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811061059d575b506101b39350610941565b83811061064c57841561061d5733156105ee576101b3946000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff33166000526020528360406000209103905584610592565b7f94280d6200000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7fe602df0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000006000523360045260245260445260646000fd5b34610141576000600319360112610141576020600254604051908152f35b34610141576040600319360112610141576106b96108fb565b60243590331561061d5773ffffffffffffffffffffffffffffffffffffffff169081156105ee57336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461014157600060031936011261014157604051600090600354918260011c60018416938415610809575b60208210851461032657839482855290816000146102e457506001146107ac575003601f01601f191681019067ffffffffffffffff82118183101761025857610254829182604052826108b1565b6003600090815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106107ed5750508101602001601f19610226565b60209193508060019154838588010152019101909183926107d7565b90607f169061075e565b3461014157602060031936011261014157600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361014157817f7965db0b0000000000000000000000000000000000000000000000000000000060209314908115610887575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610880565b9190916020815282519283602083015260005b8481106108e5575050601f19601f8460006040809697860101520116010190565b80602080928401015160408286010152016108c4565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361014157565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361014157565b73ffffffffffffffffffffffffffffffffffffffff16908115610a3c5773ffffffffffffffffffffffffffffffffffffffff16918215610a0d5760008281528060205260408120548281106109da5791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b6064937fe450d38c0000000000000000000000000000000000000000000000000000000083949352600452602452604452fd5b7fec442f0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7f96c6fd1e00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610aa75750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610bb057806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610bb057806000526005602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a460019056fea264697066735822122038fc9d419e6931dae1732c1d42fd38958c7a289f8162e2c50f47ee23796c16bd64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x813 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x6A0 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x4FC JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x4C7 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x487 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x35D JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x146 JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0xE8 PUSH2 0x8FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x105 PUSH2 0x91E JUMP JUMPDEST SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x18B PUSH1 0x4 CALLDATALOAD PUSH2 0x165 PUSH2 0x91E JUMP JUMPDEST SWAP1 PUSH2 0x186 PUSH2 0x181 DUP3 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH2 0xBB7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x1B3 PUSH2 0x1A9 PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER PUSH2 0x941 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x4 SLOAD SWAP2 DUP3 PUSH1 0x1 SHR PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x353 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT DUP6 EQ PUSH2 0x326 JUMPI DUP4 SWAP5 DUP3 DUP6 MSTORE SWAP1 DUP2 PUSH1 0x0 EQ PUSH2 0x2E4 JUMPI POP PUSH1 0x1 EQ PUSH2 0x287 JUMPI JUMPDEST POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP2 DUP4 LT OR PUSH2 0x258 JUMPI PUSH2 0x254 DUP3 SWAP2 DUP3 PUSH1 0x40 MSTORE DUP3 PUSH2 0x8B1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP2 DUP4 LT PUSH2 0x2C8 JUMPI POP POP DUP2 ADD PUSH1 0x20 ADD PUSH1 0x1F NOT PUSH2 0x226 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP DUP1 PUSH1 0x1 SWAP2 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP2 DUP4 SWAP3 PUSH2 0x2B2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x20 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x5 SHL DUP5 ADD SWAP1 SWAP2 ADD SWAP2 POP PUSH1 0x1F NOT SWAP1 POP PUSH2 0x226 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x205 JUMP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x376 PUSH2 0x91E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3E6 PUSH2 0x8FB JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x418 PUSH2 0x91E JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x441 JUMPI PUSH2 0x18B SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xBB7 JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x18B PUSH1 0x4 CALLDATALOAD PUSH2 0x4A6 PUSH2 0x91E JUMP JUMPDEST SWAP1 PUSH2 0x4C2 PUSH2 0x181 DUP3 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAD8 JUMP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH2 0x4F4 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x515 PUSH2 0x8FB JUMP JUMPDEST PUSH2 0x51D PUSH2 0x91E JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP3 DUP4 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT PUSH2 0x59D JUMPI JUMPDEST POP PUSH2 0x1B3 SWAP4 POP PUSH2 0x941 JUMP JUMPDEST DUP4 DUP2 LT PUSH2 0x64C JUMPI DUP5 ISZERO PUSH2 0x61D JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI PUSH2 0x1B3 SWAP5 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE DUP4 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 SUB SWAP1 SSTORE DUP5 PUSH2 0x592 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP4 SWAP1 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH2 0x6B9 PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x61D JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x5EE JUMPI CALLER PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP3 PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH1 0x0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x20 CALLER SWAP3 LOG3 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x3 SLOAD SWAP2 DUP3 PUSH1 0x1 SHR PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x809 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT DUP6 EQ PUSH2 0x326 JUMPI DUP4 SWAP5 DUP3 DUP6 MSTORE SWAP1 DUP2 PUSH1 0x0 EQ PUSH2 0x2E4 JUMPI POP PUSH1 0x1 EQ PUSH2 0x7AC JUMPI POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP2 DUP4 LT OR PUSH2 0x258 JUMPI PUSH2 0x254 DUP3 SWAP2 DUP3 PUSH1 0x40 MSTORE DUP3 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP2 DUP4 LT PUSH2 0x7ED JUMPI POP POP DUP2 ADD PUSH1 0x20 ADD PUSH1 0x1F NOT PUSH2 0x226 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP DUP1 PUSH1 0x1 SWAP2 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP2 DUP4 SWAP3 PUSH2 0x7D7 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x75E JUMP JUMPDEST CALLVALUE PUSH2 0x141 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x141 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x141 JUMPI DUP2 PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x887 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x880 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 DUP2 MSTORE DUP3 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 JUMPDEST DUP5 DUP2 LT PUSH2 0x8E5 JUMPI POP POP PUSH1 0x1F NOT PUSH1 0x1F DUP5 PUSH1 0x0 PUSH1 0x40 DUP1 SWAP7 SWAP8 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP1 SWAP3 DUP5 ADD ADD MLOAD PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x8C4 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x141 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x141 JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0xA3C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 DUP3 ISZERO PUSH2 0xA0D JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE DUP1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 DUP2 LT PUSH2 0x9DA JUMPI SWAP2 PUSH1 0x40 DUP3 DUP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP6 DUP8 PUSH1 0x20 SWAP7 MSTORE DUP3 DUP7 MSTORE SUB DUP3 DUP3 KECCAK256 SSTORE DUP7 DUP2 MSTORE DUP1 DUP5 MSTORE KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST PUSH1 0x64 SWAP4 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 DUP4 SWAP5 SWAP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAA7 JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xBB0 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xBB0 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE 0xFC SWAP14 COINBASE SWAP15 PUSH10 0x31DAE1732C1D42FD3895 DUP13 PUSH27 0x289F8162E2C50F47EE23796C16BD64736F6C634300081B00330000 ","sourceMap":"320:545:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;3638:11:8;320:545:20;;;;;;3638:27:8;320:545:20;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;4747:26:0;320:545:20;;;;:::i;:::-;4717:18:0;2475:4;4717:18;;-1:-1:-1;320:545:20;3901:6:0;320:545:20;;3901:22:0;320:545:20;-1:-1:-1;320:545:20;3901:22:0;320:545:20;3810:120:0;;4717:18;2475:4;:::i;:::-;4747:26;:::i;:::-;320:545:20;;;;;;-1:-1:-1;;320:545:20;;;;;3440:5:8;320:545:20;;:::i;:::-;;;735:10:13;;3440:5:8;:::i;:::-;320:545:20;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;;;;;-1:-1:-1;;320:545:20;;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;320:545:20;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;:::i;:::-;;;;;2954:6:0;320:545:20;;;;;;2954:29:0;320:545:20;-1:-1:-1;320:545:20;;;;;;-1:-1:-1;320:545:20;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;:::i;:::-;735:10:13;320:545:20;;;5421:34:0;5417:102;;5529:37;320:545:20;;;5529:37:0;:::i;5417:102::-;5478:30;320:545:20;5478:30:0;320:545:20;;5478:30:0;320:545:20;;;;;-1:-1:-1;;320:545:20;;;;;;;;2761:2:8;320:545:20;;;;;;;;-1:-1:-1;;320:545:20;;;;;4330:25:0;320:545:20;;;;:::i;:::-;4300:18:0;2475:4;4300:18;;-1:-1:-1;320:545:20;3901:6:0;320:545:20;;3901:22:0;320:545:20;-1:-1:-1;320:545:20;3901:22:0;320:545:20;3810:120:0;;2475:4;4330:25;:::i;320:545:20:-;;;;;-1:-1:-1;;320:545:20;;;;;;;;;-1:-1:-1;320:545:20;3901:6:0;320:545:20;;3901:22:0;320:545:20;-1:-1:-1;320:545:20;3901:22:0;320:545:20;3810:120:0;;320:545:20;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;735:10:13;320:545:20;-1:-1:-1;320:545:20;;;;-1:-1:-1;320:545:20;;10580:17:8;10561:36;;10557:309;;320:545:20;4967:5:8;;;;;:::i;10557:309::-;10617:24;;;10613:130;;9794:19;;9790:89;;735:10:13;9892:21:8;9888:90;;4967:5;320:545:20;;;;;;;;;;735:10:13;320:545:20;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;;;10557:309:8;;;9888:90;9936:31;320:545:20;9936:31:8;320:545:20;;;;;9936:31:8;9790:89;9836:32;320:545:20;9836:32:8;320:545:20;;;;;9836:32:8;10613:130;10668:60;;;320:545:20;10668:60:8;735:10:13;320:545:20;;;;;;;;10668:60:8;320:545:20;;;;;-1:-1:-1;;320:545:20;;;;;;2908:12:8;320:545:20;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;:::i;:::-;;;735:10:13;;9794:19:8;9790:89;;320:545:20;;9892:21:8;;;9888:90;;735:10:13;320:545:20;;;;;;;;;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;;;;;10066:31:8;320:545:20;735:10:13;10066:31:8;;320:545:20;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;;;1837:5:8;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;320:545:20;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1837:5:8;320:545:20;;;;;-1:-1:-1;320:545:20;;;;;;;-1:-1:-1;;320:545:20;;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;2673:47:0;2688:32;320:545:20;2673:47:0;;:87;;;;;320:545:20;;;;;;;2673:87:0;877:25:17;862:40;;;2673:87:0;;;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;320:545:20;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;5374:300:8:-;320:545:20;;5457:18:8;;;5453:86;;320:545:20;;5552:16:8;;;5548:86;;5473:1;320:545:20;;;;;;;;;;6321:19:8;;;6317:115;;320:545:20;;;;7064:25:8;320:545:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7064:25:8;5374:300::o;6317:115::-;320:545:20;6367:50:8;;;;;;;320:545:20;;;;;6367:50:8;5548:86;5591:32;5473:1;5591:32;5473:1;5591:32;320:545:20;;5473:1:8;5591:32;5453:86;5498:30;5473:1;5498:30;5473:1;5498:30;320:545:20;;5473:1:8;5498:30;3199:103:0;320:545:20;-1:-1:-1;320:545:20;2954:6:0;320:545:20;;;-1:-1:-1;320:545:20;;735:10:13;320:545:20;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;3519:23:0;3515:108;;3199:103;:::o;3515:108::-;3565:47;-1:-1:-1;3565:47:0;735:10:13;3565:47:0;320:545:20;;;;-1:-1:-1;3565:47:0;6179:316;320:545:20;;;2954:6:0;320:545:20;;;;;;;;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;6276:23:0;6272:217;320:545:20;;;;;;2954:6:0;320:545:20;;;;;;;;-1:-1:-1;320:545:20;;;;-1:-1:-1;320:545:20;6347:4:0;320:545:20;;;;;;;;735:10:13;320:545:20;;6370:40:0;;320:545:20;6370:40:0;;6347:4;6424:11;:::o;6272:217::-;6466:12;;320:545:20;6466:12:0;:::o;6732:317::-;320:545:20;;;2954:6:0;320:545:20;;;;;;;;-1:-1:-1;320:545:20;;;;;-1:-1:-1;320:545:20;;;6826:217:0;320:545:20;;;;;;2954:6:0;320:545:20;;;;;;;;-1:-1:-1;320:545:20;;;;-1:-1:-1;320:545:20;;;;;;;;735:10:13;320:545:20;;6924:40:0;;320:545:20;6924:40:0;;320:545:20;6978:11:0;:::o"},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","name()":"06fdde03","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"wallet_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"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\":[{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"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 default value returned by this function, unless it's 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}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ExampleToken.sol\":\"ExampleToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67\",\"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a\",\"dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"contracts/ExampleToken.sol\":{\"keccak256\":\"0x66143fbb4c2d4762ff31e54e847abdb58620d26f6a09412b1e0555ea42c70710\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://9f47bdf8ba57b04931646165a5a9214d3a1022655928776f519d1b2d2ea90891\",\"dweb:/ipfs/QmYCUzS9iciRarvQ7AxDBAZZDqagtLU3HZTh8bpHXP5hTB\"]}},\"version\":1}"}},"contracts/ExampleVestingVault.sol":{"ExampleVestingVault":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"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":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"VestingLockedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"VestingReleased","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VAULT_CONTROLLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary_","type":"address"},{"internalType":"uint256","name":"releaseTime_","type":"uint256"},{"internalType":"uint256","name":"tokenAmount_","type":"uint256"}],"name":"addBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary_","type":"address"}],"name":"vestingFor","outputs":[{"components":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"internalType":"struct IVestingVault.Vesting[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_grantRole":{"entryPoint":268,"id":256,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60a0346100f157601f61108038819003918201601f19168301916001600160401b038311848410176100f6578084926020946040528339810103126100f157516001600160a01b03811681036100f15760805261005b3361010c565b507f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd9600081815260208190527f18b789f689298f9861c64acec43fb83a444fe0a0d93f282ad4f66651300c99a5805490829055604051927fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8380a4610ec5908161019b823960805181818160d001526105490152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381166000908152600080516020611060833981519152602052604090205460ff16610194576001600160a01b0316600081815260008051602061106083398151915260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b5060009056fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a71461081b57508063248a9ca3146107e65780632f2ff15d146107a657806336568abe1461073a578063704e2b2d146106ff57806386d1a69f146103d657806391d148541461037b578063a217fddf1461035f578063d547741f1461031a578063f4753b38146101ae578063f74bc9d6146100f95763fc0c546a146100a357600080fd5b346100f45760006003193601126100f457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100f45760606003193601126100f45761011261090f565b3360009081527f18b789f689298f9861c64acec43fb83a444fe0a0d93f282ad4f66651300c99a4602052604090205460ff161561015c5761015a906044359060243590610a2a565b005b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd960245260446000fd5b346100f45760206003193601126100f45773ffffffffffffffffffffffffffffffffffffffff6101dc61090f565b166000526001602052604060002080549067ffffffffffffffff82116102eb576040519161021060208260051b018461094e565b80835260208301809260005260206000206000915b83831061029e5784866040519182916020830190602084525180915260408301919060005b818110610258575050500390f35b91935091602060606001926040875173ffffffffffffffffffffffffffffffffffffffff815116835284810151858401520151604082015201940191019184939261024a565b600360206001926040516102b181610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610225565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346100f45760406003193601126100f45761015a6004356103396108ec565b9061035a61035582600052600060205260016040600020015490565b610c6f565b610dbb565b346100f45760006003193601126100f457602060405160008152f35b346100f45760406003193601126100f4576103946108ec565b600435600052600060205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346100f45760006003193601126100f4573360005260016020526040600020805467ffffffffffffffff81116102eb576040519161041a60208360051b018461094e565b818352602083019060005260206000206000915b8383106106b257600085815b81518110156104f157426020610450838561098f565b5101511115610462575b60010161043a565b9161047e6001916040610475868661098f565b510151906109d2565b92602061048b828561098f565b510151604061049a838661098f565b51015160405191825260208201527fc35bc0b152cc4084b62942d2235605f7e5db6fc6217bc7ef532ba71acf7a58ce60403392a23360005281602052600060026104e78360408420610a0e565b500155905061045a565b82801561062e57604051907fa9059cbb0000000000000000000000000000000000000000000000000000000082523360048301526024820152602081604481600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610622576000916105e0575b501561058257005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f546f6b656e207472616e7366657220756e7375636365737366756c00000000006044820152fd5b6020813d60201161061a575b816105f96020938361094e565b81010312610616575190811515820361061357508161057a565b80fd5b5080fd5b3d91506105ec565b6040513d6000823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f56657374696e675661756c743a2043616e6e6f742072656c656173652030207460448201527f6f6b656e730000000000000000000000000000000000000000000000000000006064820152fd5b600360206001926040516106c581610932565b73ffffffffffffffffffffffffffffffffffffffff865416815284860154838201526002860154604082015281520192019201919061042e565b346100f45760006003193601126100f45760206040517f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd98152f35b346100f45760406003193601126100f4576107536108ec565b3373ffffffffffffffffffffffffffffffffffffffff82160361077c5761015a90600435610dbb565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b346100f45760406003193601126100f45761015a6004356107c56108ec565b906107e161035582600052600060205260016040600020015490565b610cdc565b346100f45760206003193601126100f4576020610813600435600052600060205260016040600020015490565b604051908152f35b346100f45760206003193601126100f457600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036100f457817f79e3001b000000000000000000000000000000000000000000000000000000006020931490811561088f575b5015158152f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156108c2575b5083610888565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836108bb565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6060810190811067ffffffffffffffff8211176102eb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102eb57604052565b80518210156109a35760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116109df57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80548210156109a3576000526003602060002091020190600090565b73ffffffffffffffffffffffffffffffffffffffff1690816000526001602052604060002092835467ffffffffffffffff81116102eb5760405194610a7560208360051b018761094e565b818652602086019060005260206000206000915b838310610c22575050505060005b8451811015610b19576020610aac828761098f565b5101518314610abd57600101610a97565b839450906002610afd604094937f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac96600052600160205285600020610a0e565b5001610b0a8282546109d2565b905582519182526020820152a2565b509091925082600052600160205260406000209160405191610b3a83610932565b848352602083019282845260408101948286528054680100000000000000008110156102eb57610b6f91600182018155610a0e565b919091610bf3577f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac9560409573ffffffffffffffffffffffffffffffffffffffff60029351167fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784555160018401555191015582519182526020820152a2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60036020600192604051610c3581610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610a89565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cab5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a460019056fea26469706673582212201d1e00f1cd0fe4cf2ade62508866cbc60e4cc02753d6cf19787be0c7b78dadc764736f6c634300081b0033ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xF1 JUMPI PUSH1 0x1F PUSH2 0x1080 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xF6 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xF1 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xF1 JUMPI PUSH1 0x80 MSTORE PUSH2 0x5B CALLER PUSH2 0x10C JUMP JUMPDEST POP PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH32 0x18B789F689298F9861C64ACEC43FB83A444FE0A0D93F282AD4F66651300C99A5 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP3 PUSH32 0xBD79B86FFE0AB8E8776151514217CD7CACD52C909F66475C3AF44E129F0B00FF DUP4 DUP1 LOG4 PUSH2 0xEC5 SWAP1 DUP2 PUSH2 0x19B DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xD0 ADD MSTORE PUSH2 0x549 ADD MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1060 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x194 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1060 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x81B JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x7A6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0x704E2B2D EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x35F JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xF4753B38 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xF74BC9D6 EQ PUSH2 0xF9 JUMPI PUSH4 0xFC0C546A EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x112 PUSH2 0x90F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x18B789F689298F9861C64ACEC43FB83A444FE0A0D93F282AD4F66651300C99A4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA2A JUMP JUMPDEST STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1DC PUSH2 0x90F JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x210 PUSH1 0x20 DUP3 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD DUP1 SWAP3 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x29E JUMPI DUP5 DUP7 PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x20 DUP5 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP4 ADD SWAP2 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x258 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH1 0x20 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP4 MSTORE DUP5 DUP2 ADD MLOAD DUP6 DUP5 ADD MSTORE ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP5 ADD SWAP2 ADD SWAP2 DUP5 SWAP4 SWAP3 PUSH2 0x24A JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x2B1 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x339 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x35A PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0xDBB JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x394 PUSH2 0x8EC JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI CALLER PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x41A PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP6 DUP2 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F1 JUMPI TIMESTAMP PUSH1 0x20 PUSH2 0x450 DUP4 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD GT ISZERO PUSH2 0x462 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x43A JUMP JUMPDEST SWAP2 PUSH2 0x47E PUSH1 0x1 SWAP2 PUSH1 0x40 PUSH2 0x475 DUP7 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD SWAP1 PUSH2 0x9D2 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH2 0x48B DUP3 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 PUSH2 0x49A DUP4 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xC35BC0B152CC4084B62942D2235605F7E5DB6FC6217BC7EF532BA71ACF7A58CE PUSH1 0x40 CALLER SWAP3 LOG2 CALLER PUSH1 0x0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x0 PUSH1 0x2 PUSH2 0x4E7 DUP4 PUSH1 0x40 DUP5 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD SSTORE SWAP1 POP PUSH2 0x45A JUMP JUMPDEST DUP3 DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x622 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x5E0 JUMPI JUMPDEST POP ISZERO PUSH2 0x582 JUMPI STOP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207472616E7366657220756E7375636365737366756C0000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x61A JUMPI JUMPDEST DUP2 PUSH2 0x5F9 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x94E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x616 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x613 JUMPI POP DUP2 PUSH2 0x57A JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x56657374696E675661756C743A2043616E6E6F742072656C6561736520302074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6B656E73000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x6C5 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x42E JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x753 PUSH2 0x8EC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x77C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xDBB JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x7C5 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x7E1 PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH2 0x813 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xF4 JUMPI DUP2 PUSH32 0x79E3001B00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x88F JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x8C2 JUMPI JUMPDEST POP DUP4 PUSH2 0x888 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x8BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x9DF JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x0 MSTORE PUSH1 0x3 PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP2 MUL ADD SWAP1 PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP3 DUP4 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0xA75 PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0xC22 JUMPI POP POP POP POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xB19 JUMPI PUSH1 0x20 PUSH2 0xAAC DUP3 DUP8 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD DUP4 EQ PUSH2 0xABD JUMPI PUSH1 0x1 ADD PUSH2 0xA97 JUMP JUMPDEST DUP4 SWAP5 POP SWAP1 PUSH1 0x2 PUSH2 0xAFD PUSH1 0x40 SWAP5 SWAP4 PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP7 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP6 PUSH1 0x0 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD PUSH2 0xB0A DUP3 DUP3 SLOAD PUSH2 0x9D2 JUMP JUMPDEST SWAP1 SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP3 POP DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0xB3A DUP4 PUSH2 0x932 JUMP JUMPDEST DUP5 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 DUP3 DUP5 MSTORE PUSH1 0x40 DUP2 ADD SWAP5 DUP3 DUP7 MSTORE DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EB JUMPI PUSH2 0xB6F SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0xA0E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0xBF3 JUMPI PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP6 PUSH1 0x40 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x2 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP6 SLOAD AND OR DUP5 SSTORE MLOAD PUSH1 0x1 DUP5 ADD SSTORE MLOAD SWAP2 ADD SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0xC35 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0xA89 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCAB JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR 0x1E STOP CALL 0xCD 0xF 0xE4 0xCF 0x2A 0xDE PUSH3 0x508866 0xCB 0xC6 0xE 0x4C 0xC0 0x27 MSTORE8 0xD6 0xCF NOT PUSH25 0x7BE0C7B78DADC764736F6C634300081B0033AD3228B676F7D3 0xCD TIMESTAMP DUP5 0xA5 PREVRANDAO EXTCODEHASH OR CALL SWAP7 0x2B CALLDATASIZE 0xE4 SWAP2 0xB3 EXP BLOCKHASH 0xB2 BLOCKHASH PC BLOBHASH 0xE5 SWAP8 0xBA PUSH0 0xB5 ","sourceMap":"218:104:21:-:0;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;-1:-1:-1;;;;;218:104:21;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;218:104:21;;;;;;689:15:28;;714:42;745:10;714:42;:::i;:::-;-1:-1:-1;522:34:28;-1:-1:-1;218:104:21;;;;;;;3901:22:0;218:104:21;;;;;;;;;5886:52:0;-1:-1:-1;;5886:52:0;218:104:21;;;;;;689:15:28;218:104:21;;;;;;;;;;;;-1:-1:-1;218:104:21;;;;;;-1:-1:-1;218:104:21;;;;;-1:-1:-1;218:104:21;6179:316:0;-1:-1:-1;;;;;218:104:21;;2232:4:0;218:104:21;;;-1:-1:-1;;;;;;;;;;;218:104:21;;;;;;;;;;-1:-1:-1;;;;;218:104:21;2232:4:0;218:104:21;;;-1:-1:-1;;;;;;;;;;;218:104:21;;;;;;;-1:-1:-1;;218:104:21;;;;;735:10:13;;218:104:21;6370:40:0;2232:4;;6370:40;6347:4;6424:11;:::o;6272:217::-;6466:12;2232:4;6466:12;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2319,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6158":{"entryPoint":2284,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint256":{"entryPoint":2514,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2382,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6160":{"entryPoint":2354,"id":null,"parameterSlots":1,"returnSlots":0},"fun_addBeneficiary_inner":{"entryPoint":2602,"id":null,"parameterSlots":3,"returnSlots":0},"fun_checkRole":{"entryPoint":3183,"id":93,"parameterSlots":1,"returnSlots":0},"fun_getRoleAdmin":{"entryPoint":null,"id":128,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":3292,"id":256,"parameterSlots":2,"returnSlots":1},"fun_revokeRole":{"entryPoint":3515,"id":294,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_struct_Vesting_dyn":{"entryPoint":2447,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_struct_Vesting__dyn":{"entryPoint":2574,"id":null,"parameterSlots":2,"returnSlots":2}},"generatedSources":[],"immutableReferences":{"3690":[{"length":32,"start":208},{"length":32,"start":1353}]},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a71461081b57508063248a9ca3146107e65780632f2ff15d146107a657806336568abe1461073a578063704e2b2d146106ff57806386d1a69f146103d657806391d148541461037b578063a217fddf1461035f578063d547741f1461031a578063f4753b38146101ae578063f74bc9d6146100f95763fc0c546a146100a357600080fd5b346100f45760006003193601126100f457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100f45760606003193601126100f45761011261090f565b3360009081527f18b789f689298f9861c64acec43fb83a444fe0a0d93f282ad4f66651300c99a4602052604090205460ff161561015c5761015a906044359060243590610a2a565b005b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd960245260446000fd5b346100f45760206003193601126100f45773ffffffffffffffffffffffffffffffffffffffff6101dc61090f565b166000526001602052604060002080549067ffffffffffffffff82116102eb576040519161021060208260051b018461094e565b80835260208301809260005260206000206000915b83831061029e5784866040519182916020830190602084525180915260408301919060005b818110610258575050500390f35b91935091602060606001926040875173ffffffffffffffffffffffffffffffffffffffff815116835284810151858401520151604082015201940191019184939261024a565b600360206001926040516102b181610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610225565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346100f45760406003193601126100f45761015a6004356103396108ec565b9061035a61035582600052600060205260016040600020015490565b610c6f565b610dbb565b346100f45760006003193601126100f457602060405160008152f35b346100f45760406003193601126100f4576103946108ec565b600435600052600060205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346100f45760006003193601126100f4573360005260016020526040600020805467ffffffffffffffff81116102eb576040519161041a60208360051b018461094e565b818352602083019060005260206000206000915b8383106106b257600085815b81518110156104f157426020610450838561098f565b5101511115610462575b60010161043a565b9161047e6001916040610475868661098f565b510151906109d2565b92602061048b828561098f565b510151604061049a838661098f565b51015160405191825260208201527fc35bc0b152cc4084b62942d2235605f7e5db6fc6217bc7ef532ba71acf7a58ce60403392a23360005281602052600060026104e78360408420610a0e565b500155905061045a565b82801561062e57604051907fa9059cbb0000000000000000000000000000000000000000000000000000000082523360048301526024820152602081604481600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610622576000916105e0575b501561058257005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f546f6b656e207472616e7366657220756e7375636365737366756c00000000006044820152fd5b6020813d60201161061a575b816105f96020938361094e565b81010312610616575190811515820361061357508161057a565b80fd5b5080fd5b3d91506105ec565b6040513d6000823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f56657374696e675661756c743a2043616e6e6f742072656c656173652030207460448201527f6f6b656e730000000000000000000000000000000000000000000000000000006064820152fd5b600360206001926040516106c581610932565b73ffffffffffffffffffffffffffffffffffffffff865416815284860154838201526002860154604082015281520192019201919061042e565b346100f45760006003193601126100f45760206040517f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd98152f35b346100f45760406003193601126100f4576107536108ec565b3373ffffffffffffffffffffffffffffffffffffffff82160361077c5761015a90600435610dbb565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b346100f45760406003193601126100f45761015a6004356107c56108ec565b906107e161035582600052600060205260016040600020015490565b610cdc565b346100f45760206003193601126100f4576020610813600435600052600060205260016040600020015490565b604051908152f35b346100f45760206003193601126100f457600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036100f457817f79e3001b000000000000000000000000000000000000000000000000000000006020931490811561088f575b5015158152f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156108c2575b5083610888565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836108bb565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6060810190811067ffffffffffffffff8211176102eb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102eb57604052565b80518210156109a35760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116109df57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80548210156109a3576000526003602060002091020190600090565b73ffffffffffffffffffffffffffffffffffffffff1690816000526001602052604060002092835467ffffffffffffffff81116102eb5760405194610a7560208360051b018761094e565b818652602086019060005260206000206000915b838310610c22575050505060005b8451811015610b19576020610aac828761098f565b5101518314610abd57600101610a97565b839450906002610afd604094937f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac96600052600160205285600020610a0e565b5001610b0a8282546109d2565b905582519182526020820152a2565b509091925082600052600160205260406000209160405191610b3a83610932565b848352602083019282845260408101948286528054680100000000000000008110156102eb57610b6f91600182018155610a0e565b919091610bf3577f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac9560409573ffffffffffffffffffffffffffffffffffffffff60029351167fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784555160018401555191015582519182526020820152a2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60036020600192604051610c3581610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610a89565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cab5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a460019056fea26469706673582212201d1e00f1cd0fe4cf2ade62508866cbc60e4cc02753d6cf19787be0c7b78dadc764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x81B JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x7A6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0x704E2B2D EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x35F JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xF4753B38 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xF74BC9D6 EQ PUSH2 0xF9 JUMPI PUSH4 0xFC0C546A EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x112 PUSH2 0x90F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x18B789F689298F9861C64ACEC43FB83A444FE0A0D93F282AD4F66651300C99A4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA2A JUMP JUMPDEST STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1DC PUSH2 0x90F JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x210 PUSH1 0x20 DUP3 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD DUP1 SWAP3 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x29E JUMPI DUP5 DUP7 PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x20 DUP5 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP4 ADD SWAP2 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x258 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH1 0x20 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP4 MSTORE DUP5 DUP2 ADD MLOAD DUP6 DUP5 ADD MSTORE ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP5 ADD SWAP2 ADD SWAP2 DUP5 SWAP4 SWAP3 PUSH2 0x24A JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x2B1 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x339 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x35A PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0xDBB JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x394 PUSH2 0x8EC JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI CALLER PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x41A PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP6 DUP2 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F1 JUMPI TIMESTAMP PUSH1 0x20 PUSH2 0x450 DUP4 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD GT ISZERO PUSH2 0x462 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x43A JUMP JUMPDEST SWAP2 PUSH2 0x47E PUSH1 0x1 SWAP2 PUSH1 0x40 PUSH2 0x475 DUP7 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD SWAP1 PUSH2 0x9D2 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH2 0x48B DUP3 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 PUSH2 0x49A DUP4 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xC35BC0B152CC4084B62942D2235605F7E5DB6FC6217BC7EF532BA71ACF7A58CE PUSH1 0x40 CALLER SWAP3 LOG2 CALLER PUSH1 0x0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x0 PUSH1 0x2 PUSH2 0x4E7 DUP4 PUSH1 0x40 DUP5 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD SSTORE SWAP1 POP PUSH2 0x45A JUMP JUMPDEST DUP3 DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x622 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x5E0 JUMPI JUMPDEST POP ISZERO PUSH2 0x582 JUMPI STOP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207472616E7366657220756E7375636365737366756C0000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x61A JUMPI JUMPDEST DUP2 PUSH2 0x5F9 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x94E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x616 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x613 JUMPI POP DUP2 PUSH2 0x57A JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x56657374696E675661756C743A2043616E6E6F742072656C6561736520302074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6B656E73000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x6C5 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x42E JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x753 PUSH2 0x8EC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x77C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xDBB JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x7C5 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x7E1 PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH2 0x813 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xF4 JUMPI DUP2 PUSH32 0x79E3001B00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x88F JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x8C2 JUMPI JUMPDEST POP DUP4 PUSH2 0x888 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x8BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x9DF JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x0 MSTORE PUSH1 0x3 PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP2 MUL ADD SWAP1 PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP3 DUP4 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0xA75 PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0xC22 JUMPI POP POP POP POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xB19 JUMPI PUSH1 0x20 PUSH2 0xAAC DUP3 DUP8 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD DUP4 EQ PUSH2 0xABD JUMPI PUSH1 0x1 ADD PUSH2 0xA97 JUMP JUMPDEST DUP4 SWAP5 POP SWAP1 PUSH1 0x2 PUSH2 0xAFD PUSH1 0x40 SWAP5 SWAP4 PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP7 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP6 PUSH1 0x0 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD PUSH2 0xB0A DUP3 DUP3 SLOAD PUSH2 0x9D2 JUMP JUMPDEST SWAP1 SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP3 POP DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0xB3A DUP4 PUSH2 0x932 JUMP JUMPDEST DUP5 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 DUP3 DUP5 MSTORE PUSH1 0x40 DUP2 ADD SWAP5 DUP3 DUP7 MSTORE DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EB JUMPI PUSH2 0xB6F SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0xA0E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0xBF3 JUMPI PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP6 PUSH1 0x40 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x2 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP6 SLOAD AND OR DUP5 SSTORE MLOAD PUSH1 0x1 DUP5 ADD SSTORE MLOAD SWAP2 ADD SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0xC35 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0xA89 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCAB JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR 0x1E STOP CALL 0xCD 0xF 0xE4 0xCF 0x2A 0xDE PUSH3 0x508866 0xCB 0xC6 0xE 0x4C 0xC0 0x27 MSTORE8 0xD6 0xCF NOT PUSH25 0x7BE0C7B78DADC764736F6C634300081B003300000000000000 ","sourceMap":"218:104:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;;;;;2250:6:28;218:104:21;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;;;:::i;:::-;735:10:13;218:104:21;;;;;;;;;;;;;3519:23:0;3515:108;;2490:1;218:104:21;;;;;;2490:1:0;;:::i;:::-;218:104:21;3515:108:0;3565:47;218:104:21;3565:47:0;735:10:13;218:104:21;;522:34:28;218:104:21;;;;3565:47:0;218:104:21;;;;;-1:-1:-1;;218:104:21;;;;;;;;:::i;:::-;;;;2507:8:28;218:104:21;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2507:8:28;218:104:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2507:8:28;218:104:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;4747:26:0;218:104:21;;;;:::i;:::-;4717:18:0;2475:4;4717:18;;3901:6;218:104:21;3901:6:0;218:104:21;;3901:22:0;218:104:21;3901:6:0;218:104:21;3901:22:0;218:104:21;3810:120:0;;4717:18;2475:4;:::i;:::-;4747:26;:::i;218:104:21:-;;;;;-1:-1:-1;;218:104:21;;;;;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;;;:::i;:::-;;;;;;;;;;;;2954:29:0;218:104:21;-1:-1:-1;218:104:21;;;;;;-1:-1:-1;218:104:21;;;;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;735:10:13;218:104:21;;2681:8:28;218:104:21;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2713:27:28;218:104:21;2791:3:28;218:104:21;;2770:19:28;;;;;2841:15;218:104:21;2814:11:28;;;;:::i;:::-;;:23;218:104:21;2814:42:28;;2810:301;;2791:3;2681:8;218:104:21;2755:13:28;;2810:301;2912:11;2894:41;2681:8;2912:11;218:104:21;2912:11:28;;;;:::i;:::-;;:23;218:104:21;2894:41:28;;:::i;:::-;2988:11;218:104:21;2988:11:28;;;;:::i;:::-;;:23;218:104:21;;3013:11:28;;;;:::i;:::-;;:23;218:104:21;;;;;;;;;;2958:79:28;218:104:21;735:10:13;2958:79:28;;735:10:13;218:104:21;;;;;;;3055:25:28;218:104:21;;;;3055:25:28;:::i;:::-;:37;;218:104:21;2810:301:28;;;;2770:19;;3138;;218:104:21;;;;3225:47:28;218:104:21;3225:47:28;;735:10:13;218:104:21;3225:47:28;;218:104:21;;;;;;2250:6:28;3225:47;2250:6;218:104:21;;2250:6:28;218:104:21;3225:47:28;;;;;;;218:104:21;3225:47:28;;;2750:371;218:104:21;;;;;;;;;;;;;;;;;;;;;;;3225:47:28;218:104:21;;;;3225:47:28;218:104:21;3225:47:28;;218:104:21;3225:47:28;;;;;;218:104:21;3225:47:28;;;:::i;:::-;;;218:104:21;;;;;;;;;;;;;3225:47:28;;;;218:104:21;;;;;;;3225:47:28;;;-1:-1:-1;3225:47:28;;;218:104:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2681:8:28;218:104:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;;;;522:34:28;218:104:21;;;;;;;;-1:-1:-1;;218:104:21;;;;;;;:::i;:::-;735:10:13;218:104:21;;;5421:34:0;5417:102;;5529:37;218:104:21;;;5529:37:0;:::i;5417:102::-;5478:30;218:104:21;5478:30:0;218:104:21;;5478:30:0;218:104:21;;;;;-1:-1:-1;;218:104:21;;;;;4330:25:0;218:104:21;;;;:::i;:::-;4300:18:0;2475:4;4300:18;;3901:6;218:104:21;3901:6:0;218:104:21;;3901:22:0;218:104:21;3901:6:0;218:104:21;3901:22:0;218:104:21;3810:120:0;;2475:4;4330:25;:::i;218:104:21:-;;;;;-1:-1:-1;;218:104:21;;;;;;;;;3901:6:0;218:104:21;3901:6:0;218:104:21;;3901:22:0;218:104:21;3901:6:0;218:104:21;3901:22:0;218:104:21;3810:120:0;;218:104:21;;;;;;;;;;;;-1:-1:-1;;218:104:21;;;;;;;;;;;;;;;;966:46:28;981:31;218:104:21;966:46:28;;:86;;;;;218:104:21;;;;;;;966:86:28;2688:32:0;2673:47;;;-1:-1:-1;2673:87:0;;;;966:86:28;;;;;2673:87:0;877:25:17;862:40;;;2673:87:0;;;218:104:21;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;218:104:21;;;-1:-1:-1;218:104:21;;;;;-1:-1:-1;218:104:21;:::o;1347:755:28:-;218:104:21;;;;-1:-1:-1;218:104:21;1581:8:28;218:104:21;;;-1:-1:-1;218:104:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;218:104:21;;-1:-1:-1;218:104:21;-1:-1:-1;218:104:21;;;;;;;1619:13:28;;;;-1:-1:-1;1655:3:28;218:104:21;;1634:19:28;;;;;218:104:21;1694:11:28;;;;:::i;:::-;;:23;218:104:21;1678:39:28;;1674:235;;1581:8;218:104:21;1619:13:28;;1674:235;218:104:21;;;;;1737:25:28;218:104:21;;;1813:57:28;218:104:21;-1:-1:-1;218:104:21;1581:8:28;218:104:21;;;-1:-1:-1;218:104:21;1737:25:28;:::i;:::-;:37;;:53;218:104:21;;;1737:53:28;:::i;:::-;218:104:21;;;;;;;;;;;1813:57:28;1888:7::o;1634:19::-;;;;;;218:104:21;-1:-1:-1;218:104:21;1581:8:28;218:104:21;;;-1:-1:-1;218:104:21;;;;;;;;:::i;:::-;;;;;1957:49:28;;218:104:21;;;;;1957:49:28;;218:104:21;;;;;;;;;;;;;;1581:8:28;218:104:21;;;;;:::i;:::-;;;;;;2022:57:28;218:104:21;;;;;;;;;;;;;;;;1581:8:28;218:104:21;;;;;;;;;;;;;;;;2022:57:28;1347:755::o;218:104:21:-;;-1:-1:-1;218:104:21;-1:-1:-1;218:104:21;;;-1:-1:-1;218:104:21;;;;1581:8:28;218:104:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3199:103:0;218:104:21;2954:6:0;218:104:21;2954:6:0;218:104:21;;;2954:6:0;218:104:21;;735:10:13;218:104:21;-1:-1:-1;218:104:21;;;;;-1:-1:-1;218:104:21;;;3519:23:0;3515:108;;3199:103;:::o;3515:108::-;3565:47;2954:6;3565:47;735:10:13;3565:47:0;218:104:21;;;;2954:6:0;3565:47;6179:316;218:104:21;;;;;;;;;;;;-1:-1:-1;218:104:21;;;;;-1:-1:-1;218:104:21;;;6276:23:0;6272:217;218:104:21;;;;;;;;;;;;;;;-1:-1:-1;218:104:21;;;;-1:-1:-1;218:104:21;6347:4:0;218:104:21;;;;;;;;735:10:13;218:104:21;;6370:40:0;;218:104:21;6370:40:0;;6347:4;6424:11;:::o;6272:217::-;6466:12;;218:104:21;6466:12:0;:::o;6732:317::-;218:104:21;;;;;;;;;;;;-1:-1:-1;218:104:21;;;;;-1:-1:-1;218:104:21;;;6826:217:0;218:104:21;;;;;;;;;;;;;;;-1:-1:-1;218:104:21;;;;-1:-1:-1;218:104:21;;;;;;;;735:10:13;218:104:21;;6924:40:0;;218:104:21;6924:40:0;;218:104:21;6978:11:0;:::o"},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","VAULT_CONTROLLER_ROLE()":"704e2b2d","addBeneficiary(address,uint256,uint256)":"f74bc9d6","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","release()":"86d1a69f","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","vestingFor(address)":"f4753b38"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"VestingLockedIn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"VestingReleased\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_CONTROLLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"releaseTime_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount_\",\"type\":\"uint256\"}],\"name\":\"addBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"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\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary_\",\"type\":\"address\"}],\"name\":\"vestingFor\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct IVestingVault.Vesting[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"addBeneficiary(address,uint256,uint256)\":{\"details\":\"function to create a vesting for the beneficiary\",\"params\":{\"beneficiary_\":\"Beneficiary of tokens after they are released\",\"releaseTime_\":\"Timestamp when token release is enabled\",\"tokenAmount_\":\"Amount of tokens to release\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"release()\":{\"details\":\"releases the tokens of the msg sender\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"token()\":{\"returns\":{\"_0\":\"the address of the token being stored.\"}},\"vestingFor(address)\":{\"params\":{\"beneficiary_\":\"the address for which the vesting is returned\"},\"returns\":{\"_0\":\"the vesting for an address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ExampleVestingVault.sol\":\"ExampleVestingVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67\",\"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"contracts/ExampleVestingVault.sol\":{\"keccak256\":\"0x8e854a57dc72ca04afecbf3a9125885db5073591164394cbaa8668c47679a11b\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://50afe310a0b2430a150fda1f5eaf551e17ab7421750d6f5e187fdb15147b542d\",\"dweb:/ipfs/QmNQsmdzbN1bkJS8ecdgNUYmHJqBYWhKm16WmRbJJpR9Dp\"]},\"contracts/library/IVestingVault.sol\":{\"keccak256\":\"0xf3f074546fdb24b8d2889ffd7947b5134669f1eb47c4baf30abf4663f6d320d7\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://e13d929241510074238c4d3797aeaa9a8f3bea58c9d8beab73c2a39583dcf56e\",\"dweb:/ipfs/QmNX2cSo1uxxuviE5SL8wUgMgC2DBrDEyZa8KVd9DipUAU\"]},\"contracts/library/VestingVault.sol\":{\"keccak256\":\"0x0386c58188ed9a89f544a617e7b628210935857895b07549854a19e140a1b21c\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c2d8275e0105f4a6c134acb7057706b00c437e3b5e72185479024343346ab1ee\",\"dweb:/ipfs/QmegrKCswosuTqn2uizDBKmrMFboBN9ATcXPVcyLzbUpdR\"]}},\"version\":1}"}},"contracts/ExampleVestingWallet.sol":{"ExampleVestingWallet":{"abi":[{"inputs":[{"internalType":"address","name":"beneficiaryAddress","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint64","name":"durationSeconds","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"end","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_uint64_fromMemory":{"entryPoint":299,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60c03461011057601f610b9838819003918201601f19168301916001600160401b03831184841017610115578084926060946040528339810103126101105780516001600160a01b03811691908290036101105761006b60406100646020840161012b565b920161012b565b9082156100fa57600080546001600160a01b031981168517825560405194916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360805260a052610a5890816101408239608051818181610217015281816108dc0152610911015260a0518181816106a8015281816108b101526109790152f35b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160401b03821682036101105756fe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630a17b06b146106cc5780630fb5a6b414610687578063191655871461054a578063715018a6146104cc578063810ec23b1461049257806386d1a69f146102f75780638da5cb5b146102c357806396132521146102a55780639852595c1461025e578063a3f8eace1461023b578063be9a6555146101f6578063efbe1c1c146101db578063f2fde38b146101075763fbccedae0361000e57346101025760006003193601126101025760206100fa6100f1476100ec67ffffffffffffffff42169160015490610727565b610901565b60015490610853565b604051908152f35b600080fd5b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff610135610704565b61013d6109d3565b1680156101ac5773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346101025760006003193601126101025760206100fa6108a3565b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760206100fa610259610704565b610860565b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff61028c610704565b1660005260026020526020604060002054604051908152f35b34610102576000600319360112610102576020600154604051908152f35b3461010257600060031936011261010257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b3461010257600060031936011261010257610324476100ec67ffffffffffffffff42169160015490610727565b61033b6103346001548093610853565b8092610727565b6001557fda9d4e5f101b8b9b1c5b76d0c5a9f7923571acfc02376aa076b75a8c080c956b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff6000541681471061046057600080809381935af13d15610458573d9067ffffffffffffffff821161042957604051916103de60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610763565b82523d6000602084013e5b156103f057005b8051156103ff57805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060906103e9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b34610102576040600319360112610102576104ab610704565b6024359067ffffffffffffffff82168203610102576020916100fa916107a4565b34610102576000600319360112610102576104e56109d3565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010257602060031936011261010257610563610704565b6020600073ffffffffffffffffffffffffffffffffffffffff61058584610860565b931692838252600283526040822061059e828254610727565b9055837fc0e523490dd523c33b1878c9eb14ff46991e3f5b2cd33710918618f2a39cba1b84604051848152a273ffffffffffffffffffffffffffffffffffffffff8254169060405190848201927fa9059cbb0000000000000000000000000000000000000000000000000000000084526024830152604482015260448152610627606482610763565b519082855af11561067b576000513d6106725750803b155b61064557005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6001141561063f565b6040513d6000823e3d90fd5b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760043567ffffffffffffffff81168103610102576100fa6020916100ec4760015490610727565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010257565b9190820180921161073457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761042957604052565b73ffffffffffffffffffffffffffffffffffffffff16906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa90811561067b5760009161081f575b506100ec9061081c93600052600260205260406000205490610727565b90565b90506020813d60201161084b575b8161083a60209383610763565b81010312610102575161081c6107ff565b3d915061082d565b9190820391821161073457565b61081c9073ffffffffffffffffffffffffffffffffffffffff61088d67ffffffffffffffff4216836107a4565b9116600052600260205260406000205490610853565b61081c67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610727565b9067ffffffffffffffff908116907f0000000000000000000000000000000000000000000000000000000000000000168082101561094157505050600090565b6109496108a3565b821061095457505090565b61095d91610853565b908181029181830414901517156107345767ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156109a4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff6000541633036109f457565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea264697066735822122031328d55e2422f5525e0d234fa2fbf6b808aa8d0c0569dc37b7d59856c7c6f1e64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x110 JUMPI PUSH1 0x1F PUSH2 0xB98 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x115 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x110 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 SWAP1 DUP3 SWAP1 SUB PUSH2 0x110 JUMPI PUSH2 0x6B PUSH1 0x40 PUSH2 0x64 PUSH1 0x20 DUP5 ADD PUSH2 0x12B JUMP JUMPDEST SWAP3 ADD PUSH2 0x12B JUMP JUMPDEST SWAP1 DUP3 ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND DUP6 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH2 0xA58 SWAP1 DUP2 PUSH2 0x140 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x217 ADD MSTORE DUP2 DUP2 PUSH2 0x8DC ADD MSTORE PUSH2 0x911 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x6A8 ADD MSTORE DUP2 DUP2 PUSH2 0x8B1 ADD MSTORE PUSH2 0x979 ADD MSTORE RETURN JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x110 JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x1B JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA17B06B EQ PUSH2 0x6CC JUMPI DUP1 PUSH4 0xFB5A6B4 EQ PUSH2 0x687 JUMPI DUP1 PUSH4 0x19165587 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0x810EC23B EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0x96132521 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x9852595C EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0xA3F8EACE EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xEFBE1C1C EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x107 JUMPI PUSH4 0xFBCCEDAE SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0xF1 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x901 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x135 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x13D PUSH2 0x9D3 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND OR PUSH1 0x0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x8A3 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x259 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x860 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x28C PUSH2 0x704 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x324 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x33B PUSH2 0x334 PUSH1 0x1 SLOAD DUP1 SWAP4 PUSH2 0x853 JUMP JUMPDEST DUP1 SWAP3 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH32 0xDA9D4E5F101B8B9B1C5B76D0C5A9F7923571ACFC02376AA076B75A8C080C956B PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND DUP2 SELFBALANCE LT PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 DUP1 SWAP4 DUP2 SWAP4 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x458 JUMPI RETURNDATASIZE SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x429 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3DE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x763 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x3F0 JUMPI STOP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3FF JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x3E9 JUMP JUMPDEST POP SELFBALANCE PUSH32 0xCF47918100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4AB PUSH2 0x704 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI PUSH1 0x20 SWAP2 PUSH2 0xFA SWAP2 PUSH2 0x7A4 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4E5 PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x563 PUSH2 0x704 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x585 DUP5 PUSH2 0x860 JUMP JUMPDEST SWAP4 AND SWAP3 DUP4 DUP3 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 DUP3 KECCAK256 PUSH2 0x59E DUP3 DUP3 SLOAD PUSH2 0x727 JUMP JUMPDEST SWAP1 SSTORE DUP4 PUSH32 0xC0E523490DD523C33B1878C9EB14FF46991E3F5B2CD33710918618F2A39CBA1B DUP5 PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE LOG2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SLOAD AND SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP5 DUP3 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x627 PUSH1 0x64 DUP3 PUSH2 0x763 JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 MLOAD RETURNDATASIZE PUSH2 0x672 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x645 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x63F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x102 JUMPI PUSH2 0xFA PUSH1 0x20 SWAP2 PUSH2 0xEC SELFBALANCE PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x429 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 SWAP2 PUSH2 0x81F JUMPI JUMPDEST POP PUSH2 0xEC SWAP1 PUSH2 0x81C SWAP4 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x84B JUMPI JUMPDEST DUP2 PUSH2 0x83A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x763 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x102 JUMPI MLOAD PUSH2 0x81C PUSH2 0x7FF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x82D JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH2 0x81C SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x88D PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND DUP4 PUSH2 0x7A4 JUMP JUMPDEST SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH2 0x81C PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x727 JUMP JUMPDEST SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH32 0x0 AND DUP1 DUP3 LT ISZERO PUSH2 0x941 JUMPI POP POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x949 PUSH2 0x8A3 JUMP JUMPDEST DUP3 LT PUSH2 0x954 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x95D SWAP2 PUSH2 0x853 JUMP JUMPDEST SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x734 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP2 ISZERO PUSH2 0x9A4 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND CALLER SUB PUSH2 0x9F4 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE ORIGIN DUP14 SSTORE 0xE2 TIMESTAMP 0x2F SSTORE 0x25 0xE0 0xD2 CALLVALUE STATICCALL 0x2F 0xBF PUSH12 0x808AA8D0C0569DC37B7D5985 PUSH13 0x7C6F1E64736F6C634300081B00 CALLER ","sourceMap":"169:254:22:-:0;;;;;;;;;;;;;-1:-1:-1;;169:254:22;;;;-1:-1:-1;;;;;169:254:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;169:254:22;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;1273:26:2;;;1269:95;;-1:-1:-1;169:254:22;;-1:-1:-1;;;;;;169:254:22;;;;;;;;;;-1:-1:-1;;;;;169:254:22;;;;3052:40:2;;-1:-1:-1;3052:40:2;2644:23:3;;2677:27;;169:254:22;;;;;;2644:23:3;169:254:22;;;;;;;;;;;;;;;2677:27:3;169:254:22;;;;;;;;;;;;;;;;1269:95:2;1322:31;;;-1:-1:-1;1322:31:2;-1:-1:-1;1322:31:2;169:254:22;;-1:-1:-1;1322:31:2;169:254:22;-1:-1:-1;169:254:22;;;;;;-1:-1:-1;169:254:22;;;;;-1:-1:-1;169:254:22;;;;-1:-1:-1;;;;;169:254:22;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1796,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint256":{"entryPoint":1831,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2131,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1891,"id":null,"parameterSlots":2,"returnSlots":0},"fun_checkOwner":{"entryPoint":2515,"id":463,"parameterSlots":0,"returnSlots":0},"fun_end":{"entryPoint":2211,"id":621,"parameterSlots":0,"returnSlots":1},"fun_releasable":{"entryPoint":2144,"id":683,"parameterSlots":1,"returnSlots":1},"fun_vestedAmount":{"entryPoint":1956,"id":796,"parameterSlots":2,"returnSlots":1},"fun_vestingSchedule":{"entryPoint":2305,"id":836,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"561":[{"length":32,"start":535},{"length":32,"start":2268},{"length":32,"start":2321}],"563":[{"length":32,"start":1704},{"length":32,"start":2225},{"length":32,"start":2425}]},"linkReferences":{},"object":"6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c80630a17b06b146106cc5780630fb5a6b414610687578063191655871461054a578063715018a6146104cc578063810ec23b1461049257806386d1a69f146102f75780638da5cb5b146102c357806396132521146102a55780639852595c1461025e578063a3f8eace1461023b578063be9a6555146101f6578063efbe1c1c146101db578063f2fde38b146101075763fbccedae0361000e57346101025760006003193601126101025760206100fa6100f1476100ec67ffffffffffffffff42169160015490610727565b610901565b60015490610853565b604051908152f35b600080fd5b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff610135610704565b61013d6109d3565b1680156101ac5773ffffffffffffffffffffffffffffffffffffffff600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346101025760006003193601126101025760206100fa6108a3565b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760206100fa610259610704565b610860565b346101025760206003193601126101025773ffffffffffffffffffffffffffffffffffffffff61028c610704565b1660005260026020526020604060002054604051908152f35b34610102576000600319360112610102576020600154604051908152f35b3461010257600060031936011261010257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b3461010257600060031936011261010257610324476100ec67ffffffffffffffff42169160015490610727565b61033b6103346001548093610853565b8092610727565b6001557fda9d4e5f101b8b9b1c5b76d0c5a9f7923571acfc02376aa076b75a8c080c956b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff6000541681471061046057600080809381935af13d15610458573d9067ffffffffffffffff821161042957604051916103de60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610763565b82523d6000602084013e5b156103f057005b8051156103ff57805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060906103e9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b34610102576040600319360112610102576104ab610704565b6024359067ffffffffffffffff82168203610102576020916100fa916107a4565b34610102576000600319360112610102576104e56109d3565b600073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010257602060031936011261010257610563610704565b6020600073ffffffffffffffffffffffffffffffffffffffff61058584610860565b931692838252600283526040822061059e828254610727565b9055837fc0e523490dd523c33b1878c9eb14ff46991e3f5b2cd33710918618f2a39cba1b84604051848152a273ffffffffffffffffffffffffffffffffffffffff8254169060405190848201927fa9059cbb0000000000000000000000000000000000000000000000000000000084526024830152604482015260448152610627606482610763565b519082855af11561067b576000513d6106725750803b155b61064557005b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6001141561063f565b6040513d6000823e3d90fd5b3461010257600060031936011261010257602060405167ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101025760206003193601126101025760043567ffffffffffffffff81168103610102576100fa6020916100ec4760015490610727565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010257565b9190820180921161073457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761042957604052565b73ffffffffffffffffffffffffffffffffffffffff16906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa90811561067b5760009161081f575b506100ec9061081c93600052600260205260406000205490610727565b90565b90506020813d60201161084b575b8161083a60209383610763565b81010312610102575161081c6107ff565b3d915061082d565b9190820391821161073457565b61081c9073ffffffffffffffffffffffffffffffffffffffff61088d67ffffffffffffffff4216836107a4565b9116600052600260205260406000205490610853565b61081c67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610727565b9067ffffffffffffffff908116907f0000000000000000000000000000000000000000000000000000000000000000168082101561094157505050600090565b6109496108a3565b821061095457505090565b61095d91610853565b908181029181830414901517156107345767ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156109a4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff6000541633036109f457565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea264697066735822122031328d55e2422f5525e0d234fa2fbf6b808aa8d0c0569dc37b7d59856c7c6f1e64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x1B JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA17B06B EQ PUSH2 0x6CC JUMPI DUP1 PUSH4 0xFB5A6B4 EQ PUSH2 0x687 JUMPI DUP1 PUSH4 0x19165587 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4CC JUMPI DUP1 PUSH4 0x810EC23B EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0x96132521 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x9852595C EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0xA3F8EACE EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0xBE9A6555 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xEFBE1C1C EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x107 JUMPI PUSH4 0xFBCCEDAE SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0xF1 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x901 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x135 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x13D PUSH2 0x9D3 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND OR PUSH1 0x0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x1E4FBDF700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x8A3 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH2 0xFA PUSH2 0x259 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x860 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x28C PUSH2 0x704 JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x324 SELFBALANCE PUSH2 0xEC PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND SWAP2 PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH2 0x33B PUSH2 0x334 PUSH1 0x1 SLOAD DUP1 SWAP4 PUSH2 0x853 JUMP JUMPDEST DUP1 SWAP3 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH32 0xDA9D4E5F101B8B9B1C5B76D0C5A9F7923571ACFC02376AA076B75A8C080C956B PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND DUP2 SELFBALANCE LT PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 DUP1 SWAP4 DUP2 SWAP4 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x458 JUMPI RETURNDATASIZE SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x429 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3DE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x763 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x3F0 JUMPI STOP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3FF JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x3E9 JUMP JUMPDEST POP SELFBALANCE PUSH32 0xCF47918100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4AB PUSH2 0x704 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI PUSH1 0x20 SWAP2 PUSH2 0xFA SWAP2 PUSH2 0x7A4 JUMP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x4E5 PUSH2 0x9D3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH2 0x563 PUSH2 0x704 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x585 DUP5 PUSH2 0x860 JUMP JUMPDEST SWAP4 AND SWAP3 DUP4 DUP3 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 DUP3 KECCAK256 PUSH2 0x59E DUP3 DUP3 SLOAD PUSH2 0x727 JUMP JUMPDEST SWAP1 SSTORE DUP4 PUSH32 0xC0E523490DD523C33B1878C9EB14FF46991E3F5B2CD33710918618F2A39CBA1B DUP5 PUSH1 0x40 MLOAD DUP5 DUP2 MSTORE LOG2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SLOAD AND SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP5 DUP3 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x627 PUSH1 0x64 DUP3 PUSH2 0x763 JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 MLOAD RETURNDATASIZE PUSH2 0x672 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x645 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x63F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x102 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x102 JUMPI PUSH2 0xFA PUSH1 0x20 SWAP2 PUSH2 0xEC SELFBALANCE PUSH1 0x1 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x102 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x429 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 SWAP2 PUSH2 0x81F JUMPI JUMPDEST POP PUSH2 0xEC SWAP1 PUSH2 0x81C SWAP4 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x727 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x84B JUMPI JUMPDEST DUP2 PUSH2 0x83A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x763 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x102 JUMPI MLOAD PUSH2 0x81C PUSH2 0x7FF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x82D JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x734 JUMPI JUMP JUMPDEST PUSH2 0x81C SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x88D PUSH8 0xFFFFFFFFFFFFFFFF TIMESTAMP AND DUP4 PUSH2 0x7A4 JUMP JUMPDEST SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD SWAP1 PUSH2 0x853 JUMP JUMPDEST PUSH2 0x81C PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x727 JUMP JUMPDEST SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH32 0x0 AND DUP1 DUP3 LT ISZERO PUSH2 0x941 JUMPI POP POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x949 PUSH2 0x8A3 JUMP JUMPDEST DUP3 LT PUSH2 0x954 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x95D SWAP2 PUSH2 0x853 JUMP JUMPDEST SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x734 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP2 ISZERO PUSH2 0x9A4 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x0 SLOAD AND CALLER SUB PUSH2 0x9F4 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE ORIGIN DUP14 SSTORE 0xE2 TIMESTAMP 0x2F SSTORE 0x25 0xE0 0xD2 CALLVALUE STATICCALL 0x2F 0xBF PUSH12 0x808AA8D0C0569DC37B7D5985 PUSH13 0x7C6F1E64736F6C634300081B00 CALLER ","sourceMap":"169:254:22:-:0;;;;;;;;;-1:-1:-1;169:254:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;169:254:22;;;;;;3787:50:3;5092:63;5109:21;:34;169:254:22;3807:15:3;169:254:22;;3436:9:3;169:254:22;5109:34:3;;:::i;:::-;5092:63;:::i;:::-;3436:9;169:254:22;3787:50:3;;:::i;:::-;169:254:22;;;;;;;;;;;;;;;-1:-1:-1;;169:254:22;;;;;;;;:::i;:::-;1500:62:2;;:::i;:::-;169:254:22;2627:22:2;;2623:91;;169:254:22;;;;;;;;;;;3052:40:2;169:254:22;3052:40:2;;169:254:22;2623:91:2;2672:31;169:254:22;2672:31:2;169:254:22;;;;;2672:31:2;169:254:22;;;;;-1:-1:-1;;169:254:22;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;169:254:22;;;;;;;;;2964:6:3;169:254:22;;;;;;;;;-1:-1:-1;;169:254:22;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;-1:-1:-1;;169:254:22;;;;;;;;:::i;:::-;;;;3607:14:3;169:254:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;169:254:22;;;;;;3436:9:3;169:254:22;;;;;;;;;;;;-1:-1:-1;;169:254:22;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;169:254:22;;;;;5092:63:3;5109:21;:34;169:254:22;3807:15:3;169:254:22;;3436:9:3;169:254:22;5109:34:3;;:::i;5092:63::-;4372:19;3787:50;3436:9;169:254:22;3787:50:3;;;:::i;:::-;4372:19;;;:::i;:::-;3436:9;169:254:22;4406:21:3;169:254:22;;;;;;4406:21:3;169:254:22;;;;1375:21:12;;:30;1371:125;;169:254:22;1548:33:12;;;;;;;169:254:22;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1595:8:12;1591:58;;169:254:22;1591:58:12;169:254:22;;5690:21:12;:17;;5815:158;;;169:254:22;5815:158:12;;5686:354;6010:19;169:254:22;6010:19:12;169:254:22;;6010:19:12;169:254:22;;;;;;;;;;;;;;;1371:125:12;1455:21;;1428:57;169:254:22;1428:57:12;169:254:22;;;;;;1428:57:12;169:254:22;;;;;-1:-1:-1;;169:254:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;169:254:22;;;;;1500:62:2;;:::i;:::-;169:254:22;;;;;;;;;;3052:40:2;;;;169:254:22;;;;;;-1:-1:-1;;169:254:22;;;;;;;:::i;:::-;;;;4685:17:3;;;:::i;:::-;169:254:22;;;;;;4712:14:3;169:254:22;;;;;4712:31:3;169:254:22;;;4712:31:3;:::i;:::-;169:254:22;;;4758:28:3;169:254:22;;;;;;4758:28:3;169:254:22;;;;;;;1328:43:11;;;;;169:254:22;1328:43:11;;;;;169:254:22;;;;;;1328:43:11;;;;;;:::i;:::-;8507:421;;;;;;;;;169:254:22;8507:421:11;;8942:15;;8960:26;;;:31;8942:68;8938:146;;169:254:22;8938:146:11;9033:40;169:254:22;9033:40:11;169:254:22;;1328:43:11;169:254:22;9033:40:11;8942:68;9009:1;8994:16;;8942:68;;8507:421;169:254:22;8507:421:11;;169:254:22;8507:421:11;;;;;169:254:22;;;;;-1:-1:-1;;169:254:22;;;;;;;;;3119:9:3;169:254:22;;;;;;;;;-1:-1:-1;;169:254:22;;;;;;;;;;;;;;5092:63:3;169:254:22;;5109:34:3;:21;3436:9;169:254:22;5109:34:3;;:::i;169:254:22:-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5303:202:3:-;169:254:22;;;;;;5430:38:3;;5462:4;5430:38;;;169:254:22;;5430:38:3;;;;;;;;;;;-1:-1:-1;5430:38:3;;;5303:202;169:254:22;5430:56:3;169:254:22;5413:85:3;169:254:22;-1:-1:-1;169:254:22;3607:14:3;169:254:22;;;-1:-1:-1;169:254:22;;5430:56:3;;:::i;5413:85::-;5303:202;:::o;5430:38::-;;;169:254:22;5430:38:3;;169:254:22;5430:38:3;;;;;;169:254:22;5430:38:3;;;:::i;:::-;;;169:254:22;;;;;5413:85:3;5430:38;;;;;-1:-1:-1;5430:38:3;;169:254:22;;;;;;;;;;:::o;3992:159:3:-;4082:62;3992:159;169:254:22;4082:44:3;169:254:22;4109:15:3;169:254:22;4082:44:3;;:::i;:::-;169:254:22;;-1:-1:-1;169:254:22;3607:14:3;169:254:22;;;-1:-1:-1;169:254:22;;4082:62:3;;:::i;3199:97::-;3269:20;169:254:22;3119:9:3;169:254:22;;2964:6:3;169:254:22;3269:20:3;:::i;5700:352::-;;169:254:22;;;;;2964:6:3;169:254:22;5823:19:3;;;;;;5858:8;;;169:254:22;5858:8:3;:::o;5819:227::-;5900:5;;:::i;:::-;5887:18;;5900:5;;5921:22;;;:::o;5883:163::-;6001:19;;;:::i;:::-;169:254:22;;;;;;;;;;;;;;;;3119:9:3;169:254:22;;;;;;;5974:61:3;:::o;169:254:22:-;;;;;;;;;;1796:162:2;169:254:22;1710:6:2;169:254:22;;735:10:13;1855:23:2;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:13;1901:40:2;169:254:22;;1710:6:2;1901:40"},"methodIdentifiers":{"duration()":"0fb5a6b4","end()":"efbe1c1c","owner()":"8da5cb5b","releasable()":"fbccedae","releasable(address)":"a3f8eace","release()":"86d1a69f","release(address)":"19165587","released()":"96132521","released(address)":"9852595c","renounceOwnership()":"715018a6","start()":"be9a6555","transferOwnership(address)":"f2fde38b","vestedAmount(address,uint64)":"810ec23b","vestedAmount(uint64)":"0a17b06b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiaryAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"startTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"durationSeconds\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EtherReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"duration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"end\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"vestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"vestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"duration()\":{\"details\":\"Getter for the vesting duration.\"},\"end()\":{\"details\":\"Getter for the end timestamp.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"releasable()\":{\"details\":\"Getter for the amount of releasable eth.\"},\"releasable(address)\":{\"details\":\"Getter for the amount of releasable `token` tokens. `token` should be the address of an {IERC20} contract.\"},\"release()\":{\"details\":\"Release the native token (ether) that have already vested. Emits a {EtherReleased} event.\"},\"release(address)\":{\"details\":\"Release the tokens that have already vested. Emits a {ERC20Released} event.\"},\"released()\":{\"details\":\"Amount of eth already released\"},\"released(address)\":{\"details\":\"Amount of token already released\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"start()\":{\"details\":\"Getter for the start timestamp.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"vestedAmount(address,uint64)\":{\"details\":\"Calculates the amount of tokens that has already vested. Default implementation is a linear vesting curve.\"},\"vestedAmount(uint64)\":{\"details\":\"Calculates the amount of ether that has already vested. Default implementation is a linear vesting curve.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ExampleVestingWallet.sol\":\"ExampleVestingWallet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/finance/VestingWallet.sol\":{\"keccak256\":\"0x79de2c47546e7d9e9785dff775e1cadda15fa877ff956f5b33b7a572e4d43e5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c431f66acb879d3dba4f4e32a21efcad38b49983cfc0a31d49bfa95a738c9f6\",\"dweb:/ipfs/QmQodRbcvFSLc7Cu6XXmGk75CZbsLmL1aZTtjeiDXVagtq\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"contracts/ExampleVestingWallet.sol\":{\"keccak256\":\"0x6b96415c1d2604a2f069ed3a4cd0815dac54533cd7381acca325e00a52135b44\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://e11c3e49737a42e30995c54f08c68ea7d0f14ff2c60abd97b19dbd8ac5a62417\",\"dweb:/ipfs/QmTUvemY6TNoQ2eNDpMVqDsuFin15qqRpFM4keY1xJ8maL\"]}},\"version\":1}"}},"contracts/MockAggregatorV3.sol":{"MockAggregatorV3":{"abi":[{"inputs":[],"name":"answer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"answeredInRound","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roundId","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"},{"internalType":"int256","name":"_answer","type":"int256"},{"internalType":"uint256","name":"_startedAt","type":"uint256"},{"internalType":"uint256","name":"_updatedAt","type":"uint256"},{"internalType":"uint80","name":"_answeredInRound","type":"uint80"}],"name":"setLatestRoundData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601557610419908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163313ce567146103b0575080634005e6811461030a57806354fd4d50146102ee5780637284e416146101fa5780637519ab50146101dc57806385bb7d69146101be5780638cd221c9146101945780639a6fc8f51461013a578063c22c249914610110578063f21f537d146100f25763feaf968c1461009857600080fd5b346100ed5760006003193601126100ed576001546000546002546003546004546040805169ffffffffffffffffffff96871681526020810195909552840192909252606083015291909116608082015260a090f35b600080fd5b346100ed5760006003193601126100ed576020600254604051908152f35b346100ed5760006003193601126100ed57602069ffffffffffffffffffff60045416604051908152f35b346100ed5760206003193601126100ed576101536103ca565b6000546002546003546004546040805169ffffffffffffffffffff96871681526020810195909552840192909252606083015291909116608082015260a090f35b346100ed5760006003193601126100ed57602069ffffffffffffffffffff60015416604051908152f35b346100ed5760006003193601126100ed576020600054604051908152f35b346100ed5760006003193601126100ed576020600354604051908152f35b346100ed5760006003193601126100ed576040516040810181811067ffffffffffffffff8211176102bf57604052600f81527f4d6f636b2041676772656761746f720000000000000000000000000000000000602082015260405190602082528181519182602083015260005b8381106102a75750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b60208282018101516040878401015285935001610267565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346100ed5760006003193601126100ed57602060405160018152f35b346100ed5760a06003193601126100ed576103236103ca565b6084359069ffffffffffffffffffff82168092036100ed5769ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000060015416176001556024356000556044356002556064356003557fffffffffffffffffffffffffffffffffffffffffffff000000000000000000006004541617600455600080f35b346100ed5760006003193601126100ed5780600860209252f35b6004359069ffffffffffffffffffff821682036100ed5756fea2646970667358221220bb11614c031b12c7fa7810e9f03901b8878018a9fca8741f7f8d6348d1753e4664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x419 SWAP1 DUP2 PUSH2 0x1B DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x313CE567 EQ PUSH2 0x3B0 JUMPI POP DUP1 PUSH4 0x4005E681 EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0x7519AB50 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0x85BB7D69 EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x8CD221C9 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0xC22C2499 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xF2 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x1 SLOAD PUSH1 0x0 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH10 0xFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x153 PUSH2 0x3CA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH10 0xFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2BF JUMPI PUSH1 0x40 MSTORE PUSH1 0xF DUP2 MSTORE PUSH32 0x4D6F636B2041676772656761746F720000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 MSTORE DUP2 DUP2 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x2A7 JUMPI POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 PUSH1 0x0 PUSH1 0x40 DUP1 SWAP7 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x20 DUP3 DUP3 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP8 DUP5 ADD ADD MSTORE DUP6 SWAP4 POP ADD PUSH2 0x267 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x323 PUSH2 0x3CA JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 SWAP3 SUB PUSH2 0xED JUMPI PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x0 SSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x2 SSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x3 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 PUSH1 0x4 SLOAD AND OR PUSH1 0x4 SSTORE PUSH1 0x0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI DUP1 PUSH1 0x8 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xED JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB GT PUSH2 0x4C03 SHL SLT 0xC7 STATICCALL PUSH25 0x10E9F03901B8878018A9FCA8741F7F8D6348D1753E4664736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"113:1253:23:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_uint80":{"entryPoint":970,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_uint80_int256_uint256_uint256_uint80":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c908163313ce567146103b0575080634005e6811461030a57806354fd4d50146102ee5780637284e416146101fa5780637519ab50146101dc57806385bb7d69146101be5780638cd221c9146101945780639a6fc8f51461013a578063c22c249914610110578063f21f537d146100f25763feaf968c1461009857600080fd5b346100ed5760006003193601126100ed576001546000546002546003546004546040805169ffffffffffffffffffff96871681526020810195909552840192909252606083015291909116608082015260a090f35b600080fd5b346100ed5760006003193601126100ed576020600254604051908152f35b346100ed5760006003193601126100ed57602069ffffffffffffffffffff60045416604051908152f35b346100ed5760206003193601126100ed576101536103ca565b6000546002546003546004546040805169ffffffffffffffffffff96871681526020810195909552840192909252606083015291909116608082015260a090f35b346100ed5760006003193601126100ed57602069ffffffffffffffffffff60015416604051908152f35b346100ed5760006003193601126100ed576020600054604051908152f35b346100ed5760006003193601126100ed576020600354604051908152f35b346100ed5760006003193601126100ed576040516040810181811067ffffffffffffffff8211176102bf57604052600f81527f4d6f636b2041676772656761746f720000000000000000000000000000000000602082015260405190602082528181519182602083015260005b8381106102a75750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b60208282018101516040878401015285935001610267565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346100ed5760006003193601126100ed57602060405160018152f35b346100ed5760a06003193601126100ed576103236103ca565b6084359069ffffffffffffffffffff82168092036100ed5769ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000060015416176001556024356000556044356002556064356003557fffffffffffffffffffffffffffffffffffffffffffff000000000000000000006004541617600455600080f35b346100ed5760006003193601126100ed5780600860209252f35b6004359069ffffffffffffffffffff821682036100ed5756fea2646970667358221220bb11614c031b12c7fa7810e9f03901b8878018a9fca8741f7f8d6348d1753e4664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x313CE567 EQ PUSH2 0x3B0 JUMPI POP DUP1 PUSH4 0x4005E681 EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0x7519AB50 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0x85BB7D69 EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x8CD221C9 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0xC22C2499 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xF21F537D EQ PUSH2 0xF2 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x1 SLOAD PUSH1 0x0 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH10 0xFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x153 PUSH2 0x3CA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH10 0xFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2BF JUMPI PUSH1 0x40 MSTORE PUSH1 0xF DUP2 MSTORE PUSH32 0x4D6F636B2041676772656761746F720000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 MSTORE DUP2 DUP2 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x2A7 JUMPI POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 PUSH1 0x0 PUSH1 0x40 DUP1 SWAP7 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH1 0x20 DUP3 DUP3 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP8 DUP5 ADD ADD MSTORE DUP6 SWAP4 POP ADD PUSH2 0x267 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x323 PUSH2 0x3CA JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 SWAP3 SUB PUSH2 0xED JUMPI PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x0 SSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x2 SSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x3 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 PUSH1 0x4 SLOAD AND OR PUSH1 0x4 SSTORE PUSH1 0x0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI DUP1 PUSH1 0x8 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xED JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB GT PUSH2 0x4C03 SHL SLT 0xC7 STATICCALL PUSH25 0x10E9F03901B8878018A9FCA8741F7F8D6348D1753E4664736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"113:1253:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;804:7;113:1253;;;821:9;113:1253;832:9;113:1253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;223:24;113:1253;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;:::i;:::-;;;1021:9;113:1253;1032:9;113:1253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;196:21;113:1253;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;253:24;113:1253;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;113:1253:23;;;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;;1356:1;113:1253;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;574:22;113:1253;;;606:22;113:1253;;;;;;;;;;;;;;;;-1:-1:-1;;113:1253:23;;;;;;1148:1;113:1253;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"answer()":"85bb7d69","answeredInRound()":"c22c2499","decimals()":"313ce567","description()":"7284e416","getRoundData(uint80)":"9a6fc8f5","latestRoundData()":"feaf968c","roundId()":"8cd221c9","setLatestRoundData(uint80,int256,uint256,uint256,uint80)":"4005e681","startedAt()":"f21f537d","updatedAt()":"7519ab50","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"answer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"answeredInRound\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"roundId\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"_answeredInRound\",\"type\":\"uint80\"}],\"name\":\"setLatestRoundData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updatedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MockAggregatorV3.sol\":\"MockAggregatorV3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/MockAggregatorV3.sol\":{\"keccak256\":\"0xe5dc2c224ddfcea8995a5fa2b05e665fd4bc2798699cb216808ad61e063051c9\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://d5d8b97ae93a1872c188728f975bd9897be0bc3a2290c701669e69a91437a138\",\"dweb:/ipfs/QmWgtm9pQqchqZTPsHV6MaPNx2PucfQiceRu6cb5qjktgH\"]},\"contracts/library/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6fe9022adc0ea2fe59271183cd952e1679262f1c239583ecad824dbd25f723b8\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c7eb625f0943857cb5d4820d8b44918153fae0b6e6204debb4a0c3dd763f91de\",\"dweb:/ipfs/QmNz2mLb7X17sqf7EQmNai3bG9NqVw732M9ogyddeqgRuV\"]}},\"version\":1}"}},"contracts/library/AggregatorV3Interface.sol":{"AggregatorV3Interface":{"abi":[{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"decimals()":"313ce567","description()":"7284e416","getRoundData(uint80)":"9a6fc8f5","latestRoundData()":"feaf968c","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/library/AggregatorV3Interface.sol\":\"AggregatorV3Interface\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/library/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6fe9022adc0ea2fe59271183cd952e1679262f1c239583ecad824dbd25f723b8\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c7eb625f0943857cb5d4820d8b44918153fae0b6e6204debb4a0c3dd763f91de\",\"dweb:/ipfs/QmNz2mLb7X17sqf7EQmNai3bG9NqVw732M9ogyddeqgRuV\"]}},\"version\":1}"}},"contracts/library/CrowdSale.sol":{"CrowdSale":{"abi":[{"inputs":[{"internalType":"address","name":"priceFeed_","type":"address"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"address payable","name":"wallet_","type":"address"},{"internalType":"uint256","name":"usdRate_","type":"uint256"},{"internalType":"uint256","name":"vestingEndDate_","type":"uint256"},{"internalType":"address","name":"vestingVault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"purchaser","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELISTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"externalBuyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getWeiAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":483,"id":256,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080346101b457601f61154b38819003918201601f19168301916001600160401b038311848410176101b95780849260c0946040528339810103126101b457610047816101cf565b90610054602082016101cf565b60408201519092906001600160a01b038116908190036101b45760608301519161008560a0608086015195016101cf565b9460016002558215610161576001600160a01b0316908115610110576100aa336101e3565b5060018060a01b031660018060a01b0319600454161760045560018060a01b0319600354161760035560018060a01b0319600654161760065560055560085560018060a01b031660018060a01b031960095416176009556040516112b990816102728239f35b60405162461bcd60e51b8152602060048201526024808201527f43726f776473616c653a20746f6b656e20697320746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f43726f776473616c653a2077616c6c657420697320746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036101b457565b6001600160a01b038116600090815260008051602061152b833981519152602052604090205460ff1661026b576001600160a01b0316600081815260008051602061152b83398151915260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b5060009056fe6080806040526004361015610028575b5036156100205761001e610b7e565b005b61001e610b7e565b60003560e01c90816301ffc9a71461076357508063248a9ca3146107365780632f2ff15d146106f657806336568abe1461068a5780633f4ba83a14610615578063521eb273146105e15780635c975abb146105be5780635f1c3766146104aa57806360659a92146103fe5780636681b9fd146103e05780637a3226ec146103a557806382d5d7ac146103875780638456cb591461030f57806391d14854146102b4578063a217fddf14610298578063c2507ac114610272578063d547741f1461022d578063ec8ac4d81461013f5763fc0c546a14610106573861000f565b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b600080fd5b602060031936011261013a57610153610888565b61015b610f18565b610163610f51565b61016b610c36565b6101753482610f87565b73ffffffffffffffffffffffffffffffffffffffff61019334610abc565b916101a0346007546108ab565b6007556101ad838261108b565b60405192348452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610223575b3491f115610217576001600255005b6040513d6000823e3d90fd5b6108fc9150610208565b3461013a57604060031936011261013a5761001e60043561024c610865565b9061026d61026882600052600160205260016040600020015490565b610cc1565b610e0d565b3461013a57602060031936011261013a576020610290600435610abc565b604051908152f35b3461013a57600060031936011261013a57602060405160008152f35b3461013a57604060031936011261013a576102cd610865565b600435600052600160205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461013a57600060031936011261013a57610328610f51565b610330610f51565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060005416176000557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461013a57602060031936011261013a5760206102906004356109b6565b3461013a57600060031936011261013a5760206040517f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b498152f35b3461013a57600060031936011261013a576020600754604051908152f35b3461013a57600060031936011261013a576024602073ffffffffffffffffffffffffffffffffffffffff60035416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa801561021757600090610477575b602090604051908152f35b506020813d6020116104a2575b81610491602093836108e7565b8101031261013a576020905161046c565b3d9150610484565b3461013a57604060031936011261013a576104c3610888565b602435906104cf610f18565b6104d7610f51565b3360009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff161561058b5773ffffffffffffffffffffffffffffffffffffffff9061052d836109b6565b926105388483610f87565b610544846007546108ab565b600755610551818361108b565b604051938452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a36001600255005b7fe2517d3f0000000000000000000000000000000000000000000000000000000060005233600452600060245260446000fd5b3461013a57600060031936011261013a57602060ff600054166040519015158152f35b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b3461013a57600060031936011261013a5761062e610ee1565b610636610ee1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600054166000557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461013a57604060031936011261013a576106a3610865565b3373ffffffffffffffffffffffffffffffffffffffff8216036106cc5761001e90600435610e0d565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b3461013a57604060031936011261013a5761001e600435610715610865565b9061073161026882600052600160205260016040600020015490565b610d2e565b3461013a57602060031936011261013a576020610290600435600052600160205260016040600020015490565b3461013a57602060031936011261013a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361013a57817f1b6036c8000000000000000000000000000000000000000000000000000000006020931490811561083b575b81156107de575b5015158152f35b7f7965db0b00000000000000000000000000000000000000000000000000000000811491508115610811575b50836107d7565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361080a565b7f5c975abb00000000000000000000000000000000000000000000000000000000811491506107d0565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b919082018092116108b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761092857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b519069ffffffffffffffffffff8216820361013a57565b908160a091031261013a5761098281610957565b916020820151916040810151916109a0608060608401519301610957565b90565b818102929181159184041417156108b857565b73ffffffffffffffffffffffffffffffffffffffff60045416806109e857506109e4600a91600554906109a3565b0490565b60a0600491604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa90811561021757600091610a88575b506305f5e1008202918083046305f5e10014901517156108b857600554610a4e916109a3565b908115610a59570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b610aaa915060a03d60a011610ab5575b610aa281836108e7565b81019061096e565b505050905038610a28565b503d610a98565b73ffffffffffffffffffffffffffffffffffffffff6004541680610afa5750600a810290808204600a14901517156108b8576005546109a0916109a3565b9060a0600492604051938480927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa918215610217576305f5e100926109e492610b4f92600092610b58575b506109a3565b600554906109a3565b610b7291925060a03d60a011610ab557610aa281836108e7565b50505090509038610b49565b610b86610f18565b610b8e610f51565b610b96610c36565b610ba03433610f87565b610ba934610abc565b610bb5346007546108ab565b600755610bc2813361108b565b60405190348252602082015233907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610c2c575b3491f115610217576001600255565b6108fc9150610c1d565b3360009081527f9a12e7d163daa3679fdde2f980fb077ecd75d9611348bc15a31355afb064154e602052604090205460ff1615610c6f57565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b4960245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cfd5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b60ff6000541615610eee57565b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b6002805414610f275760028055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b60ff60005416610f5d57565b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff16156110075715610fa957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43726f776473616c653a20616d6f756e742069732030000000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43726f776473616c653a2062656e656669636961727920697320746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152fd5b600854909291906000901561116c5773ffffffffffffffffffffffffffffffffffffffff600954169360085494803b1561116857606483928373ffffffffffffffffffffffffffffffffffffffff93604051998a9586947ff74bc9d600000000000000000000000000000000000000000000000000000000865216600485015260248401528760448401525af193841561115b57611149939461114b575b505073ffffffffffffffffffffffffffffffffffffffff60095416611173565b565b81611155916108e7565b38611129565b50604051903d90823e3d90fd5b8280fd5b5061114991925b73ffffffffffffffffffffffffffffffffffffffff60446020926000836003541660405196879586947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af190811561021757600091611241575b50156111e357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5472616e7366657220756e7375636365737366756c00000000000000000000006044820152fd5b6020813d60201161127b575b8161125a602093836108e7565b8101031261127757519081151582036112745750386111db565b80fd5b5080fd5b3d915061124d56fea26469706673582212204bd5e46f79671bdef3e30b219e57855eb05b50150f6a70f4c61764151870185564736f6c634300081b0033a6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49","opcodes":"PUSH1 0x80 CALLVALUE PUSH2 0x1B4 JUMPI PUSH1 0x1F PUSH2 0x154B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1B9 JUMPI DUP1 DUP5 SWAP3 PUSH1 0xC0 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1B4 JUMPI PUSH2 0x47 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP1 PUSH2 0x54 PUSH1 0x20 DUP3 ADD PUSH2 0x1CF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 SWAP1 SUB PUSH2 0x1B4 JUMPI PUSH1 0x60 DUP4 ADD MLOAD SWAP2 PUSH2 0x85 PUSH1 0xA0 PUSH1 0x80 DUP7 ADD MLOAD SWAP6 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x2 SSTORE DUP3 ISZERO PUSH2 0x161 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 ISZERO PUSH2 0x110 JUMPI PUSH2 0xAA CALLER PUSH2 0x1E3 JUMP JUMPDEST POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x4 SLOAD AND OR PUSH1 0x4 SSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x3 SLOAD AND OR PUSH1 0x3 SSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x6 SLOAD AND OR PUSH1 0x6 SSTORE PUSH1 0x5 SSTORE PUSH1 0x8 SSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH1 0x9 SLOAD AND OR PUSH1 0x9 SSTORE PUSH1 0x40 MLOAD PUSH2 0x12B9 SWAP1 DUP2 PUSH2 0x272 DUP3 CODECOPY RETURN JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A20746F6B656E20697320746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A2077616C6C657420697320746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B4 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x152B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x152B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x28 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x20 JUMPI PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x763 JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x6F6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x615 JUMPI DUP1 PUSH4 0x521EB273 EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x5F1C3766 EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x60659A92 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x6681B9FD EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x7A3226EC EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x82D5D7AC EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x30F JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xC2507AC1 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0xEC8AC4D8 EQ PUSH2 0x13F JUMPI PUSH4 0xFC0C546A EQ PUSH2 0x106 JUMPI CODESIZE PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x153 PUSH2 0x888 JUMP JUMPDEST PUSH2 0x15B PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x163 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x16B PUSH2 0xC36 JUMP JUMPDEST PUSH2 0x175 CALLVALUE DUP3 PUSH2 0xF87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x193 CALLVALUE PUSH2 0xABC JUMP JUMPDEST SWAP2 PUSH2 0x1A0 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x1AD DUP4 DUP3 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 CALLVALUE DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0x223 JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0x208 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x24C PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x26D PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH2 0xE0D JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0xABC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x2CD PUSH2 0x865 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x328 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x330 PUSH2 0xF51 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND OR PUSH1 0x0 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0x9B6 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x24 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP1 PUSH2 0x477 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4A2 JUMPI JUMPDEST DUP2 PUSH2 0x491 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x13A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x46C JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x484 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x4C3 PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x4CF PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x4D7 PUSH2 0xF51 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA6EEF7E35ABE7026729641147F7915573C7E97B47EFA546F5F6E3230263BCB49 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x58B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x52D DUP4 PUSH2 0x9B6 JUMP JUMPDEST SWAP3 PUSH2 0x538 DUP5 DUP4 PUSH2 0xF87 JUMP JUMPDEST PUSH2 0x544 DUP5 PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x551 DUP2 DUP4 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x0 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x62E PUSH2 0xEE1 JUMP JUMPDEST PUSH2 0x636 PUSH2 0xEE1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND PUSH1 0x0 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x6A3 PUSH2 0x865 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x6CC JUMPI PUSH2 0x1E SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xE0D JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x715 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x731 PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD2E JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13A JUMPI DUP2 PUSH32 0x1B6036C800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x83B JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7DE JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x811 JUMPI JUMPDEST POP DUP4 PUSH2 0x7D7 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x80A JUMP JUMPDEST PUSH32 0x5C975ABB00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x928 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0xA0 SWAP2 SUB SLT PUSH2 0x13A JUMPI PUSH2 0x982 DUP2 PUSH2 0x957 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH1 0x40 DUP2 ADD MLOAD SWAP2 PUSH2 0x9A0 PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0x957 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0x9E8 JUMPI POP PUSH2 0x9E4 PUSH1 0xA SWAP2 PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x4 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0xA88 JUMPI JUMPDEST POP PUSH4 0x5F5E100 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH4 0x5F5E100 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0xA4E SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0xA59 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xAAA SWAP2 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI JUMPDEST PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96E JUMP JUMPDEST POP POP POP SWAP1 POP CODESIZE PUSH2 0xA28 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0xAFA JUMPI POP PUSH1 0xA DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0xA EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0x9A0 SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x4 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x217 JUMPI PUSH4 0x5F5E100 SWAP3 PUSH2 0x9E4 SWAP3 PUSH2 0xB4F SWAP3 PUSH1 0x0 SWAP3 PUSH2 0xB58 JUMPI JUMPDEST POP PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST PUSH2 0xB72 SWAP2 SWAP3 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 CODESIZE PUSH2 0xB49 JUMP JUMPDEST PUSH2 0xB86 PUSH2 0xF18 JUMP JUMPDEST PUSH2 0xB8E PUSH2 0xF51 JUMP JUMPDEST PUSH2 0xB96 PUSH2 0xC36 JUMP JUMPDEST PUSH2 0xBA0 CALLVALUE CALLER PUSH2 0xF87 JUMP JUMPDEST PUSH2 0xBA9 CALLVALUE PUSH2 0xABC JUMP JUMPDEST PUSH2 0xBB5 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0xBC2 DUP2 CALLER PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 CALLVALUE DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0xC2C JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0xC1D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9A12E7D163DAA3679FDDE2F980FB077ECD75D9611348BC15A31355AFB064154E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC6F JUMPI JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCFD JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND ISZERO PUSH2 0xEEE JUMPI JUMP JUMPDEST PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD EQ PUSH2 0xF27 JUMPI PUSH1 0x2 DUP1 SSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1007 JUMPI ISZERO PUSH2 0xFA9 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A20616D6F756E74206973203000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A2062656E656669636961727920697320746865207A65 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x726F206164647265737300000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x8 SLOAD SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x0 SWAP1 ISZERO PUSH2 0x116C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND SWAP4 PUSH1 0x8 SLOAD SWAP5 DUP1 EXTCODESIZE ISZERO PUSH2 0x1168 JUMPI PUSH1 0x64 DUP4 SWAP3 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xF74BC9D600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE DUP8 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x115B JUMPI PUSH2 0x1149 SWAP4 SWAP5 PUSH2 0x114B JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND PUSH2 0x1173 JUMP JUMPDEST JUMP JUMPDEST DUP2 PUSH2 0x1155 SWAP2 PUSH2 0x8E7 JUMP JUMPDEST CODESIZE PUSH2 0x1129 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP PUSH2 0x1149 SWAP2 SWAP3 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 PUSH1 0x20 SWAP3 PUSH1 0x0 DUP4 PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x1241 JUMPI JUMPDEST POP ISZERO PUSH2 0x11E3 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657220756E7375636365737366756C0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x127B JUMPI JUMPDEST DUP2 PUSH2 0x125A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1277 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1274 JUMPI POP CODESIZE PUSH2 0x11DB JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x124D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B 0xD5 0xE4 PUSH16 0x79671BDEF3E30B219E57855EB05B5015 0xF PUSH11 0x70F4C61764151870185564 PUSH20 0x6F6C634300081B0033A6EEF7E35ABE7026729641 EQ PUSH32 0x7915573C7E97B47EFA546F5F6E3230263BCB4900000000000000000000000000 ","sourceMap":"813:9700:25:-:0;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;-1:-1:-1;;;;;813:9700:25;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;813:9700:25;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2232:4:0;813:9700:25;2061:21:16;2232:4:0;1928:21:25;;813:9700;;-1:-1:-1;;;;;813:9700:25;;2009:20;;813:9700;;2081:42;2112:10;2081:42;:::i;:::-;;813:9700;;;;;;;;;;;2232:4:0;2133:45:25;2232:4:0;;;2133:45:25;2232:4:0;813:9700:25;;;;;2232:4:0;2188:23:25;2232:4:0;;;2188:23:25;2232:4:0;813:9700:25;;;;;2232:4:0;2221:17:25;2232:4:0;;;2221:17:25;2232:4:0;2248:19:25;2232:4:0;2277:33:25;2232:4:0;813:9700:25;;;;;;;;;;;2232:4:0;2320:43:25;2232:4:0;;;2320:43:25;2232:4:0;813:9700:25;;;;;;;;;;;;-1:-1:-1;;;813:9700:25;;;;;;;;;;;;;;;;;-1:-1:-1;;;813:9700:25;;;;;;;;;;-1:-1:-1;;;813:9700:25;;;;;;;;;;;;;;;;;-1:-1:-1;;;813:9700:25;;;;;;;;-1:-1:-1;813:9700:25;;;;;;-1:-1:-1;813:9700:25;;;;;-1:-1:-1;813:9700:25;;;;-1:-1:-1;;;;;813:9700:25;;;;;;:::o;6179:316:0:-;-1:-1:-1;;;;;813:9700:25;;1947:1;813:9700;;;-1:-1:-1;;;;;;;;;;;813:9700:25;;;;;;;;;;-1:-1:-1;;;;;813:9700:25;1947:1;813:9700;;;-1:-1:-1;;;;;;;;;;;813:9700:25;;;;;;;-1:-1:-1;;813:9700:25;2954:6:0;813:9700:25;;;735:10:13;;813:9700:25;6370:40:0;1947:1:25;;6370:40:0;2954:6;6424:11;:::o;6272:217::-;6466:12;1947:1:25;6466:12:0;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6564":{"entryPoint":2149,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint80_fromMemory":{"entryPoint":2391,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint80t_int256t_uint256t_uint256t_uint80_fromMemory":{"entryPoint":2414,"id":null,"parameterSlots":2,"returnSlots":5},"checked_add_uint256":{"entryPoint":2219,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":2467,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2279,"id":null,"parameterSlots":2,"returnSlots":0},"fun":{"entryPoint":2942,"id":3161,"parameterSlots":0,"returnSlots":0},"fun_checkRole":{"entryPoint":3265,"id":93,"parameterSlots":1,"returnSlots":0},"fun_checkRole_6571":{"entryPoint":3126,"id":93,"parameterSlots":0,"returnSlots":0},"fun_deliverTokens":{"entryPoint":4467,"id":3431,"parameterSlots":2,"returnSlots":0},"fun_getRoleAdmin":{"entryPoint":null,"id":128,"parameterSlots":1,"returnSlots":1},"fun_getTokenAmount":{"entryPoint":2748,"id":3498,"parameterSlots":1,"returnSlots":1},"fun_getWeiAmount":{"entryPoint":2486,"id":3548,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":3374,"id":256,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":3864,"id":2616,"parameterSlots":0,"returnSlots":0},"fun_preValidatePurchase":{"entryPoint":3975,"id":3373,"parameterSlots":2,"returnSlots":0},"fun_processPurchase":{"entryPoint":4235,"id":3409,"parameterSlots":2,"returnSlots":0},"fun_requireNotPaused":{"entryPoint":3921,"id":2521,"parameterSlots":0,"returnSlots":0},"fun_requirePaused":{"entryPoint":3809,"id":2534,"parameterSlots":0,"returnSlots":0},"fun_revokeRole":{"entryPoint":3597,"id":294,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080806040526004361015610028575b5036156100205761001e610b7e565b005b61001e610b7e565b60003560e01c90816301ffc9a71461076357508063248a9ca3146107365780632f2ff15d146106f657806336568abe1461068a5780633f4ba83a14610615578063521eb273146105e15780635c975abb146105be5780635f1c3766146104aa57806360659a92146103fe5780636681b9fd146103e05780637a3226ec146103a557806382d5d7ac146103875780638456cb591461030f57806391d14854146102b4578063a217fddf14610298578063c2507ac114610272578063d547741f1461022d578063ec8ac4d81461013f5763fc0c546a14610106573861000f565b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b600080fd5b602060031936011261013a57610153610888565b61015b610f18565b610163610f51565b61016b610c36565b6101753482610f87565b73ffffffffffffffffffffffffffffffffffffffff61019334610abc565b916101a0346007546108ab565b6007556101ad838261108b565b60405192348452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610223575b3491f115610217576001600255005b6040513d6000823e3d90fd5b6108fc9150610208565b3461013a57604060031936011261013a5761001e60043561024c610865565b9061026d61026882600052600160205260016040600020015490565b610cc1565b610e0d565b3461013a57602060031936011261013a576020610290600435610abc565b604051908152f35b3461013a57600060031936011261013a57602060405160008152f35b3461013a57604060031936011261013a576102cd610865565b600435600052600160205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461013a57600060031936011261013a57610328610f51565b610330610f51565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060005416176000557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461013a57602060031936011261013a5760206102906004356109b6565b3461013a57600060031936011261013a5760206040517f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b498152f35b3461013a57600060031936011261013a576020600754604051908152f35b3461013a57600060031936011261013a576024602073ffffffffffffffffffffffffffffffffffffffff60035416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa801561021757600090610477575b602090604051908152f35b506020813d6020116104a2575b81610491602093836108e7565b8101031261013a576020905161046c565b3d9150610484565b3461013a57604060031936011261013a576104c3610888565b602435906104cf610f18565b6104d7610f51565b3360009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff161561058b5773ffffffffffffffffffffffffffffffffffffffff9061052d836109b6565b926105388483610f87565b610544846007546108ab565b600755610551818361108b565b604051938452602084015216907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a36001600255005b7fe2517d3f0000000000000000000000000000000000000000000000000000000060005233600452600060245260446000fd5b3461013a57600060031936011261013a57602060ff600054166040519015158152f35b3461013a57600060031936011261013a57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b3461013a57600060031936011261013a5761062e610ee1565b610636610ee1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600054166000557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461013a57604060031936011261013a576106a3610865565b3373ffffffffffffffffffffffffffffffffffffffff8216036106cc5761001e90600435610e0d565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b3461013a57604060031936011261013a5761001e600435610715610865565b9061073161026882600052600160205260016040600020015490565b610d2e565b3461013a57602060031936011261013a576020610290600435600052600160205260016040600020015490565b3461013a57602060031936011261013a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361013a57817f1b6036c8000000000000000000000000000000000000000000000000000000006020931490811561083b575b81156107de575b5015158152f35b7f7965db0b00000000000000000000000000000000000000000000000000000000811491508115610811575b50836107d7565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361080a565b7f5c975abb00000000000000000000000000000000000000000000000000000000811491506107d0565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013a57565b919082018092116108b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761092857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b519069ffffffffffffffffffff8216820361013a57565b908160a091031261013a5761098281610957565b916020820151916040810151916109a0608060608401519301610957565b90565b818102929181159184041417156108b857565b73ffffffffffffffffffffffffffffffffffffffff60045416806109e857506109e4600a91600554906109a3565b0490565b60a0600491604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa90811561021757600091610a88575b506305f5e1008202918083046305f5e10014901517156108b857600554610a4e916109a3565b908115610a59570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b610aaa915060a03d60a011610ab5575b610aa281836108e7565b81019061096e565b505050905038610a28565b503d610a98565b73ffffffffffffffffffffffffffffffffffffffff6004541680610afa5750600a810290808204600a14901517156108b8576005546109a0916109a3565b9060a0600492604051938480927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa918215610217576305f5e100926109e492610b4f92600092610b58575b506109a3565b600554906109a3565b610b7291925060a03d60a011610ab557610aa281836108e7565b50505090509038610b49565b610b86610f18565b610b8e610f51565b610b96610c36565b610ba03433610f87565b610ba934610abc565b610bb5346007546108ab565b600755610bc2813361108b565b60405190348252602082015233907f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b60403392a3600080808073ffffffffffffffffffffffffffffffffffffffff6006541681903415610c2c575b3491f115610217576001600255565b6108fc9150610c1d565b3360009081527f9a12e7d163daa3679fdde2f980fb077ecd75d9611348bc15a31355afb064154e602052604090205460ff1615610c6f57565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f8429d542926e6695b59ac6fbdcd9b37e8b1aeb757afab06ab60b1bb5878c3b4960245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cfd5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610e0657806000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b60ff6000541615610eee57565b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b6002805414610f275760028055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b60ff60005416610f5d57565b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff16156110075715610fa957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43726f776473616c653a20616d6f756e742069732030000000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43726f776473616c653a2062656e656669636961727920697320746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152fd5b600854909291906000901561116c5773ffffffffffffffffffffffffffffffffffffffff600954169360085494803b1561116857606483928373ffffffffffffffffffffffffffffffffffffffff93604051998a9586947ff74bc9d600000000000000000000000000000000000000000000000000000000865216600485015260248401528760448401525af193841561115b57611149939461114b575b505073ffffffffffffffffffffffffffffffffffffffff60095416611173565b565b81611155916108e7565b38611129565b50604051903d90823e3d90fd5b8280fd5b5061114991925b73ffffffffffffffffffffffffffffffffffffffff60446020926000836003541660405196879586947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af190811561021757600091611241575b50156111e357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5472616e7366657220756e7375636365737366756c00000000000000000000006044820152fd5b6020813d60201161127b575b8161125a602093836108e7565b8101031261127757519081151582036112745750386111db565b80fd5b5080fd5b3d915061124d56fea26469706673582212204bd5e46f79671bdef3e30b219e57855eb05b50150f6a70f4c61764151870185564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x28 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x20 JUMPI PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x763 JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x6F6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x615 JUMPI DUP1 PUSH4 0x521EB273 EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x5F1C3766 EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x60659A92 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x6681B9FD EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x7A3226EC EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x82D5D7AC EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x30F JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xC2507AC1 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x22D JUMPI DUP1 PUSH4 0xEC8AC4D8 EQ PUSH2 0x13F JUMPI PUSH4 0xFC0C546A EQ PUSH2 0x106 JUMPI CODESIZE PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x153 PUSH2 0x888 JUMP JUMPDEST PUSH2 0x15B PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x163 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x16B PUSH2 0xC36 JUMP JUMPDEST PUSH2 0x175 CALLVALUE DUP3 PUSH2 0xF87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x193 CALLVALUE PUSH2 0xABC JUMP JUMPDEST SWAP2 PUSH2 0x1A0 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x1AD DUP4 DUP3 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 CALLVALUE DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0x223 JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0x208 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x24C PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x26D PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH2 0xE0D JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0xABC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x2CD PUSH2 0x865 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x328 PUSH2 0xF51 JUMP JUMPDEST PUSH2 0x330 PUSH2 0xF51 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND OR PUSH1 0x0 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH2 0x9B6 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x24 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP1 PUSH2 0x477 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4A2 JUMPI JUMPDEST DUP2 PUSH2 0x491 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x13A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x46C JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x484 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x4C3 PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x4CF PUSH2 0xF18 JUMP JUMPDEST PUSH2 0x4D7 PUSH2 0xF51 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA6EEF7E35ABE7026729641147F7915573C7E97B47EFA546F5F6E3230263BCB49 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x58B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x52D DUP4 PUSH2 0x9B6 JUMP JUMPDEST SWAP3 PUSH2 0x538 DUP5 DUP4 PUSH2 0xF87 JUMP JUMPDEST PUSH2 0x544 DUP5 PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x551 DUP2 DUP4 PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x1 PUSH1 0x2 SSTORE STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x0 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x62E PUSH2 0xEE1 JUMP JUMPDEST PUSH2 0x636 PUSH2 0xEE1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x0 SLOAD AND PUSH1 0x0 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x6A3 PUSH2 0x865 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x6CC JUMPI PUSH2 0x1E SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xE0D JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH2 0x1E PUSH1 0x4 CALLDATALOAD PUSH2 0x715 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x731 PUSH2 0x268 DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD2E JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x20 PUSH2 0x290 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x13A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x13A JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13A JUMPI DUP2 PUSH32 0x1B6036C800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x83B JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7DE JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x811 JUMPI JUMPDEST POP DUP4 PUSH2 0x7D7 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x80A JUMP JUMPDEST PUSH32 0x5C975ABB00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x928 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x13A JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0xA0 SWAP2 SUB SLT PUSH2 0x13A JUMPI PUSH2 0x982 DUP2 PUSH2 0x957 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH1 0x40 DUP2 ADD MLOAD SWAP2 PUSH2 0x9A0 PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0x957 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x8B8 JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0x9E8 JUMPI POP PUSH2 0x9E4 PUSH1 0xA SWAP2 PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x4 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0xA88 JUMPI JUMPDEST POP PUSH4 0x5F5E100 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH4 0x5F5E100 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0xA4E SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0xA59 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xAAA SWAP2 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI JUMPDEST PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96E JUMP JUMPDEST POP POP POP SWAP1 POP CODESIZE PUSH2 0xA28 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 SLOAD AND DUP1 PUSH2 0xAFA JUMPI POP PUSH1 0xA DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0xA EQ SWAP1 ISZERO OR ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x5 SLOAD PUSH2 0x9A0 SWAP2 PUSH2 0x9A3 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x4 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x217 JUMPI PUSH4 0x5F5E100 SWAP3 PUSH2 0x9E4 SWAP3 PUSH2 0xB4F SWAP3 PUSH1 0x0 SWAP3 PUSH2 0xB58 JUMPI JUMPDEST POP PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 PUSH2 0x9A3 JUMP JUMPDEST PUSH2 0xB72 SWAP2 SWAP3 POP PUSH1 0xA0 RETURNDATASIZE PUSH1 0xA0 GT PUSH2 0xAB5 JUMPI PUSH2 0xAA2 DUP2 DUP4 PUSH2 0x8E7 JUMP JUMPDEST POP POP POP SWAP1 POP SWAP1 CODESIZE PUSH2 0xB49 JUMP JUMPDEST PUSH2 0xB86 PUSH2 0xF18 JUMP JUMPDEST PUSH2 0xB8E PUSH2 0xF51 JUMP JUMPDEST PUSH2 0xB96 PUSH2 0xC36 JUMP JUMPDEST PUSH2 0xBA0 CALLVALUE CALLER PUSH2 0xF87 JUMP JUMPDEST PUSH2 0xBA9 CALLVALUE PUSH2 0xABC JUMP JUMPDEST PUSH2 0xBB5 CALLVALUE PUSH1 0x7 SLOAD PUSH2 0x8AB JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0xBC2 DUP2 CALLER PUSH2 0x108B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 CALLVALUE DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0x6FAF93231A456E552DBC9961F58D9713EE4F2E69D15F1975B050EF0911053A7B PUSH1 0x40 CALLER SWAP3 LOG3 PUSH1 0x0 DUP1 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND DUP2 SWAP1 CALLVALUE ISZERO PUSH2 0xC2C JUMPI JUMPDEST CALLVALUE SWAP2 CALL ISZERO PUSH2 0x217 JUMPI PUSH1 0x1 PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH2 0x8FC SWAP2 POP PUSH2 0xC1D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9A12E7D163DAA3679FDDE2F980FB077ECD75D9611348BC15A31355AFB064154E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC6F JUMPI JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x8429D542926E6695B59AC6FBDCD9B37E8B1AEB757AFAB06AB60B1BB5878C3B49 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCFD JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xE06 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND ISZERO PUSH2 0xEEE JUMPI JUMP JUMPDEST PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD EQ PUSH2 0xF27 JUMPI PUSH1 0x2 DUP1 SSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF PUSH1 0x0 SLOAD AND PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1007 JUMPI ISZERO PUSH2 0xFA9 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A20616D6F756E74206973203000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43726F776473616C653A2062656E656669636961727920697320746865207A65 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x726F206164647265737300000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x8 SLOAD SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x0 SWAP1 ISZERO PUSH2 0x116C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND SWAP4 PUSH1 0x8 SLOAD SWAP5 DUP1 EXTCODESIZE ISZERO PUSH2 0x1168 JUMPI PUSH1 0x64 DUP4 SWAP3 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xF74BC9D600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE DUP8 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x115B JUMPI PUSH2 0x1149 SWAP4 SWAP5 PUSH2 0x114B JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x9 SLOAD AND PUSH2 0x1173 JUMP JUMPDEST JUMP JUMPDEST DUP2 PUSH2 0x1155 SWAP2 PUSH2 0x8E7 JUMP JUMPDEST CODESIZE PUSH2 0x1129 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP PUSH2 0x1149 SWAP2 SWAP3 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 PUSH1 0x20 SWAP3 PUSH1 0x0 DUP4 PUSH1 0x3 SLOAD AND PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x1241 JUMPI JUMPDEST POP ISZERO PUSH2 0x11E3 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657220756E7375636365737366756C0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x127B JUMPI JUMPDEST DUP2 PUSH2 0x125A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x8E7 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1277 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1274 JUMPI POP CODESIZE PUSH2 0x11DB JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x124D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B 0xD5 0xE4 PUSH16 0x79671BDEF3E30B219E57855EB05B5015 0xF PUSH11 0x70F4C61764151870185564 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"813:9700:25:-:0;;;;;;;;;;-1:-1:-1;813:9700:25;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;;;4425:6;813:9700;;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;;;:::i;:::-;2466:103:16;;:::i;:::-;1315:72:15;;:::i;:::-;2475:4:0;;:::i;:::-;6417:9:25;6365;6417;;:::i;:::-;813:9700;6460:25;6365:9;6460:25;:::i;:::-;6365:9;6496:25;6365:9;6496:25;813:9700;6496:25;:::i;:::-;;813:9700;6560:11;;;;:::i;:::-;813:9700;;6365:9;;813:9700;;;;;;;735:10:13;6587:66:25;813:9700;735:10:13;6587:66:25;;813:9700;;;;;10477:7;813:9700;;10477:27;6365:9;;10477:27;;;813:9700;6365:9;10477:27;;;;;1857:1:16;3068:21;813:9700:25;;10477:27;813:9700;;;;;;;;;10477:27;;;-1:-1:-1;10477:27:25;;813:9700;;;;;-1:-1:-1;;813:9700:25;;;;;4747:26:0;813:9700:25;;;;:::i;:::-;4717:18:0;2475:4;4717:18;;-1:-1:-1;813:9700:25;3901:6:0;813:9700:25;;3901:6:0;813:9700:25;-1:-1:-1;813:9700:25;3901:22:0;813:9700:25;3810:120:0;;4717:18;2475:4;:::i;:::-;4747:26;:::i;813:9700:25:-;;;;;-1:-1:-1;;813:9700:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;;;:::i;:::-;;;;;;;;;;;;2954:29:0;813:9700:25;-1:-1:-1;813:9700:25;;;;;;-1:-1:-1;813:9700:25;;;;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;1315:72:15;;:::i;:::-;;;:::i;:::-;2408:4;813:9700:25;;;;;;;2427:20:15;813:9700:25;;;735:10:13;813:9700:25;;2427:20:15;813:9700:25;;;;;;-1:-1:-1;;813:9700:25;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;813:9700:25;;;;;;;;954:29;813:9700;;;;;;;;-1:-1:-1;;813:9700:25;;;;;;4754:12;813:9700;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;4951:32;813:9700;;4425:6;813:9700;;;;4951:32;;;;813:9700;4951:32;;4977:4;813:9700;4951:32;;813:9700;4951:32;;;;;;813:9700;4951:32;;;813:9700;;;;;;;;;4951:32;;813:9700;4951:32;;813:9700;4951:32;;;;;;813:9700;4951:32;;;:::i;:::-;;;813:9700;;;;;;;4951:32;;;;;-1:-1:-1;4951:32:25;;813:9700;;;;;-1:-1:-1;;813:9700:25;;;;;;;:::i;:::-;;;2466:103:16;;;:::i;:::-;1315:72:15;;:::i;:::-;735:10:13;813:9700:25;;;;;;;;;;;;;3519:23:0;3515:108;;813:9700:25;5569:25;;;;:::i;:::-;5637:9;;;;;:::i;:::-;5657:25;813:9700;5657:25;813:9700;5657:25;:::i;:::-;;813:9700;5721:11;;;;:::i;:::-;813:9700;;;;;;;;;;735:10:13;5748:66:25;813:9700;735:10:13;5748:66:25;;813:9700;3068:21:16;813:9700:25;;3515:108:0;3565:47;813:9700:25;3565:47:0;735:10:13;813:9700:25;;;;;;;3565:47:0;813:9700:25;;;;;-1:-1:-1;;813:9700:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;;;4596:7;813:9700;;;;;;;;;;;;;-1:-1:-1;;813:9700:25;;;;;1565:66:15;;:::i;:::-;;;:::i;:::-;813:9700:25;;;;;;2674:22:15;813:9700:25;;;735:10:13;813:9700:25;;2674:22:15;813:9700:25;;;;;;-1:-1:-1;;813:9700:25;;;;;;;:::i;:::-;735:10:13;813:9700:25;;;5421:34:0;5417:102;;5529:37;813:9700:25;;;5529:37:0;:::i;5417:102::-;5478:30;813:9700:25;5478:30:0;813:9700:25;;5478:30:0;813:9700:25;;;;;-1:-1:-1;;813:9700:25;;;;;4330:25:0;813:9700:25;;;;:::i;:::-;4300:18:0;2475:4;4300:18;;-1:-1:-1;813:9700:25;3901:6:0;813:9700:25;;3901:6:0;813:9700:25;-1:-1:-1;813:9700:25;3901:22:0;813:9700:25;3810:120:0;;2475:4;4330:25;:::i;813:9700:25:-;;;;;-1:-1:-1;;813:9700:25;;;;;;;;;-1:-1:-1;813:9700:25;3901:6:0;813:9700:25;;3901:6:0;813:9700:25;-1:-1:-1;813:9700:25;3901:22:0;813:9700:25;3810:120:0;;813:9700:25;;;;;-1:-1:-1;;813:9700:25;;;;;;;;;;;;;;;;2507:43;2522:28;813:9700;2507:43;;:88;;;;;813:9700;2507:140;;;;813:9700;;;;;;;2507:140;2688:32:0;2673:47;;;-1:-1:-1;2673:87:0;;;;2507:140:25;;;;;2673:87:0;877:25:17;862:40;;;2673:87:0;;;2507:88:25;2569:26;2554:41;;;-1:-1:-1;2507:88:25;;813:9700;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;813:9700:25;;;;;-1:-1:-1;813:9700:25;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;:::o;9945:402::-;813:9700;10040:9;813:9700;;10032:32;10028:231;;813:9700;10277:24;10305:2;813:9700;10293:8;813:9700;10277:24;;:::i;:::-;813:9700;9945:402;:::o;10028:231::-;10147:27;10040:9;813:9700;;;10147:27;;;;813:9700;10147:27;;;;;;;;;813:9700;10147:27;;;10028:231;813:9700;10210:7;813:9700;;;;;;10210:7;813:9700;;;;;;;10239:8;813:9700;10222:25;;;:::i;:::-;10195:53;813:9700;;;;;10188:60;:::o;813:9700::-;;;;;10040:9;813:9700;;;;10147:27;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;9402:396;813:9700;9497:9;813:9700;;9489:32;9485:229;;813:9700;9744:2;813:9700;;;;;;9744:2;813:9700;;;;;;;9750:8;813:9700;9731:27;;;:::i;9485:229::-;813:9700;9604:27;9497:9;813:9700;;;9604:27;;;;813:9700;9604:27;;;;;;;;;9696:7;813:9700;9653:39;813:9700;9654:26;813:9700;;9604:27;;;9485:229;9654:26;;:::i;:::-;9684:8;813:9700;9653:39;;:::i;9604:27::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3674:67;2466:103:16;;:::i;:::-;1315:72:15;;:::i;:::-;2475:4:0;;:::i;:::-;6417:9:25;6365;735:10:13;6417:9:25;:::i;:::-;6460:25;6365:9;6460:25;:::i;:::-;6496;6365:9;6496:25;813:9700;6496:25;:::i;:::-;;813:9700;6560:11;735:10:13;;6560:11:25;:::i;:::-;813:9700;;6365:9;;813:9700;;;;;;735:10:13;;6587:66:25;813:9700;735:10:13;6587:66:25;;-1:-1:-1;813:9700:25;;;;10477:7;813:9700;;10477:27;6365:9;;10477:27;;;3674:67;6365:9;10477:27;;;;;1857:1:16;3068:21;813:9700:25;3674:67::o;10477:27::-;;;-1:-1:-1;10477:27:25;;3199:103:0;735:10:13;-1:-1:-1;813:9700:25;;;;;;;;;;;;3519:23:0;3515:108;;3199:103::o;3515:108::-;3565:47;-1:-1:-1;3565:47:0;735:10:13;3565:47:0;813:9700:25;954:29;813:9700;;;-1:-1:-1;3565:47:0;3199:103;813:9700:25;-1:-1:-1;813:9700:25;2954:6:0;813:9700:25;;;-1:-1:-1;813:9700:25;;735:10:13;813:9700:25;-1:-1:-1;813:9700:25;;;;;-1:-1:-1;813:9700:25;;;3519:23:0;3515:108;;3199:103;:::o;3515:108::-;3565:47;-1:-1:-1;3565:47:0;735:10:13;3565:47:0;813:9700:25;;;;-1:-1:-1;3565:47:0;6179:316;813:9700:25;;;2954:6:0;813:9700:25;;;;;;;;-1:-1:-1;813:9700:25;;;;;-1:-1:-1;813:9700:25;;;6276:23:0;6272:217;813:9700:25;;;;;;2954:6:0;813:9700:25;;;;;;;;-1:-1:-1;813:9700:25;;;;-1:-1:-1;813:9700:25;2954:6:0;813:9700:25;;;;;;;;735:10:13;813:9700:25;;6370:40:0;;813:9700:25;6370:40:0;;2954:6;6424:11;:::o;6272:217::-;6466:12;;813:9700:25;6466:12:0;:::o;6732:317::-;813:9700:25;;;2954:6:0;813:9700:25;;;;;;;;-1:-1:-1;813:9700:25;;;;;-1:-1:-1;813:9700:25;;;6826:217:0;813:9700:25;;;;;;2954:6:0;813:9700:25;;;;;;;;-1:-1:-1;813:9700:25;;;;-1:-1:-1;813:9700:25;;;;;;;;735:10:13;813:9700:25;;6924:40:0;;813:9700:25;6924:40:0;;2954:6;6978:11;:::o;2078:126:15:-;813:9700:25;1796:7:15;813:9700:25;;2140:9:15;2136:62;;2078:126::o;2136:62::-;2172:15;1796:7;2172:15;;1796:7;2172:15;2575:307:16;2702:7;813:9700:25;;2702:18:16;2698:86;;2702:7;813:9700:25;;2575:307:16:o;2698:86::-;2743:30;-1:-1:-1;2743:30:16;;-1:-1:-1;2743:30:16;1878:128:15;813:9700:25;1796:7:15;813:9700:25;;1939:61:15;;1878:128::o;1939:61::-;1974:15;1796:7;1974:15;;1796:7;1974:15;6889:387:25;813:9700;;6990:25;813:9700;;7080:14;813:9700;;6889:387::o;813:9700::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7542:347;7632:15;813:9700;7542:347;;;;-1:-1:-1;;7632:19:25;;;813:9700;7667:13;813:9700;;;7632:15;813:9700;7667:71;;;;;;;813:9700;;;;;;;7667:71;;;;;813:9700;7667:71;;813:9700;7667:71;;;813:9700;;;;;;;;;;7667:71;;;;;;;7790:11;7667:71;;;;7628:255;813:9700;;;7667:13;813:9700;;7790:11;:::i;:::-;7542:347::o;7667:71::-;;;;;:::i;:::-;;;;;813:9700;;;;;;;;;;;7667:71;813:9700;;;7628:255;7860:11;;;;8205:198;813:9700;8304:41;813:9700;8205:198;-1:-1:-1;813:9700:25;8304:6;813:9700;;;;8304:41;;;;;813:9700;8304:41;;813:9700;8304:41;;;813:9700;;;;;8304:41;;;;;;;-1:-1:-1;8304:41:25;;;8205:198;813:9700;;;;8205:198::o;813:9700::-;;;;;;;;8304:41;813:9700;;;;;;;;;8304:41;813:9700;;;;8304:41;813:9700;8304:41;;813:9700;8304:41;;;;;;813:9700;8304:41;;;:::i;:::-;;;813:9700;;;;;;;;;;;;;8304:41;;;;813:9700;;;;;;;8304:41;;;-1:-1:-1;8304:41:25;"},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","WHITELISTED_ROLE()":"7a3226ec","buyTokens(address)":"ec8ac4d8","externalBuyTokens(address,uint256)":"5f1c3766","fundsRaised()":"6681b9fd","getRoleAdmin(bytes32)":"248a9ca3","getTokenAmount(uint256)":"c2507ac1","getWeiAmount(uint256)":"82d5d7ac","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","pause()":"8456cb59","paused()":"5c975abb","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","tokensAvailable()":"60659a92","unpause()":"3f4ba83a","wallet()":"521eb273"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"wallet_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"usdRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vestingEndDate_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"vestingVault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"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\":\"purchaser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELISTED_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"buyTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"externalBuyTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsRaised\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weiAmount\",\"type\":\"uint256\"}],\"name\":\"getTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"getWeiAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"buyTokens(address)\":{\"details\":\"low level token purchase This function has a non-reentrancy guard, so it shouldn't be called by another `nonReentrant` function.\",\"params\":{\"beneficiary\":\"Recipient of the token purchase\"}},\"externalBuyTokens(address,uint256)\":{\"details\":\"utility function to allow the owner to handle private and bitcoin buyers This function has a non-reentrancy guard, so it shouldn't be called by another `nonReentrant` function.\",\"params\":{\"beneficiary\":\"Recipient of the token purchase\",\"tokenAmount\":\"Number of tokens to be purchased\"}},\"fundsRaised()\":{\"returns\":{\"_0\":\"the amount of funds raised.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getTokenAmount(uint256)\":{\"details\":\"Converts the weiAmount into equivalent number of tokens\",\"params\":{\"weiAmount\":\"Value of wei for conversion\"}},\"getWeiAmount(uint256)\":{\"details\":\"Converts the tokenAmount into equivalent number of wei\",\"params\":{\"tokenAmount\":\"Number of tokens for convertion\"}},\"grantRole(bytes32,address)\":{\"details\":\"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. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pause()\":{\"details\":\"Triggers stopped state. Requirements: - The contract must not be paused. - The sender of the transaction must have the DEFAULT_ADMIN_ROLE\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"token()\":{\"returns\":{\"_0\":\"the address of the token being sold.\"}},\"tokensAvailable()\":{\"returns\":{\"_0\":\"the amount tokens available to the crowdsale for selling.\"}},\"unpause()\":{\"details\":\"Returns to normal state. Requirements: - The contract must be paused. - The sender of the transaction must have the DEFAULT_ADMIN_ROLE\"},\"wallet()\":{\"returns\":{\"_0\":\"the address where funds are collected.\"}}},\"title\":\"CrowdSale\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/library/CrowdSale.sol\":\"CrowdSale\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67\",\"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a\",\"dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"contracts/library/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6fe9022adc0ea2fe59271183cd952e1679262f1c239583ecad824dbd25f723b8\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c7eb625f0943857cb5d4820d8b44918153fae0b6e6204debb4a0c3dd763f91de\",\"dweb:/ipfs/QmNz2mLb7X17sqf7EQmNai3bG9NqVw732M9ogyddeqgRuV\"]},\"contracts/library/CrowdSale.sol\":{\"keccak256\":\"0x6daf7c8f3c38229eca479270cbbee2aec5090f1758941f9979faf6117af4787d\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://0bfc8f658db29b8ad4055fe1f4bf5090e5a7043be3eda0d308e9d7ac943b147d\",\"dweb:/ipfs/QmNMGdx1tgoy8ZE4boqYsnXvBmaoGMqtquz16hP5JfrssD\"]},\"contracts/library/ICrowdSale.sol\":{\"keccak256\":\"0xe5539638218e0e027b15b9c236cb9d2dcffcb0ea3ed79d8374e11d120d1b1d4d\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://3600a70cc759026e923c594f69fd68d5ad3476fcfaa5945245ce08fe94b0a953\",\"dweb:/ipfs/QmRq9A3iei2J1ocWDoq1xL5xLdnSAgxfuktuC3XsFhFUqh\"]},\"contracts/library/IVestingVault.sol\":{\"keccak256\":\"0xf3f074546fdb24b8d2889ffd7947b5134669f1eb47c4baf30abf4663f6d320d7\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://e13d929241510074238c4d3797aeaa9a8f3bea58c9d8beab73c2a39583dcf56e\",\"dweb:/ipfs/QmNX2cSo1uxxuviE5SL8wUgMgC2DBrDEyZa8KVd9DipUAU\"]},\"contracts/library/VestingVault.sol\":{\"keccak256\":\"0x0386c58188ed9a89f544a617e7b628210935857895b07549854a19e140a1b21c\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c2d8275e0105f4a6c134acb7057706b00c437e3b5e72185479024343346ab1ee\",\"dweb:/ipfs/QmegrKCswosuTqn2uizDBKmrMFboBN9ATcXPVcyLzbUpdR\"]}},\"version\":1}"}},"contracts/library/ICrowdSale.sol":{"ICrowdSale":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"externalBuyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"buyTokens(address)":"ec8ac4d8","externalBuyTokens(address,uint256)":"5f1c3766","fundsRaised()":"6681b9fd","token()":"fc0c546a","tokensAvailable()":"60659a92","wallet()":"521eb273"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"purchaser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensPurchased\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"buyTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"externalBuyTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fundsRaised\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"ICrowdSale\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/library/ICrowdSale.sol\":\"ICrowdSale\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"contracts/library/ICrowdSale.sol\":{\"keccak256\":\"0xe5539638218e0e027b15b9c236cb9d2dcffcb0ea3ed79d8374e11d120d1b1d4d\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://3600a70cc759026e923c594f69fd68d5ad3476fcfaa5945245ce08fe94b0a953\",\"dweb:/ipfs/QmRq9A3iei2J1ocWDoq1xL5xLdnSAgxfuktuC3XsFhFUqh\"]}},\"version\":1}"}},"contracts/library/IVestingVault.sol":{"IVestingVault":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"VestingLockedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"VestingReleased","type":"event"},{"inputs":[{"internalType":"address","name":"beneficiary_","type":"address"},{"internalType":"uint256","name":"releaseTime_","type":"uint256"},{"internalType":"uint256","name":"tokenAmount_","type":"uint256"}],"name":"addBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficary_","type":"address"}],"name":"vestingFor","outputs":[{"components":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"internalType":"struct IVestingVault.Vesting[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addBeneficiary(address,uint256,uint256)":"f74bc9d6","release()":"86d1a69f","token()":"fc0c546a","vestingFor(address)":"f4753b38"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"VestingLockedIn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"VestingReleased\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"releaseTime_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount_\",\"type\":\"uint256\"}],\"name\":\"addBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficary_\",\"type\":\"address\"}],\"name\":\"vestingFor\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct IVestingVault.Vesting[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/library/IVestingVault.sol\":\"IVestingVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"contracts/library/IVestingVault.sol\":{\"keccak256\":\"0xf3f074546fdb24b8d2889ffd7947b5134669f1eb47c4baf30abf4663f6d320d7\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://e13d929241510074238c4d3797aeaa9a8f3bea58c9d8beab73c2a39583dcf56e\",\"dweb:/ipfs/QmNX2cSo1uxxuviE5SL8wUgMgC2DBrDEyZa8KVd9DipUAU\"]}},\"version\":1}"}},"contracts/library/VestingVault.sol":{"VestingVault":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"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":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"VestingLockedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"VestingReleased","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VAULT_CONTROLLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary_","type":"address"},{"internalType":"uint256","name":"releaseTime_","type":"uint256"},{"internalType":"uint256","name":"tokenAmount_","type":"uint256"}],"name":"addBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary_","type":"address"}],"name":"vestingFor","outputs":[{"components":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"internalType":"struct IVestingVault.Vesting[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_grantRole":{"entryPoint":268,"id":256,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60a0346100f157601f61108038819003918201601f19168301916001600160401b038311848410176100f6578084926020946040528339810103126100f157516001600160a01b03811681036100f15760805261005b3361010c565b507f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd9600081815260208190527f18b789f689298f9861c64acec43fb83a444fe0a0d93f282ad4f66651300c99a5805490829055604051927fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8380a4610ec5908161019b823960805181818160d001526105490152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381166000908152600080516020611060833981519152602052604090205460ff16610194576001600160a01b0316600081815260008051602061106083398151915260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b5060009056fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a71461081b57508063248a9ca3146107e65780632f2ff15d146107a657806336568abe1461073a578063704e2b2d146106ff57806386d1a69f146103d657806391d148541461037b578063a217fddf1461035f578063d547741f1461031a578063f4753b38146101ae578063f74bc9d6146100f95763fc0c546a146100a357600080fd5b346100f45760006003193601126100f457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100f45760606003193601126100f45761011261090f565b3360009081527f18b789f689298f9861c64acec43fb83a444fe0a0d93f282ad4f66651300c99a4602052604090205460ff161561015c5761015a906044359060243590610a2a565b005b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd960245260446000fd5b346100f45760206003193601126100f45773ffffffffffffffffffffffffffffffffffffffff6101dc61090f565b166000526001602052604060002080549067ffffffffffffffff82116102eb576040519161021060208260051b018461094e565b80835260208301809260005260206000206000915b83831061029e5784866040519182916020830190602084525180915260408301919060005b818110610258575050500390f35b91935091602060606001926040875173ffffffffffffffffffffffffffffffffffffffff815116835284810151858401520151604082015201940191019184939261024a565b600360206001926040516102b181610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610225565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346100f45760406003193601126100f45761015a6004356103396108ec565b9061035a61035582600052600060205260016040600020015490565b610c6f565b610dbb565b346100f45760006003193601126100f457602060405160008152f35b346100f45760406003193601126100f4576103946108ec565b600435600052600060205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346100f45760006003193601126100f4573360005260016020526040600020805467ffffffffffffffff81116102eb576040519161041a60208360051b018461094e565b818352602083019060005260206000206000915b8383106106b257600085815b81518110156104f157426020610450838561098f565b5101511115610462575b60010161043a565b9161047e6001916040610475868661098f565b510151906109d2565b92602061048b828561098f565b510151604061049a838661098f565b51015160405191825260208201527fc35bc0b152cc4084b62942d2235605f7e5db6fc6217bc7ef532ba71acf7a58ce60403392a23360005281602052600060026104e78360408420610a0e565b500155905061045a565b82801561062e57604051907fa9059cbb0000000000000000000000000000000000000000000000000000000082523360048301526024820152602081604481600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610622576000916105e0575b501561058257005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f546f6b656e207472616e7366657220756e7375636365737366756c00000000006044820152fd5b6020813d60201161061a575b816105f96020938361094e565b81010312610616575190811515820361061357508161057a565b80fd5b5080fd5b3d91506105ec565b6040513d6000823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f56657374696e675661756c743a2043616e6e6f742072656c656173652030207460448201527f6f6b656e730000000000000000000000000000000000000000000000000000006064820152fd5b600360206001926040516106c581610932565b73ffffffffffffffffffffffffffffffffffffffff865416815284860154838201526002860154604082015281520192019201919061042e565b346100f45760006003193601126100f45760206040517f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd98152f35b346100f45760406003193601126100f4576107536108ec565b3373ffffffffffffffffffffffffffffffffffffffff82160361077c5761015a90600435610dbb565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b346100f45760406003193601126100f45761015a6004356107c56108ec565b906107e161035582600052600060205260016040600020015490565b610cdc565b346100f45760206003193601126100f4576020610813600435600052600060205260016040600020015490565b604051908152f35b346100f45760206003193601126100f457600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036100f457817f79e3001b000000000000000000000000000000000000000000000000000000006020931490811561088f575b5015158152f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156108c2575b5083610888565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836108bb565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6060810190811067ffffffffffffffff8211176102eb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102eb57604052565b80518210156109a35760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116109df57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80548210156109a3576000526003602060002091020190600090565b73ffffffffffffffffffffffffffffffffffffffff1690816000526001602052604060002092835467ffffffffffffffff81116102eb5760405194610a7560208360051b018761094e565b818652602086019060005260206000206000915b838310610c22575050505060005b8451811015610b19576020610aac828761098f565b5101518314610abd57600101610a97565b839450906002610afd604094937f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac96600052600160205285600020610a0e565b5001610b0a8282546109d2565b905582519182526020820152a2565b509091925082600052600160205260406000209160405191610b3a83610932565b848352602083019282845260408101948286528054680100000000000000008110156102eb57610b6f91600182018155610a0e565b919091610bf3577f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac9560409573ffffffffffffffffffffffffffffffffffffffff60029351167fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784555160018401555191015582519182526020820152a2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60036020600192604051610c3581610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610a89565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cab5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a460019056fea2646970667358221220e9449c6222f011d5acbd20569cd5a79571895511fa8878138086ed929de3f73364736f6c634300081b0033ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xF1 JUMPI PUSH1 0x1F PUSH2 0x1080 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xF6 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xF1 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xF1 JUMPI PUSH1 0x80 MSTORE PUSH2 0x5B CALLER PUSH2 0x10C JUMP JUMPDEST POP PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH32 0x18B789F689298F9861C64ACEC43FB83A444FE0A0D93F282AD4F66651300C99A5 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP3 PUSH32 0xBD79B86FFE0AB8E8776151514217CD7CACD52C909F66475C3AF44E129F0B00FF DUP4 DUP1 LOG4 PUSH2 0xEC5 SWAP1 DUP2 PUSH2 0x19B DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xD0 ADD MSTORE PUSH2 0x549 ADD MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1060 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x194 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1060 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x81B JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x7A6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0x704E2B2D EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x35F JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xF4753B38 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xF74BC9D6 EQ PUSH2 0xF9 JUMPI PUSH4 0xFC0C546A EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x112 PUSH2 0x90F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x18B789F689298F9861C64ACEC43FB83A444FE0A0D93F282AD4F66651300C99A4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA2A JUMP JUMPDEST STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1DC PUSH2 0x90F JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x210 PUSH1 0x20 DUP3 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD DUP1 SWAP3 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x29E JUMPI DUP5 DUP7 PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x20 DUP5 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP4 ADD SWAP2 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x258 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH1 0x20 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP4 MSTORE DUP5 DUP2 ADD MLOAD DUP6 DUP5 ADD MSTORE ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP5 ADD SWAP2 ADD SWAP2 DUP5 SWAP4 SWAP3 PUSH2 0x24A JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x2B1 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x339 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x35A PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0xDBB JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x394 PUSH2 0x8EC JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI CALLER PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x41A PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP6 DUP2 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F1 JUMPI TIMESTAMP PUSH1 0x20 PUSH2 0x450 DUP4 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD GT ISZERO PUSH2 0x462 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x43A JUMP JUMPDEST SWAP2 PUSH2 0x47E PUSH1 0x1 SWAP2 PUSH1 0x40 PUSH2 0x475 DUP7 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD SWAP1 PUSH2 0x9D2 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH2 0x48B DUP3 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 PUSH2 0x49A DUP4 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xC35BC0B152CC4084B62942D2235605F7E5DB6FC6217BC7EF532BA71ACF7A58CE PUSH1 0x40 CALLER SWAP3 LOG2 CALLER PUSH1 0x0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x0 PUSH1 0x2 PUSH2 0x4E7 DUP4 PUSH1 0x40 DUP5 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD SSTORE SWAP1 POP PUSH2 0x45A JUMP JUMPDEST DUP3 DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x622 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x5E0 JUMPI JUMPDEST POP ISZERO PUSH2 0x582 JUMPI STOP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207472616E7366657220756E7375636365737366756C0000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x61A JUMPI JUMPDEST DUP2 PUSH2 0x5F9 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x94E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x616 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x613 JUMPI POP DUP2 PUSH2 0x57A JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x56657374696E675661756C743A2043616E6E6F742072656C6561736520302074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6B656E73000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x6C5 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x42E JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x753 PUSH2 0x8EC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x77C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xDBB JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x7C5 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x7E1 PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH2 0x813 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xF4 JUMPI DUP2 PUSH32 0x79E3001B00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x88F JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x8C2 JUMPI JUMPDEST POP DUP4 PUSH2 0x888 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x8BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x9DF JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x0 MSTORE PUSH1 0x3 PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP2 MUL ADD SWAP1 PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP3 DUP4 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0xA75 PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0xC22 JUMPI POP POP POP POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xB19 JUMPI PUSH1 0x20 PUSH2 0xAAC DUP3 DUP8 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD DUP4 EQ PUSH2 0xABD JUMPI PUSH1 0x1 ADD PUSH2 0xA97 JUMP JUMPDEST DUP4 SWAP5 POP SWAP1 PUSH1 0x2 PUSH2 0xAFD PUSH1 0x40 SWAP5 SWAP4 PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP7 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP6 PUSH1 0x0 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD PUSH2 0xB0A DUP3 DUP3 SLOAD PUSH2 0x9D2 JUMP JUMPDEST SWAP1 SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP3 POP DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0xB3A DUP4 PUSH2 0x932 JUMP JUMPDEST DUP5 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 DUP3 DUP5 MSTORE PUSH1 0x40 DUP2 ADD SWAP5 DUP3 DUP7 MSTORE DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EB JUMPI PUSH2 0xB6F SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0xA0E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0xBF3 JUMPI PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP6 PUSH1 0x40 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x2 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP6 SLOAD AND OR DUP5 SSTORE MLOAD PUSH1 0x1 DUP5 ADD SSTORE MLOAD SWAP2 ADD SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0xC35 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0xA89 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCAB JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 PREVRANDAO SWAP13 PUSH3 0x22F011 0xD5 0xAC 0xBD KECCAK256 JUMP SWAP13 0xD5 0xA7 SWAP6 PUSH18 0x895511FA8878138086ED929DE3F73364736F PUSH13 0x634300081B0033AD3228B676F7 0xD3 0xCD TIMESTAMP DUP5 0xA5 PREVRANDAO EXTCODEHASH OR CALL SWAP7 0x2B CALLDATASIZE 0xE4 SWAP2 0xB3 EXP BLOCKHASH 0xB2 BLOCKHASH PC BLOBHASH 0xE5 SWAP8 0xBA PUSH0 0xB5 ","sourceMap":"406:2932:28:-:0;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;-1:-1:-1;;;;;406:2932:28;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;406:2932:28;;;;;;689:15;;714:42;745:10;714:42;:::i;:::-;-1:-1:-1;522:34:28;-1:-1:-1;406:2932:28;;;;;;;3901:22:0;406:2932:28;;;;;;;;;5886:52:0;-1:-1:-1;;5886:52:0;406:2932:28;;;;;;689:15;406:2932;;;;;;;;;;;;-1:-1:-1;406:2932:28;;;;;;-1:-1:-1;406:2932:28;;;;;-1:-1:-1;406:2932:28;6179:316:0;-1:-1:-1;;;;;406:2932:28;;2232:4:0;406:2932:28;;;-1:-1:-1;;;;;;;;;;;406:2932:28;;;;;;;;;;-1:-1:-1;;;;;406:2932:28;2232:4:0;406:2932:28;;;-1:-1:-1;;;;;;;;;;;406:2932:28;;;;;;;-1:-1:-1;;406:2932:28;;;;;735:10:13;;406:2932:28;6370:40:0;2232:4;;6370:40;6347:4;6424:11;:::o;6272:217::-;6466:12;2232:4;6466:12;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2319,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6158":{"entryPoint":2284,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint256":{"entryPoint":2514,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2382,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6160":{"entryPoint":2354,"id":null,"parameterSlots":1,"returnSlots":0},"fun_addBeneficiary_inner":{"entryPoint":2602,"id":null,"parameterSlots":3,"returnSlots":0},"fun_checkRole":{"entryPoint":3183,"id":93,"parameterSlots":1,"returnSlots":0},"fun_getRoleAdmin":{"entryPoint":null,"id":128,"parameterSlots":1,"returnSlots":1},"fun_grantRole":{"entryPoint":3292,"id":256,"parameterSlots":2,"returnSlots":1},"fun_revokeRole":{"entryPoint":3515,"id":294,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_struct_Vesting_dyn":{"entryPoint":2447,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_struct_Vesting__dyn":{"entryPoint":2574,"id":null,"parameterSlots":2,"returnSlots":2}},"generatedSources":[],"immutableReferences":{"3690":[{"length":32,"start":208},{"length":32,"start":1353}]},"linkReferences":{},"object":"608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a71461081b57508063248a9ca3146107e65780632f2ff15d146107a657806336568abe1461073a578063704e2b2d146106ff57806386d1a69f146103d657806391d148541461037b578063a217fddf1461035f578063d547741f1461031a578063f4753b38146101ae578063f74bc9d6146100f95763fc0c546a146100a357600080fd5b346100f45760006003193601126100f457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100f45760606003193601126100f45761011261090f565b3360009081527f18b789f689298f9861c64acec43fb83a444fe0a0d93f282ad4f66651300c99a4602052604090205460ff161561015c5761015a906044359060243590610a2a565b005b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd960245260446000fd5b346100f45760206003193601126100f45773ffffffffffffffffffffffffffffffffffffffff6101dc61090f565b166000526001602052604060002080549067ffffffffffffffff82116102eb576040519161021060208260051b018461094e565b80835260208301809260005260206000206000915b83831061029e5784866040519182916020830190602084525180915260408301919060005b818110610258575050500390f35b91935091602060606001926040875173ffffffffffffffffffffffffffffffffffffffff815116835284810151858401520151604082015201940191019184939261024a565b600360206001926040516102b181610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610225565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346100f45760406003193601126100f45761015a6004356103396108ec565b9061035a61035582600052600060205260016040600020015490565b610c6f565b610dbb565b346100f45760006003193601126100f457602060405160008152f35b346100f45760406003193601126100f4576103946108ec565b600435600052600060205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346100f45760006003193601126100f4573360005260016020526040600020805467ffffffffffffffff81116102eb576040519161041a60208360051b018461094e565b818352602083019060005260206000206000915b8383106106b257600085815b81518110156104f157426020610450838561098f565b5101511115610462575b60010161043a565b9161047e6001916040610475868661098f565b510151906109d2565b92602061048b828561098f565b510151604061049a838661098f565b51015160405191825260208201527fc35bc0b152cc4084b62942d2235605f7e5db6fc6217bc7ef532ba71acf7a58ce60403392a23360005281602052600060026104e78360408420610a0e565b500155905061045a565b82801561062e57604051907fa9059cbb0000000000000000000000000000000000000000000000000000000082523360048301526024820152602081604481600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610622576000916105e0575b501561058257005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f546f6b656e207472616e7366657220756e7375636365737366756c00000000006044820152fd5b6020813d60201161061a575b816105f96020938361094e565b81010312610616575190811515820361061357508161057a565b80fd5b5080fd5b3d91506105ec565b6040513d6000823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f56657374696e675661756c743a2043616e6e6f742072656c656173652030207460448201527f6f6b656e730000000000000000000000000000000000000000000000000000006064820152fd5b600360206001926040516106c581610932565b73ffffffffffffffffffffffffffffffffffffffff865416815284860154838201526002860154604082015281520192019201919061042e565b346100f45760006003193601126100f45760206040517f9872d9a33a826e6fa63de183f4672fa7578a62703fcc3dcc926810a2b5a12fd98152f35b346100f45760406003193601126100f4576107536108ec565b3373ffffffffffffffffffffffffffffffffffffffff82160361077c5761015a90600435610dbb565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b346100f45760406003193601126100f45761015a6004356107c56108ec565b906107e161035582600052600060205260016040600020015490565b610cdc565b346100f45760206003193601126100f4576020610813600435600052600060205260016040600020015490565b604051908152f35b346100f45760206003193601126100f457600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036100f457817f79e3001b000000000000000000000000000000000000000000000000000000006020931490811561088f575b5015158152f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156108c2575b5083610888565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836108bb565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100f457565b6060810190811067ffffffffffffffff8211176102eb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102eb57604052565b80518210156109a35760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116109df57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80548210156109a3576000526003602060002091020190600090565b73ffffffffffffffffffffffffffffffffffffffff1690816000526001602052604060002092835467ffffffffffffffff81116102eb5760405194610a7560208360051b018761094e565b818652602086019060005260206000206000915b838310610c22575050505060005b8451811015610b19576020610aac828761098f565b5101518314610abd57600101610a97565b839450906002610afd604094937f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac96600052600160205285600020610a0e565b5001610b0a8282546109d2565b905582519182526020820152a2565b509091925082600052600160205260406000209160405191610b3a83610932565b848352602083019282845260408101948286528054680100000000000000008110156102eb57610b6f91600182018155610a0e565b919091610bf3577f970b25b911957fbf97ef28d72fcbb6175e7b3b97729a26ef75ce09e4a72c0fac9560409573ffffffffffffffffffffffffffffffffffffffff60029351167fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784555160018401555191015582519182526020820152a2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b60036020600192604051610c3581610932565b73ffffffffffffffffffffffffffffffffffffffff8654168152848601548382015260028601546040820152815201920192019190610a89565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615610cab5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014610db457806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a460019056fea2646970667358221220e9449c6222f011d5acbd20569cd5a79571895511fa8878138086ed929de3f73364736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x81B JUMPI POP DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x7A6 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0x704E2B2D EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x86D1A69F EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x35F JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xF4753B38 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xF74BC9D6 EQ PUSH2 0xF9 JUMPI PUSH4 0xFC0C546A EQ PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x112 PUSH2 0x90F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x18B789F689298F9861C64ACEC43FB83A444FE0A0D93F282AD4F66651300C99A4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA2A JUMP JUMPDEST STOP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1DC PUSH2 0x90F JUMP JUMPDEST AND PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x210 PUSH1 0x20 DUP3 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD DUP1 SWAP3 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x29E JUMPI DUP5 DUP7 PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x20 DUP5 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP4 ADD SWAP2 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x258 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH1 0x20 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP4 MSTORE DUP5 DUP2 ADD MLOAD DUP6 DUP5 ADD MSTORE ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP5 ADD SWAP2 ADD SWAP2 DUP5 SWAP4 SWAP3 PUSH2 0x24A JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x2B1 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x339 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x35A PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0xDBB JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x394 PUSH2 0x8EC JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI CALLER PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x41A PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP5 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP6 DUP2 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F1 JUMPI TIMESTAMP PUSH1 0x20 PUSH2 0x450 DUP4 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD GT ISZERO PUSH2 0x462 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x43A JUMP JUMPDEST SWAP2 PUSH2 0x47E PUSH1 0x1 SWAP2 PUSH1 0x40 PUSH2 0x475 DUP7 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD SWAP1 PUSH2 0x9D2 JUMP JUMPDEST SWAP3 PUSH1 0x20 PUSH2 0x48B DUP3 DUP6 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 PUSH2 0x49A DUP4 DUP7 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xC35BC0B152CC4084B62942D2235605F7E5DB6FC6217BC7EF532BA71ACF7A58CE PUSH1 0x40 CALLER SWAP3 LOG2 CALLER PUSH1 0x0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x0 PUSH1 0x2 PUSH2 0x4E7 DUP4 PUSH1 0x40 DUP5 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD SSTORE SWAP1 POP PUSH2 0x45A JUMP JUMPDEST DUP3 DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x622 JUMPI PUSH1 0x0 SWAP2 PUSH2 0x5E0 JUMPI JUMPDEST POP ISZERO PUSH2 0x582 JUMPI STOP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207472616E7366657220756E7375636365737366756C0000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x61A JUMPI JUMPDEST DUP2 PUSH2 0x5F9 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x94E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x616 JUMPI MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x613 JUMPI POP DUP2 PUSH2 0x57A JUMP JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x56657374696E675661756C743A2043616E6E6F742072656C6561736520302074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6B656E73000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0x6C5 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0x42E JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x9872D9A33A826E6FA63DE183F4672FA7578A62703FCC3DCC926810A2B5A12FD9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x753 PUSH2 0x8EC JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SUB PUSH2 0x77C JUMPI PUSH2 0x15A SWAP1 PUSH1 0x4 CALLDATALOAD PUSH2 0xDBB JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH2 0x15A PUSH1 0x4 CALLDATALOAD PUSH2 0x7C5 PUSH2 0x8EC JUMP JUMPDEST SWAP1 PUSH2 0x7E1 PUSH2 0x355 DUP3 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH2 0x813 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xF4 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xF4 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xF4 JUMPI DUP2 PUSH32 0x79E3001B00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x88F JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x8C2 JUMPI JUMPDEST POP DUP4 PUSH2 0x888 JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x8BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xF4 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2EB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x9DF JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x0 MSTORE PUSH1 0x3 PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP2 MUL ADD SWAP1 PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP3 DUP4 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2EB JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0xA75 PUSH1 0x20 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x94E JUMP JUMPDEST DUP2 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0xC22 JUMPI POP POP POP POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xB19 JUMPI PUSH1 0x20 PUSH2 0xAAC DUP3 DUP8 PUSH2 0x98F JUMP JUMPDEST MLOAD ADD MLOAD DUP4 EQ PUSH2 0xABD JUMPI PUSH1 0x1 ADD PUSH2 0xA97 JUMP JUMPDEST DUP4 SWAP5 POP SWAP1 PUSH1 0x2 PUSH2 0xAFD PUSH1 0x40 SWAP5 SWAP4 PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP7 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP6 PUSH1 0x0 KECCAK256 PUSH2 0xA0E JUMP JUMPDEST POP ADD PUSH2 0xB0A DUP3 DUP3 SLOAD PUSH2 0x9D2 JUMP JUMPDEST SWAP1 SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP3 POP DUP3 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0xB3A DUP4 PUSH2 0x932 JUMP JUMPDEST DUP5 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP3 DUP3 DUP5 MSTORE PUSH1 0x40 DUP2 ADD SWAP5 DUP3 DUP7 MSTORE DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EB JUMPI PUSH2 0xB6F SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0xA0E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0xBF3 JUMPI PUSH32 0x970B25B911957FBF97EF28D72FCBB6175E7B3B97729A26EF75CE09E4A72C0FAC SWAP6 PUSH1 0x40 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x2 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP6 SLOAD AND OR DUP5 SSTORE MLOAD PUSH1 0x1 DUP5 ADD SSTORE MLOAD SWAP2 ADD SSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE LOG2 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH1 0x40 MLOAD PUSH2 0xC35 DUP2 PUSH2 0x932 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 SLOAD AND DUP2 MSTORE DUP5 DUP7 ADD SLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x2 DUP7 ADD SLOAD PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 PUSH2 0xA89 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH2 0xCAB JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND ISZERO PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD AND PUSH1 0x0 EQ PUSH2 0xDB4 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 PREVRANDAO SWAP13 PUSH3 0x22F011 0xD5 0xAC 0xBD KECCAK256 JUMP SWAP13 0xD5 0xA7 SWAP6 PUSH18 0x895511FA8878138086ED929DE3F73364736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"406:2932:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;;;;;2250:6;406:2932;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;;;:::i;:::-;735:10:13;406:2932:28;;;;;;;;;;;;;3519:23:0;3515:108;;2490:1;406:2932:28;;;;;;2490:1:0;;:::i;:::-;406:2932:28;3515:108:0;3565:47;406:2932:28;3565:47:0;735:10:13;406:2932:28;;522:34;406:2932;;;;3565:47:0;406:2932:28;;;;;-1:-1:-1;;406:2932:28;;;;;;;;:::i;:::-;;;;2507:8;406:2932;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2507:8;406:2932;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2507:8;406:2932;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;4747:26:0;406:2932:28;;;;:::i;:::-;4717:18:0;2475:4;4717:18;;3901:6;406:2932:28;3901:6:0;406:2932:28;;3901:22:0;406:2932:28;3901:6:0;406:2932:28;3901:22:0;406:2932:28;3810:120:0;;4717:18;2475:4;:::i;:::-;4747:26;:::i;406:2932:28:-;;;;;-1:-1:-1;;406:2932:28;;;;;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;;;:::i;:::-;;;;;;;;;;;;2954:29:0;406:2932:28;-1:-1:-1;406:2932:28;;;;;;-1:-1:-1;406:2932:28;;;;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;735:10:13;406:2932:28;;2681:8;406:2932;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2713:27;406:2932;2791:3;406:2932;;2770:19;;;;;2841:15;406:2932;2814:11;;;;:::i;:::-;;:23;406:2932;2814:42;;2810:301;;2791:3;2681:8;406:2932;2755:13;;2810:301;2912:11;2894:41;2681:8;2912:11;406:2932;2912:11;;;;:::i;:::-;;:23;406:2932;2894:41;;:::i;:::-;2988:11;406:2932;2988:11;;;;:::i;:::-;;:23;406:2932;;3013:11;;;;:::i;:::-;;:23;406:2932;;;;;;;;;;2958:79;406:2932;735:10:13;2958:79:28;;735:10:13;406:2932:28;;;;;;;3055:25;406:2932;;;;3055:25;:::i;:::-;:37;;406:2932;2810:301;;;;2770:19;;3138;;406:2932;;;;3225:47;406:2932;3225:47;;735:10:13;406:2932:28;3225:47;;406:2932;;;;;;2250:6;3225:47;2250:6;406:2932;;2250:6;406:2932;3225:47;;;;;;;406:2932;3225:47;;;2750:371;406:2932;;;;;;;;;;;;;;;;;;;;;;;3225:47;406:2932;;;;3225:47;406:2932;3225:47;;406:2932;3225:47;;;;;;406:2932;3225:47;;;:::i;:::-;;;406:2932;;;;;;;;;;;;;3225:47;;;;406:2932;;;;;;;3225:47;;;-1:-1:-1;3225:47:28;;;406:2932;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2681:8;406:2932;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;;;;522:34;406:2932;;;;;;;;-1:-1:-1;;406:2932:28;;;;;;;:::i;:::-;735:10:13;406:2932:28;;;5421:34:0;5417:102;;5529:37;406:2932:28;;;5529:37:0;:::i;5417:102::-;5478:30;406:2932:28;5478:30:0;406:2932:28;;5478:30:0;406:2932:28;;;;;-1:-1:-1;;406:2932:28;;;;;4330:25:0;406:2932:28;;;;:::i;:::-;4300:18:0;2475:4;4300:18;;3901:6;406:2932:28;3901:6:0;406:2932:28;;3901:22:0;406:2932:28;3901:6:0;406:2932:28;3901:22:0;406:2932:28;3810:120:0;;2475:4;4330:25;:::i;406:2932:28:-;;;;;-1:-1:-1;;406:2932:28;;;;;;;;;3901:6:0;406:2932:28;3901:6:0;406:2932:28;;3901:22:0;406:2932:28;3901:6:0;406:2932:28;3901:22:0;406:2932:28;3810:120:0;;406:2932:28;;;;;;;;;;;;-1:-1:-1;;406:2932:28;;;;;;;;;;;;;;;;966:46;981:31;406:2932;966:46;;:86;;;;;406:2932;;;;;;;966:86;2688:32:0;2673:47;;;-1:-1:-1;2673:87:0;;;;966:86:28;;;;;2673:87:0;877:25:17;862:40;;;2673:87:0;;;406:2932:28;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2932:28;;;-1:-1:-1;406:2932:28;;;;;-1:-1:-1;406:2932:28;:::o;1347:755::-;406:2932;;;;-1:-1:-1;406:2932:28;1581:8;406:2932;;;-1:-1:-1;406:2932:28;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;406:2932:28;;-1:-1:-1;406:2932:28;-1:-1:-1;406:2932:28;;;;;;;1619:13;;;;-1:-1:-1;1655:3:28;406:2932;;1634:19;;;;;406:2932;1694:11;;;;:::i;:::-;;:23;406:2932;1678:39;;1674:235;;1581:8;406:2932;1619:13;;1674:235;406:2932;;;;;1737:25;406:2932;;;1813:57;406:2932;-1:-1:-1;406:2932:28;1581:8;406:2932;;;-1:-1:-1;406:2932:28;1737:25;:::i;:::-;:37;;:53;406:2932;;;1737:53;:::i;:::-;406:2932;;;;;;;;;;;1813:57;1888:7::o;1634:19::-;;;;;;406:2932;-1:-1:-1;406:2932:28;1581:8;406:2932;;;-1:-1:-1;406:2932:28;;;;;;;;:::i;:::-;;;;;1957:49;;406:2932;;;;;1957:49;;406:2932;;;;;;;;;;;;;;1581:8;406:2932;;;;;:::i;:::-;;;;;;2022:57;406:2932;;;;;;;;;;;;;;;;1581:8;406:2932;;;;;;;;;;;;;;;;2022:57;1347:755::o;406:2932::-;;-1:-1:-1;406:2932:28;-1:-1:-1;406:2932:28;;;-1:-1:-1;406:2932:28;;;;1581:8;406:2932;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3199:103:0;406:2932:28;2954:6:0;406:2932:28;2954:6:0;406:2932:28;;;2954:6:0;406:2932:28;;735:10:13;406:2932:28;-1:-1:-1;406:2932:28;;;;;-1:-1:-1;406:2932:28;;;3519:23:0;3515:108;;3199:103;:::o;3515:108::-;3565:47;2954:6;3565:47;735:10:13;3565:47:0;406:2932:28;;;;2954:6:0;3565:47;6179:316;406:2932:28;;;;;;;;;;;;-1:-1:-1;406:2932:28;;;;;-1:-1:-1;406:2932:28;;;6276:23:0;6272:217;406:2932:28;;;;;;;;;;;;;;;-1:-1:-1;406:2932:28;;;;-1:-1:-1;406:2932:28;6347:4:0;406:2932:28;;;;;;;;735:10:13;406:2932:28;;6370:40:0;;406:2932:28;6370:40:0;;6347:4;6424:11;:::o;6272:217::-;6466:12;;406:2932:28;6466:12:0;:::o;6732:317::-;406:2932:28;;;;;;;;;;;;-1:-1:-1;406:2932:28;;;;;-1:-1:-1;406:2932:28;;;6826:217:0;406:2932:28;;;;;;;;;;;;;;;-1:-1:-1;406:2932:28;;;;-1:-1:-1;406:2932:28;;;;;;;;735:10:13;406:2932:28;;6924:40:0;;406:2932:28;6924:40:0;;406:2932:28;6978:11:0;:::o"},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","VAULT_CONTROLLER_ROLE()":"704e2b2d","addBeneficiary(address,uint256,uint256)":"f74bc9d6","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","release()":"86d1a69f","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","vestingFor(address)":"f4753b38"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"VestingLockedIn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"VestingReleased\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_CONTROLLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"releaseTime_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount_\",\"type\":\"uint256\"}],\"name\":\"addBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"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\":[],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"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\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary_\",\"type\":\"address\"}],\"name\":\"vestingFor\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"releaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct IVestingVault.Vesting[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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 to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"addBeneficiary(address,uint256,uint256)\":{\"details\":\"function to create a vesting for the beneficiary\",\"params\":{\"beneficiary_\":\"Beneficiary of tokens after they are released\",\"releaseTime_\":\"Timestamp when token release is enabled\",\"tokenAmount_\":\"Amount of tokens to release\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"release()\":{\"details\":\"releases the tokens of the msg sender\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"token()\":{\"returns\":{\"_0\":\"the address of the token being stored.\"}},\"vestingFor(address)\":{\"params\":{\"beneficiary_\":\"the address for which the vesting is returned\"},\"returns\":{\"_0\":\"the vesting for an address\"}}},\"title\":\"VestingVault\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/library/VestingVault.sol\":\"VestingVault\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67\",\"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"contracts/library/IVestingVault.sol\":{\"keccak256\":\"0xf3f074546fdb24b8d2889ffd7947b5134669f1eb47c4baf30abf4663f6d320d7\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://e13d929241510074238c4d3797aeaa9a8f3bea58c9d8beab73c2a39583dcf56e\",\"dweb:/ipfs/QmNX2cSo1uxxuviE5SL8wUgMgC2DBrDEyZa8KVd9DipUAU\"]},\"contracts/library/VestingVault.sol\":{\"keccak256\":\"0x0386c58188ed9a89f544a617e7b628210935857895b07549854a19e140a1b21c\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://c2d8275e0105f4a6c134acb7057706b00c437e3b5e72185479024343346ab1ee\",\"dweb:/ipfs/QmegrKCswosuTqn2uizDBKmrMFboBN9ATcXPVcyLzbUpdR\"]}},\"version\":1}"}}}}}