Source Code
Latest 25 from a total of 5,360 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit Eth | 36475348 | 5 hrs ago | IN | 0.0015 ETH | 0.00000608 | ||||
| Claim Eth | 36431433 | 10 hrs ago | IN | 0 ETH | 0.00000535 | ||||
| Deposit Eth | 36431358 | 10 hrs ago | IN | 0.002 ETH | 0.0000061 | ||||
| Deposit Eth | 36416464 | 12 hrs ago | IN | 0.001 ETH | 0.00000729 | ||||
| Deposit Eth | 36410153 | 13 hrs ago | IN | 0.0004 ETH | 0.00000635 | ||||
| Claim Eth | 36347308 | 21 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36346841 | 21 hrs ago | IN | 0.0001 ETH | 0.00000729 | ||||
| Claim Eth | 36319981 | 25 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36319801 | 25 hrs ago | IN | 0.015 ETH | 0.00000608 | ||||
| Claim Eth | 36318583 | 25 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36318278 | 25 hrs ago | IN | 0.001 ETH | 0.00000729 | ||||
| Claim Eth | 36307893 | 26 hrs ago | IN | 0 ETH | 0.00000476 | ||||
| Deposit Eth | 36307842 | 26 hrs ago | IN | 0.002 ETH | 0.00000608 | ||||
| Claim Eth | 36304220 | 27 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36304127 | 27 hrs ago | IN | 0.0072 ETH | 0.00000609 | ||||
| Claim Eth | 36302517 | 27 hrs ago | IN | 0 ETH | 0.00000476 | ||||
| Deposit Eth | 36302404 | 27 hrs ago | IN | 0.0076 ETH | 0.00000513 | ||||
| Claim Eth | 36301153 | 27 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36301099 | 28 hrs ago | IN | 0.01 ETH | 0.00000609 | ||||
| Claim Eth | 36299729 | 28 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36299646 | 28 hrs ago | IN | 0.0068 ETH | 0.00000609 | ||||
| Claim Eth | 36297941 | 28 hrs ago | IN | 0 ETH | 0.00000476 | ||||
| Deposit Eth | 36297858 | 28 hrs ago | IN | 0.008 ETH | 0.00000514 | ||||
| Claim Eth | 36296424 | 28 hrs ago | IN | 0 ETH | 0.00000534 | ||||
| Deposit Eth | 36296287 | 28 hrs ago | IN | 0.0078 ETH | 0.00000609 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 36475348 | 5 hrs ago | 0.0015 ETH | ||||
| 36431433 | 10 hrs ago | 0.0019933 ETH | ||||
| 36431358 | 10 hrs ago | 0.002 ETH | ||||
| 36416464 | 12 hrs ago | 0.001 ETH | ||||
| 36410153 | 13 hrs ago | 0.0004 ETH | ||||
| 36347308 | 21 hrs ago | 0.0001187 ETH | ||||
| 36346841 | 21 hrs ago | 0.0001 ETH | ||||
| 36319981 | 25 hrs ago | 0.0148952 ETH | ||||
| 36319801 | 25 hrs ago | 0.015 ETH | ||||
| 36318583 | 25 hrs ago | 0.00179 ETH | ||||
| 36318278 | 25 hrs ago | 0.001 ETH | ||||
| 36307893 | 26 hrs ago | 0.002009 ETH | ||||
| 36307842 | 26 hrs ago | 0.002 ETH | ||||
| 36304220 | 27 hrs ago | 0.0071791 ETH | ||||
| 36304127 | 27 hrs ago | 0.0072 ETH | ||||
| 36302517 | 27 hrs ago | 0.0075636 ETH | ||||
| 36302404 | 27 hrs ago | 0.0076 ETH | ||||
| 36301153 | 27 hrs ago | 0.0100036 ETH | ||||
| 36301099 | 28 hrs ago | 0.01 ETH | ||||
| 36299729 | 28 hrs ago | 0.0067431 ETH | ||||
| 36299646 | 28 hrs ago | 0.0068 ETH | ||||
| 36297941 | 28 hrs ago | 0.0079826 ETH | ||||
| 36297858 | 28 hrs ago | 0.008 ETH | ||||
| 36296424 | 28 hrs ago | 0.0077632 ETH | ||||
| 36296287 | 28 hrs ago | 0.0078 ETH |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Gridle
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.7
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.0;
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";
//┌─────────────────────────────────────────────────────────┐
//│ +----+----+----+----+ │
//│ | 4x |BID | 5x | 7x | │
//│ +----+----+----+----+ │
//│ ▁▁▁WIN | 3x | 4x | 5x | │
//│ ▏ +----+----+----+----+ │
//│▔▔▔▏ ▏ ▁▁▏ | 2x | 3x |BID | 6x | │
//│ ▏ ▏▔▔▏ ▏ +----+----+----+----+ │
//│ ▏ ▏ ▔▔▏ ▏ | 3x | 4x | 5x | 7x | │
//│ ▏▔▔ ▔▔▔ +----+----+----+----+ │
//│ | 5x | 6x | 8x |10x | │
//└─────────────────────────────────────────────────────────┘
//0s 5s 10s 15s 20s 25s 30s 35s 40s 45s → Time
/// @title Gridle game
/// @notice A payment grid contract that handles ETH deposits, claims, and refunds with signature verification
/// @dev Uses cryptographic signatures to authorize deposits and claims. Each order ID can only be processed once to prevent
/// double spending. Supports role-based refunds for ETH.
contract Gridle is AccessControl {
bytes32 public constant WITHDRAW_ROLE = keccak256("WITHDRAW_ROLE");
bytes32 public constant REFUND_ROLE = keccak256("REFUND_ROLE");
/// @notice Address used to verify deposit signatures
address public signerAddress;
/// @notice Address to receive automatic withdrawals when balance exceeds limits
address public withdrawAddress;
/// @notice Mapping to track processed order IDs to prevent double spending
mapping(uint => bool) public processedOrders;
/// @notice Mapping to track last deposited amount per account for refund validation
mapping(address => uint256) public deposits;
/// @notice Minimum balance target as a percentage of systemBalance (in basis points)
/// @dev Target balance after withdrawal = systemBalance * minReservesCoef / 10000
/// @dev Example: 11000 = 110% means keep 110% of systemBalance (if systemBalance=100 ETH, keep 110 ETH)
uint256 public minReservesCoef;
/// @notice Maximum balance threshold as a percentage of systemBalance (in basis points)
/// @dev When balance exceeds systemBalance * maxReservesCoef / 10000, auto-withdrawal triggers
/// @dev Example: 15000 = 150% means trigger withdrawal when balance > 150% of systemBalance
uint256 public maxReservesCoef;
/// @notice Absolute minimum ETH buffer to maintain regardless of systemBalance
/// @dev Used as a safety floor when systemBalance is very low or zero
/// @dev If (systemBalance + minReserves) > coefficient-based target, this value is used instead
uint256 public minReserves;
/// @notice Last processed signId to track order sequence
uint256 public lastSignId;
/// @notice Error thrown when a provided signature is invalid
error WrongSignature();
/// @notice Error thrown when an order has already been processed
error OrderAlreadyProcessed();
/// @notice Error thrown when a zero address is provided where not allowed
error ZeroAddress();
/// @notice Error thrown when ETH transfer fails
error EthTransferFailed();
/// @notice Error thrown when reserved amount exceeds available balance
error InsufficientBalance();
/// @notice Error thrown when deadline has passed
error DeadlineExpired();
/// @notice Error thrown when refund amount exceeds deposit amount
error InvalidRefundAmount();
/// @notice Emitted when a successful ETH deposit is made
/// @param signId The unique identifier for the order
/// @param depositor The address that made the deposit
/// @param amount The amount deposited in wei
event EthDeposited(uint indexed signId, address indexed depositor, uint256 amount);
/// @notice Emitted when a successful ETH claim is made
/// @param signId The unique identifier for the order
/// @param account The address that claimed the payment
/// @param amount The amount claimed in wei
event EthClaimed(uint indexed signId, address indexed account, uint256 amount);
/// @notice Emitted when ETH is refunded to an account
/// @param account The address that received the refund
/// @param amount The amount refunded in wei
event EthRefunded(address indexed account, uint256 amount);
/// @notice Emitted when reserve parameters are updated
/// @param minReservesCoef The new minimum reserves coefficient
/// @param maxReservesCoef The new maximum reserves coefficient
/// @param minReserves The new minimum reserves amount
event ReserveParametersUpdated(uint256 minReservesCoef, uint256 maxReservesCoef, uint256 minReserves);
/// @notice Emitted when automatic withdrawal occurs
/// @param token The token address (address(0) for ETH)
/// @param amount The amount automatically withdrawn
/// @param recipient The address that received the withdrawal
event AutoWithdrawal(address indexed token, uint256 amount, address indexed recipient);
/// @notice Emitted when contract receives ETH directly
/// @param sender The address that sent ETH to the contract
/// @param amount The amount sent in wei
event Topup(address indexed sender, uint256 amount);
/// @param defaultAdmin The address that will initially own the admin role
/// @param _signerAddress The address authorized to sign deposit approvals
constructor(address defaultAdmin, address _signerAddress) {
if (defaultAdmin == address(0)) {
revert ZeroAddress();
}
_grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);
_grantRole(WITHDRAW_ROLE, defaultAdmin);
_grantRole(REFUND_ROLE, defaultAdmin);
signerAddress = _signerAddress;
withdrawAddress = defaultAdmin;
// Set default reserve coefficients: min 110%, max 120%
// Must be > 100% (10000) to maintain reserves above systemBalance
minReservesCoef = 11000; // 110% (11000/10000)
maxReservesCoef = 12000; // 120% (12000/10000)
minReserves = 1 ether;
}
/// @notice Allows an admin to update the authorized signer address
/// @param newSigner The new signer address
function setSigner(address newSigner) external onlyRole(DEFAULT_ADMIN_ROLE) {
signerAddress = newSigner;
}
/// @notice Set reserve parameters including coefficients and absolute minimum reserves
/// @param _minReservesCoef The minimum reserves coefficient in basis points (10000 = 100%)
/// @param _maxReservesCoef The maximum reserves coefficient in basis points (10000 = 100%)
/// @param _minReserves The absolute minimum reserves amount that must always be present
function setReserveParameters(
uint256 _minReservesCoef,
uint256 _maxReservesCoef,
uint256 _minReserves
) external onlyRole(DEFAULT_ADMIN_ROLE) {
require(_minReservesCoef > 10000, "Min coefficient must be > 100% (10000)");
require(_maxReservesCoef > 10000, "Max coefficient must be > 100% (10000)");
require(_minReservesCoef <= _maxReservesCoef, "Min coefficient must be <= max coefficient");
minReservesCoef = _minReservesCoef;
maxReservesCoef = _maxReservesCoef;
minReserves = _minReserves;
emit ReserveParametersUpdated(_minReservesCoef, _maxReservesCoef, _minReserves);
}
/// @notice Set the address to receive automatic withdrawals
/// @param _withdrawAddress The address to receive automatic withdrawals
function setWithdrawAddress(address _withdrawAddress) external onlyRole(DEFAULT_ADMIN_ROLE) {
if (_withdrawAddress == address(0)) {
revert ZeroAddress();
}
withdrawAddress = _withdrawAddress;
}
/// @notice Internal function to handle automatic ETH withdrawals when balance exceeds limits
/// @param systemBalance The required system balance (funds needed for operations)
function _autoWithdraw(uint256 systemBalance) internal {
// Calculate the total balance targets using coefficients
// Example: if systemBalance = 100 ETH and minReservesCoef = 11000 (110%)
// then minTargetFromCoef = 110 ETH (keeping 110% of what's needed)
uint256 minTargetFromCoef = (systemBalance * minReservesCoef) / 10000;
uint256 maxTargetFromCoef = (systemBalance * maxReservesCoef) / 10000;
// Ensure we keep at least the coefficient-based target OR systemBalance + absolute minimum
// This provides a safety floor: either percentage-based or fixed minimum buffer
uint256 effectiveMinTarget = minTargetFromCoef > (systemBalance + minReserves)
? minTargetFromCoef
: (systemBalance + minReserves);
// Check if current balance exceeds the maximum allowed threshold
uint256 currentBalance = address(this).balance;
uint256 maxAllowed = maxTargetFromCoef;
if (currentBalance > maxAllowed) {
// Withdraw excess funds down to the minimum target balance
uint256 targetBalance = effectiveMinTarget;
if (currentBalance > targetBalance) {
uint256 withdrawAmount = currentBalance - targetBalance;
(bool success, ) = payable(withdrawAddress).call{
value: withdrawAmount
}("");
if (success) {
emit AutoWithdrawal(address(0), withdrawAmount, withdrawAddress);
}
}
}
}
/// @notice Deposit ether with signature verification. Can also be used for time limited bids.
/// @param signId The unique identifier for this order
/// @param deadline The deadline timestamp after which the signature is invalid
/// @param systemBalance The system balance parameter
/// @param sigV The V component of the signature
/// @param sigR The R component of the signature
/// @param sigS The S component of the signature
function depositEth(
uint signId,
uint deadline,
uint systemBalance,
uint8 sigV,
bytes32 sigR,
bytes32 sigS
) external payable {
if (processedOrders[signId]) {
revert OrderAlreadyProcessed();
}
if (block.timestamp > deadline) {
revert DeadlineExpired();
}
bytes32 msgHash = keccak256(
abi.encode(signId, msg.sender, msg.value, deadline, systemBalance, address(this))
);
if (ecrecover(msgHash, sigV, sigR, sigS) != signerAddress) {
revert WrongSignature();
}
processedOrders[signId] = true;
// Track last deposit amount for refund validation
deposits[msg.sender] = msg.value;
emit EthDeposited(signId, msg.sender, msg.value);
// Auto-withdraw excess ETH balance only if this is a newer signId to be sure that systemBalance is fresh data
if (signId > lastSignId) {
lastSignId = signId;
_autoWithdraw(systemBalance);
}
}
/// @notice Claim payment for an order with signature verification
/// @param signId The unique identifier for the order
/// @param account The account to receive the payment
/// @param value The amount to claim
/// @param sigV The V component of the signature
/// @param sigR The R component of the signature
/// @param sigS The S component of the signature
function claimEth(
uint signId,
address account,
uint256 value,
uint8 sigV,
bytes32 sigR,
bytes32 sigS
) external {
if (processedOrders[signId]) {
revert OrderAlreadyProcessed();
}
bytes32 msgHash = keccak256(
abi.encode(signId, account, value, address(this))
);
if (ecrecover(msgHash, sigV, sigR, sigS) != signerAddress) {
revert WrongSignature();
}
processedOrders[signId] = true;
// Clear deposit record when claimed (claimed funds are no longer refundable)
deposits[account] = 0;
(bool success, ) = payable(account).call{value: value}("");
if (!success) {
revert EthTransferFailed();
}
emit EthClaimed(signId, account, value);
}
/// @notice Withdraws ETH held by the contract to the caller, leaving a reserved amount
/// @param reserved The amount of ETH to leave in the contract
function withdrawEth(uint256 reserved) external onlyRole(WITHDRAW_ROLE) {
uint256 balance = address(this).balance;
if (balance < reserved) {
revert InsufficientBalance();
}
uint256 withdrawAmount = balance - reserved;
(bool success, ) = payable(msg.sender).call{
value: withdrawAmount
}("");
if (!success) {
revert EthTransferFailed();
}
}
/// @notice Refund ETH to a specific account (amount must be <= deposit)
/// @param account The account to receive the refund
/// @param value The amount to refund in wei
function refundEth(address account, uint256 value) external onlyRole(REFUND_ROLE) {
if (account == address(0)) {
revert ZeroAddress();
}
// Validate refund amount doesn't exceed deposit amount
if (deposits[account] < value) {
revert InvalidRefundAmount();
}
// Reset the deposit record
deposits[account] = 0;
(bool success, ) = payable(account).call{value: value}("");
if (!success) {
revert EthTransferFailed();
}
emit EthRefunded(account, value);
}
/// @notice Allows contract to receive ETH transfers directly
receive() external payable {
emit Topup(msg.sender, msg.value);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
import {IAccessControl} from "./IAccessControl.sol";
import {Context} from "../utils/Context.sol";
import {IERC165, ERC165} from "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```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.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/// @inheritdoc IERC165
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (access/IAccessControl.sol)
pragma solidity >=0.8.4;
/**
* @dev External interface of AccessControl declared to support ERC-165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted to signal this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
* Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "./IERC165.sol";
/**
* @dev 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);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/// @inheritdoc IERC165
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)
pragma solidity >=0.4.16;
/**
* @dev 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}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"evmVersion": "paris",
"optimizer": {
"enabled": true,
"mode": "3"
},
"outputSelection": {
"*": {
"*": [
"abi",
"metadata"
],
"": [
"ast"
]
}
},
"detectMissingLibraries": false,
"forceEVMLA": false,
"enableEraVMExtensions": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"defaultAdmin","type":"address"},{"internalType":"address","name":"_signerAddress","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":"DeadlineExpired","type":"error"},{"inputs":[],"name":"EthTransferFailed","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidRefundAmount","type":"error"},{"inputs":[],"name":"OrderAlreadyProcessed","type":"error"},{"inputs":[],"name":"WrongSignature","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"AutoWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"signId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"signId","type":"uint256"},{"indexed":true,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minReservesCoef","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxReservesCoef","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minReserves","type":"uint256"}],"name":"ReserveParametersUpdated","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":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Topup","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFUND_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"signId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"sigV","type":"uint8"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"}],"name":"claimEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"signId","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"systemBalance","type":"uint256"},{"internalType":"uint8","name":"sigV","type":"uint8"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"}],"name":"depositEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposits","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":"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":"lastSignId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxReservesCoef","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReservesCoef","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"processedOrders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"refundEth","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":"uint256","name":"_minReservesCoef","type":"uint256"},{"internalType":"uint256","name":"_maxReservesCoef","type":"uint256"},{"internalType":"uint256","name":"_minReserves","type":"uint256"}],"name":"setReserveParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserved","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000255b0affb844eb48feff8d67efff7ca68321d4891dd2e10f5f14e4237600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000ef80626c6406ec0bf9720e2e81c066396c000000000000000000000000020000dc5611f4258cb9c0b0d0da971cdba8b96a9
Deployed Bytecode
0x0003000000000002000a0000000000020000006003100270000001f9033001970002000000310355000100000001035500000001002001900000001f0000c13d0000008002000039000000400020043f000000040030008c000000500000413d000000000201043b000000e0022002700000020a0020009c000000620000213d0000021a0020009c000000710000213d000002220020009c000000a00000213d000002260020009c000001ca0000613d000002270020009c000001db0000613d000002280020009c000005c90000c13d0000000001000416000000000001004b000005c90000c13d0000000201000039000003a00000013d0000000002000416000000000002004b000005c90000c13d0000001f02300039000001fa022001970000008002200039000000400020043f0000001f0430018f000001fb053001980000008002500039000000300000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b0000002c0000c13d000000000004004b0000003d0000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000400030008c000005c90000413d000000800300043d000001fc0030009c000005c90000213d000000a00100043d000800000001001d000001fc0010009c000005c90000213d000000000003004b0000011e0000c13d000000400100043d00000246020000410000000000210435000001f90010009c000001f901008041000000400110021000000237011001c7000007e200010430000000000003004b000005c90000c13d0000000001000416000000800010043f0000000001000414000001f90010009c000001f901008041000000c00110021000000208011001c70000800d0200003900000002030000390000000005000411000002090400004107e007d60000040f0000000100200190000005c90000613d0000000001000019000007e10001042e0000020b0020009c0000007e0000213d000002130020009c000000e30000213d000002170020009c000002940000613d000002180020009c000002990000613d000002190020009c000005c90000c13d0000000001000416000000000001004b000005c90000c13d00000005010000390000037a0000013d0000021b0020009c000000ef0000213d0000021f0020009c000002c50000613d000002200020009c000002d60000613d000002210020009c000005c90000c13d0000000001000416000000000001004b000005c90000c13d00000006010000390000037a0000013d0000020c0020009c000001080000213d000002100020009c000002fa0000613d000002110020009c000003230000613d000002120020009c000005c90000c13d000000440030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000002402100370000000000202043b000800000002001d000001fc0020009c000005c90000213d0000000401100370000000000101043b000700000001001d000000000010043f000000200000043f0000004002000039000000000100001907e007c10000040f0000000101100039000000000101041a07e007420000040f0000000701000029000000080200002907e007710000040f0000000001000019000007e10001042e000002230020009c0000035b0000613d000002240020009c000003690000613d000002250020009c000005c90000c13d000000440030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000402100370000000000202043b000800000002001d0000002401100370000000000101043b000700000001001d000001fc0010009c000005c90000213d0000000801000029000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000101100039000000000101041a000600000001001d000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff001001900000044d0000c13d000000400100043d00000024021000390000000603000029000003500000013d000002140020009c000003760000613d000002150020009c0000037e0000613d000002160020009c000005c90000c13d0000000001000416000000000001004b000005c90000c13d000000800000043f0000022901000041000007e10001042e0000021c0020009c0000039c0000613d0000021d0020009c000003a50000613d0000021e0020009c000005c90000c13d000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b000800000001001d000001fc0010009c000005c90000213d07e007210000040f0000000101000039000000000201041a00000205022001970000000803000029000000000232019f000000000021041b0000000001000019000007e10001042e0000020d0020009c000003ac0000613d0000020e0020009c000003b30000613d0000020f0020009c000005c90000c13d000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b000001fc0010009c000005c90000213d000000000010043f0000000401000039000000200010043f0000004002000039000000000100001907e007c10000040f0000037a0000013d000000000030043f000001fd01000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c70000801002000039000700000003001d07e007db0000040f00000007030000290000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000001500000c13d000000000030043f000001fd01000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000201041a000002510220019700000001022001bf000000000021041b0000000001000414000001f90010009c000001f901008041000000c001100210000001ff011001c70000800d020000390000000403000039000000000700041100000200040000410000000005000019000000070600002907e007d60000040f00000007030000290000000100200190000005c90000613d000000000030043f0000020101000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f00000007030000290000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000001810000c13d000000000030043f0000020101000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000201041a000002510220019700000001022001bf000000000021041b0000000001000414000001f90010009c000001f901008041000000c001100210000001ff011001c70000800d020000390000000403000039000000000700041100000200040000410000020205000041000000070600002907e007d60000040f00000007030000290000000100200190000005c90000613d000000000030043f0000020301000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f00000007030000290000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000001b20000c13d000000000030043f0000020301000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000201041a000002510220019700000001022001bf000000000021041b0000000001000414000001f90010009c000001f901008041000000c001100210000001ff011001c70000800d020000390000000403000039000000000700041100000200040000410000020405000041000000070600002907e007d60000040f00000007030000290000000100200190000005c90000613d0000000101000039000000000201041a000002050220019700000008022001af000000000021041b0000000201000039000000000201041a0000020502200197000000000232019f000000000021041b00002af8010000390000000502000039000000000012041b00002ee0010000390000000602000039000000000012041b00000206010000410000000702000039000000000012041b0000002001000039000001000010044300000120000004430000020701000041000007e10001042e000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b0000024e00100198000005c90000c13d0000024f0010009c00000000020000390000000102006039000002500010009c00000001022061bf000000800020043f0000022901000041000007e10001042e000000c40030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000402100370000000000202043b000800000002001d0000002402100370000000000202043b000700000002001d000001fc0020009c000005c90000213d0000004402100370000000000202043b000600000002001d0000006401100370000000000101043b000500000001001d000000ff0010008c000005c90000213d0000000801000029000000000010043f0000000301000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000003f80000c13d000000400300043d00000080013000390000000002000410000000000021043500000060013000390000000602000029000000000021043500000040013000390000000702000029000000000021043500000080010000390000000001130436000000080200002900000000002104350000024a0030009c0000071b0000813d000000a002300039000300000002001d000000400020043f000001f90010009c000001f9010080410000004001100210000400000003001d0000000002030433000001f90020009c000001f9020080410000006002200210000000000112019f00000001020003670000008403200370000000000303043b000200000003001d000000a402200370000000000202043b000100000002001d0000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f000001ff011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000030300002900000000001304350000000402000029000001000120003900000001040000290000000000410435000000e00120003900000002040000290000000000410435000000c00120003900000005020000290000000000210435000000000000043f000001f90030009c000001f90300804100000040013002100000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f0000022d011001c70000000102000039000500000002001d07e007db0000040f0000006003100270000001f903300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000002560000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000002520000c13d000000000005004b000002630000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00020000000103550000000100200190000005a70000613d0000000101000039000000000101041a000000000200043d000000000121013f000001fc00100198000006040000c13d0000000801000029000000000010043f0000000301000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000201041a000002510220019700000001022001bf000000000021041b0000000701000029000000000010043f0000000401000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000001041b00000000010004140000000702000029000000040020008c000006740000c13d0000000001000031000006860000013d0000000001000416000000000001004b000005c90000c13d00000008010000390000037a0000013d000000640030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000004402100370000000000202043b000600000002001d0000002402100370000000000202043b000700000002001d0000000401100370000000000101043b000800000001001d0000000001000411000000000010043f000001fd01000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000400200043d000000000101043b000000000101041a000000ff00100190000003eb0000c13d0000023a01000041000000000012043500000004012000390000000003000411000000000031043500000024012000390000000000010435000001f90020009c000001f90200804100000040012002100000023b011001c7000007e200010430000000440030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000002402100370000000000302043b000001fc0030009c000005c90000213d0000000002000411000000000023004b000003f40000c13d0000000401100370000000000101043b07e007710000040f0000000001000019000007e10001042e000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b000800000001001d000001fc0010009c000005c90000213d0000000001000411000000000010043f000001fd01000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000003fb0000c13d000000400100043d0000023a02000041000000000021043500000004021000390000000003000411000000000032043500000024021000390000000000020435000003560000013d000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b000800000001001d0000020201000041000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000004020000c13d000000400100043d00000024021000390000020203000041000003500000013d000000440030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000402100370000000000202043b000800000002001d000001fc0020009c000005c90000213d0000002401100370000000000101043b000700000001001d0000020401000041000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff001001900000042c0000c13d000000400100043d0000002402100039000002040300004100000000003204350000023a020000410000000000210435000000040210003900000000030004110000000000320435000001f90010009c000001f90100804100000040011002100000023b011001c7000007e200010430000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b000000000010043f000000200000043f0000004002000039000000000100001907e007c10000040f00000001011000390000037a0000013d000000240030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000000401100370000000000101043b000000000010043f0000000301000039000000200010043f00000040020000390000000001000019000003940000013d0000000001000416000000000001004b000005c90000c13d0000000701000039000000000101041a000000800010043f0000022901000041000007e10001042e000000440030008c000005c90000413d0000000002000416000000000002004b000005c90000c13d0000002402100370000000000202043b000800000002001d000001fc0020009c000005c90000213d0000000401100370000000000101043b000000000010043f000000200000043f0000004002000039000000000100001907e007c10000040f0000000802000029000000000020043f000000200010043f0000000001000019000000400200003907e007c10000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f0000022901000041000007e10001042e0000000001000416000000000001004b000005c90000c13d0000000101000039000000000101041a000001fc01100197000000800010043f0000022901000041000007e10001042e0000000001000416000000000001004b000005c90000c13d0000020401000041000000800010043f0000022901000041000007e10001042e0000000001000416000000000001004b000005c90000c13d0000020201000041000000800010043f0000022901000041000007e10001042e000000c40030008c000005c90000413d0000004402100370000000000202043b000600000002001d0000002402100370000000000202043b000700000002001d0000000402100370000000000202043b000800000002001d0000006401100370000000000101043b000500000001001d000000ff0010008c000005c90000213d0000000801000029000000000010043f0000000301000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000003f80000c13d0000022a0100004100000000001004430000000001000414000001f90010009c000001f901008041000000c0011002100000022b011001c70000800b0200003907e007db0000040f00000001002001900000057f0000613d000000400400043d000000000101043b0000000703000029000000000031004b000004970000a13d00000236010000410000000000140435000001f90040009c000001f904008041000000400140021000000237011001c7000007e2000104300000000805000029000027100050008c000004160000213d000000640120003900000243030000410000000000310435000000440120003900000245030000410000041e0000013d0000024701000041000000800010043f0000024801000041000007e200010430000000400100043d00000249020000410000004a0000013d0000000803000029000000000003004b000000480000613d0000000201000039000000000201041a0000020502200197000001040000013d00000230010000410000000000100443000000000100041000000004001004430000000001000414000001f90010009c000001f901008041000000c00110021000000231011001c70000800a0200003907e007db0000040f00000001002001900000057f0000613d000000000201043b0000000804000029000000000342004b000005800000813d000000400100043d0000023c020000410000004a0000013d0000000703000029000027100030008c000004420000213d00000064012000390000024303000041000000000031043500000044012000390000024403000041000000000031043500000024012000390000002603000039000000000031043500000241010000410000000000120435000000040120003900000020030000390000000000310435000001f90020009c000001f902008041000000400120021000000242011001c7000007e2000104300000000801000029000000000001004b000000480000613d000000000010043f0000000401000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000070010006c000005b30000813d000000400100043d00000239020000410000004a0000013d000000000035004b000005870000a13d00000064012000390000023f03000041000000000031043500000044012000390000024003000041000000000031043500000024012000390000002a03000039000004210000013d0000000801000029000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000702000029000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000101041a000000ff00100190000000600000c13d0000000801000029000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000702000029000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000201041a000002510220019700000001022001bf000000000021041b0000000001000414000001f90010009c000001f901008041000000c001100210000001ff011001c70000800d020000390000000403000039000002000400004100000008050000290000000706000029000000000700041107e007d60000040f0000000100200190000000600000c13d000005c90000013d000000a0014000390000000602000029000000000021043500000080014000390000000000310435000000c0010000390000000001140436000000c00240003900000000030004100000000000320435000000600240003900000000030004160000000000320435000000400240003900000000030004110000000000320435000000080200002900000000002104350000022c0040009c0000071b0000213d000000e002400039000400000002001d000000400020043f000001f90010009c000001f9010080410000004001100210000700000004001d0000000002040433000001f90020009c000001f9020080410000006002200210000000000112019f00000001020003670000008403200370000000000303043b000300000003001d000000a402200370000000000202043b000200000002001d0000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f000001ff011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000040300002900000000001304350000000702000029000001400120003900000002040000290000000000410435000001200120003900000003040000290000000000410435000001000120003900000005020000290000000000210435000000000000043f000001f90030009c000001f90300804100000040013002100000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f0000022d011001c70000000102000039000700000002001d07e007db0000040f0000006003100270000001f903300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000004f00000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000004ec0000c13d000000000005004b000004fd0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00020000000103550000000100200190000006070000613d0000000101000039000000000101041a000000000200043d000000000121013f000001fc00100198000006040000c13d0000000801000029000000000010043f0000000301000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000201041a000002510220019700000001022001bf000000000021041b0000000001000411000000000010043f0000000401000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b0000000002000416000000000021041b000000400100043d0000000000210435000001f90010009c000001f90100804100000040011002100000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f0000022e011001c70000800d0200003900000003030000390000022f040000410000000805000029000000000600041107e007d60000040f0000000100200190000005c90000613d0000000801000039000000000201041a000000080020006b000000600000a13d0000000802000029000000000021041b00000000010004150000000a0110008a0000000501100210000000060000006b0000000002000019000800000000001d000005590000613d0000000501000039000000000101041a00000006031000b900000006023000fa000000000012004b000006c60000c13d0000000001000415000000090110008a00000005011002100000000602000039000000000402041a00000006024000b900000006052000fa000000000045004b000006c60000c13d000827100030012200052710002001220000000501100270000000050100002f0000000701000039000000000101041a000000060010002a000006c60000413d000600060010002d00000230010000410000000000100443000000000100041000000004001004430000000001000414000001f90010009c000001f901008041000000c00110021000000231011001c70000800a0200003907e007db0000040f0000000604000029000000080040006b0000000003040019000000080300202900000001002001900000057f0000613d000000000101043b000000050010006c000000600000a13d0008000000310053000000600000a13d0000000201000039000000000201041a0000000001000414000001fc04200197000000040040008c000006cc0000c13d0000000001000031000006d90000013d000000000001042f00000000010004140000000005000411000000040050008c000005a00000c13d00000001020000390000000001000031000005d40000013d0000000501000039000000000051041b0000000601000039000000000031041b00000007010000390000000604000029000000000041041b00000040012000390000000000410435000000200120003900000000003104350000000000520435000001f90020009c000001f90200804100000040012002100000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f0000023d011001c70000800d0200003900000001030000390000023e040000410000005d0000013d000001f90010009c000001f901008041000000c001100210000000000042004b000005cb0000c13d0000000002050019000005cf0000013d0000001f0530018f000001fb06300198000000400200043d0000000004620019000006120000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000005ae0000c13d000006120000013d0000000801000029000000000010043f0000000401000039000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000005c90000613d000000000101043b000000000001041b00000000010004140000000802000029000000040020008c000006250000c13d00000001020000390000000001000031000006360000013d0000000001000019000007e200010430000001ff011001c700008009020000390000000004050019000000000500001907e007d60000040f00020000000103550000006001100270000001f90010019d000001f901100197000000000001004b000005db0000c13d0000000100200190000000600000c13d000000400100043d0000024c020000410000004a0000013d000002320010009c0000071b0000213d0000001f0410003900000252044001970000003f044000390000025205400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000002320050009c0000071b0000213d00000001006001900000071b0000c13d000000400050043f000000000614043600000252031001980000001f0410018f00000000013600190000000205000367000005f60000613d000000000705034f000000007807043c0000000006860436000000000016004b000005f20000c13d000000000004004b000005d60000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000005d60000013d000000400100043d0000024b020000410000004a0000013d0000001f0530018f000001fb06300198000000400200043d0000000004620019000006120000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000060e0000c13d000000000005004b0000061f0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001f90020009c000001f9020080410000004002200210000000000112019f000007e200010430000001f90010009c000001f901008041000000c001100210000000070000006b0000062c0000c13d0000000802000029000006310000013d000001ff011001c7000080090200003900000007030000290000000804000029000000000500001907e007d60000040f00020000000103550000006001100270000001f90010019d000001f901100197000000000001004b0000064b0000c13d0000000100200190000005d80000613d000000400100043d00000007020000290000000000210435000001f90010009c000001f90100804100000040011002100000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f0000022e011001c70000800d020000390000000203000039000002380400004100000008050000290000005d0000013d000002320010009c0000071b0000213d0000001f0410003900000252044001970000003f044000390000025205400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000002320050009c0000071b0000213d00000001006001900000071b0000c13d000000400050043f000000000614043600000252031001980000001f0410018f00000000013600190000000205000367000006660000613d000000000705034f000000007807043c0000000006860436000000000016004b000006620000c13d000000000004004b000006380000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000006380000013d000001f90010009c000001f901008041000000c001100210000000060000006b0000067b0000c13d0000000702000029000006800000013d000001ff011001c7000080090200003900000006030000290000000704000029000000000500001907e007d60000040f000500000002001d00020000000103550000006001100270000001f90010019d000001f901100197000000000001004b0000069d0000c13d00000005010000290000000100100190000005d80000613d000000400100043d00000006020000290000000000210435000001f90010009c000001f90100804100000040011002100000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f0000022e011001c70000800d0200003900000003030000390000024d04000041000000080500002900000007060000290000005d0000013d000002320010009c0000071b0000213d0000001f0310003900000252033001970000003f033000390000025204300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000002320040009c0000071b0000213d00000001005001900000071b0000c13d000000400040043f000000000513043600000252021001980000001f0310018f00000000012500190000000204000367000006b80000613d000000000604034f000000006706043c0000000005750436000000000015004b000006b40000c13d000000000003004b000006880000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000006880000013d0000023401000041000000000010043f0000001101000039000000040010043f0000023501000041000007e200010430000001f90010009c000001f901008041000000c001100210000001ff011001c700008009020000390000000803000029000000000500001907e007d60000040f000700000002001d00020000000103550000006001100270000001f90010019d000001f901100197000000000001004b000006f20000c13d00000007010000290000000100100190000000600000613d0000000201000039000000000201041a000000400100043d00000008030000290000000000310435000001f90010009c000001f90100804100000040011002100000000003000414000001f90030009c000001f903008041000000c003300210000000000113019f0000022e011001c7000001fc062001970000800d020000390000000303000039000002330400004100000000050000190000005d0000013d000002320010009c0000071b0000213d0000001f0310003900000252033001970000003f033000390000025204300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000002320040009c0000071b0000213d00000001005001900000071b0000c13d000000400040043f000000000513043600000252021001980000001f0310018f000000000125001900000002040003670000070d0000613d000000000604034f000000006706043c0000000005750436000000000015004b000007090000c13d000000000003004b000006db0000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000006db0000013d0000023401000041000000000010043f0000004101000039000000040010043f0000023501000041000007e2000104300000000001000411000000000010043f000001fd01000041000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007330000613d000000000101043b000000000101041a000000ff00100190000007350000613d000000000001042d0000000001000019000007e200010430000000400100043d0000023a02000041000000000021043500000004021000390000000003000411000000000032043500000024021000390000000000020435000001f90010009c000001f90100804100000040011002100000023b011001c7000007e2000104300001000000000002000100000001001d000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007610000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007610000613d000000000101043b000000000101041a000000ff00100190000007630000613d000000000001042d0000000001000019000007e200010430000000400100043d0000002402100039000000010300002900000000003204350000023a020000410000000000210435000000040210003900000000030004110000000000320435000001f90010009c000001f90100804100000040011002100000023b011001c7000007e2000104300002000000000002000100000002001d000200000001001d000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007be0000613d000000000101043b0000000102000029000001fc02200197000100000002001d000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007be0000613d000000000101043b000000000101041a000000ff00100190000007bd0000613d0000000201000029000000000010043f000000200000043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007be0000613d000000000101043b0000000102000029000000000020043f000000200010043f0000000001000414000001f90010009c000001f901008041000000c001100210000001fe011001c7000080100200003907e007db0000040f0000000100200190000007be0000613d000000000101043b000000000201041a0000025102200197000000000021041b0000000001000414000001f90010009c000001f901008041000000c001100210000001ff011001c70000800d020000390000000403000039000000000700041100000253040000410000000205000029000000010600002907e007d60000040f0000000100200190000007be0000613d000000000001042d0000000001000019000007e200010430000000000001042f000001f90010009c000001f9010080410000004001100210000001f90020009c000001f9020080410000006002200210000000000112019f0000000002000414000001f90020009c000001f902008041000000c002200210000000000112019f000001ff011001c7000080100200003907e007db0000040f0000000100200190000007d40000613d000000000101043b000000000001042d0000000001000019000007e200010430000007d9002104210000000102000039000000000001042d0000000002000019000000000001042d000007de002104230000000102000039000000000001042d0000000002000019000000000001042d000007e000000432000007e10001042e000007e200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d20be27040b8e00df40bca0df34743417f3574a156386188f7d7f14369e5ee82b5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec6d58a2655af2cd69143d408e70af0b0d9dc7bbcfa222b331e96c25160f5c508df1f91cdf1f18aaac45ca4aaddade87aabc2746f6d044da7cf8544558c5776172ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a764000000000002000000000000000000000000000000400000010000000000000000000200000000000000000000000000000000000020000000800000000000000000e42154258c884b86569a2717aa2a913a61e0c7e67ae153dc3c354b3e2d1a821a0000000000000000000000000000000000000000000000000000000070bbccdc00000000000000000000000000000000000000000000000000000000c311d04800000000000000000000000000000000000000000000000000000000e02023a000000000000000000000000000000000000000000000000000000000e02023a100000000000000000000000000000000000000000000000000000000e06dd85700000000000000000000000000000000000000000000000000000000fc7e286d00000000000000000000000000000000000000000000000000000000c311d04900000000000000000000000000000000000000000000000000000000cdeaa0d400000000000000000000000000000000000000000000000000000000d547741f0000000000000000000000000000000000000000000000000000000089650ca10000000000000000000000000000000000000000000000000000000089650ca20000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000a217fddf0000000000000000000000000000000000000000000000000000000070bbccdd00000000000000000000000000000000000000000000000000000000738b660500000000000000000000000000000000000000000000000000000000860f83890000000000000000000000000000000000000000000000000000000036568abd000000000000000000000000000000000000000000000000000000005b7633cf000000000000000000000000000000000000000000000000000000005b7633d000000000000000000000000000000000000000000000000000000000627c0906000000000000000000000000000000000000000000000000000000006c19e7830000000000000000000000000000000000000000000000000000000036568abe000000000000000000000000000000000000000000000000000000003ab1a49400000000000000000000000000000000000000000000000000000000498256fe00000000000000000000000000000000000000000000000000000000248a9ca200000000000000000000000000000000000000000000000000000000248a9ca30000000000000000000000000000000000000000000000000000000024a27546000000000000000000000000000000000000000000000000000000002f2ff15d0000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000f378e2d000000000000000000000000000000000000000000000000000000001581b6000000000000000000000000000000000000000020000000800000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f0000000000000000000000000000000000000080000000000000000000000000020000000000000000000000000000000000002000000000000000000000000068e6c1885896ef6bee8fc3c844a09f7f4216386f01abba29307b8914c078ad109cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f390200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff2d7037c69bcf96189308bafd217604e9c2e48dc9a53440d76a9deb9f79e4c0704e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001ab7da6b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000ffab3269bdaceca4d1bbc53e74b982ac2b306687e17e21f1e499e7fdf6751ac816365d5f00000000000000000000000000000000000000000000000000000000e2517d3f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000f4d678b80000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000002d29bf5372a37714bd740b4bc269dcf08b0e39244636a0b57e080e0f7d41351d6f656666696369656e74000000000000000000000000000000000000000000004d696e20636f656666696369656e74206d757374206265203c3d206d6178206308c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000031303030302900000000000000000000000000000000000000000000000000004d617820636f656666696369656e74206d757374206265203e203130302520284d696e20636f656666696369656e74206d757374206265203e20313030252028d92e233d000000000000000000000000000000000000000000000000000000006697b232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000c6b10ad400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff60356a4418000000000000000000000000000000000000000000000000000000006d963f8800000000000000000000000000000000000000000000000000000000a36fc4ad282359d6ef9ef76f382c81149ff9d0247db534e73ba26f8a31c1019700000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000007965db0b00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9df642d80c04c6a0dd6785ea75e5005f804e78bcf62162e83a0fe978551f3147
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000ef80626c6406ec0bf9720e2e81c066396c000000000000000000000000020000dc5611f4258cb9c0b0d0da971cdba8b96a9
-----Decoded View---------------
Arg [0] : defaultAdmin (address): 0x00000eF80626C6406ec0bf9720e2e81C066396C0
Arg [1] : _signerAddress (address): 0x20000dC5611f4258cb9c0b0d0Da971cDba8b96a9
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000ef80626c6406ec0bf9720e2e81c066396c0
Arg [1] : 00000000000000000000000020000dc5611f4258cb9c0b0d0da971cdba8b96a9
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2,296.07
Net Worth in ETH
0.778314
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ABSTRACT | 100.00% | $2,949.36 | 0.7785 | $2,296.07 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.